Лекция № 10 (Лекции МП)
Описание файла
Файл "Лекция № 10" внутри архива находится в папке "Лекции МП". Документ из архива "Лекции МП", который расположен в категории "". Всё это находится в предмете "микропроцессоры" из 7 семестр, которые можно найти в файловом архиве РТУ МИРЭА. Не смотря на прямую связь этого архива с РТУ МИРЭА, его также можно найти и в других разделах. Архив можно найти в разделе "лекции и семинары", в предмете "микропроцессоры" в общих файлах.
Онлайн просмотр документа "Лекция № 10"
Текст из документа "Лекция № 10"
ЛЕКЦИЯ № 10.
Автоматическая генерация адресов операндов.
Структурная схема устройства генерации адреса (УГА):
В организации каждого адреса участвуют R, N и М:
R0 – R7 – регистры адреса.
N0 – N7 – регистры смещения.
М0 – М7 – регистры типа арифметики.
R0 – R3, N0 – N3, M0 – M3 – определяют адрес Х.
R4 – R7, N4 – N7, M4 – M7 – определяют адрес Y.
Тип арифметики определяется содержимым регистра типа арифметики.
При вычислении модифицированного адреса может использоваться один из следующих типов арифметики:
-
линейная;
-
модульная;
-
бит-реверсивная (с обратным переносом).
Без устройства генерации адреса (УГА) сам блок МАС будет бессмысленным.
Модификация адреса.
Модификация (изменение) адреса означает автоматическое вычисление нового адреса, выполняемое в УГА независимо от основной операции команды. Модификация адреса может производиться как до, так и после выполнения основной операции.
Способы модификации адреса для линейной и модульной арифметики:
1) Без модификации:
MOVE X0, X: (R0) (X0) → X: ((R0))
По этой команде: содержимое входного регистра X0 передаётся в память Х по косвенно указанному адресу, который определяется регистром R0.
2) Постинкрементная на 1:
MOVE X1, Y: (R5) + (X1) → Y: ((R5)) (R5) + 1 → (R5)
По этой команде: содержимое входного регистра X1 передаётся в память Y по косвенно указанному адресу, который определяется регистром R5. После этого, содержимое регистра адреса R5 автоматически увеличивается на единицу и записывается в регистр R5. Следовательно: исполняемый адрес в данной команде не изменяется.
3) Постдекрементная на 1:
MOVE Y0, X: (R1) – (Y0) → X ((R1)) (R1) – 1 → (R1)
По этой команде: содержимое входного регистра Y0 передаётся в память X по косвенно указанному адресу, который определяется регистром R1. После этого, содержимое регистра адреса R1 автоматически уменьшается на единицу и записывается в регистр R1. Следовательно: исполняемый адрес в данной команде не изменяется.
4) Преинкрементная на 1:
В процессорах фирмы Motorola DSP560xx данный тип модификации отсутствует.
5) Предекрементная на 1:
MOVE A1, X: – (R2) (R2) – 1 → (R2) (A1) → X: ((R2))
По этой команде: перед выполнением команды содержимое регистра адреса R2 автоматически уменьшается на единицу и записывается в регистр R2. После этого, содержимое части аккумулятора А1 передаётся в память X по косвенно указанному адресу, который определяется регистром R2.
Следовательно: перед выполнением команды вычисляется новый исполняемый адрес.
6) Постинкрементная на N:
MOVE A0, X: (R2) + N2 (A0) → X: ((R2)) (R2) + N2 → (R2)
По этой команде: содержимое части аккумулятора А0 передаётся в память X по косвенно указанному адресу, который определяется регистром R2. После этого, содержимое регистра адреса R2 автоматически увеличивается на целое число N2 и записывается в регистр R2. Следовательно: исполняемый адрес в данной команде не изменяется.
7) Постдекрементная на N:
MOVE B1, Y: (R6) – N6 (B1) → Y: ((R6)) (R6) – N6 → (R6)
По этой команде: содержимое части аккумулятора B1 передаётся в память Y по косвенно указанному адресу, который определяется регистром R6. После этого, содержимое регистра адреса R6 автоматически уменьшается на целое число N6 и записывается в регистр R6.
Следовательно: исполняемый адрес в данной команде не изменяется.
8) Индексация (указание) адреса:
Индексация (указание) адреса означает автоматическое изменение исполняемого адреса без изменения содержимого регистра адреса и смещения N.
MOVE B0, X: (R0 + N0) B0 → X: ((R0 + N0))
По этой команде: содержимое части аккумулятора B0 передаётся в память X по косвенно указанному адресу, который вычисляется сложением содержимого регистра адреса R0 и смещения N0. После выполнения команды содержимое регистров R0 и N0 не меняется.
Примечание:
В командах имя регистра в круглых скобках - соответствует содержимому этого регистра.
Косвенная адресация с пост- и предекрементами/преинкрементами на 1 обеспечивает простую организацию программного обращения к соседним элементам массива в памяти данных. А постдекремент/постинкремент адреса на N обеспечивает простую организацию программного обращения к произвольным элементам массива в памяти данных. При этом число N, называемое смещением, хранится в регистре смещения.
Модульная арифметика.
Суть модульной арифметики состоит в следующем. Рассмотрим целое число А. Разделив его на другое целое положительное число М, получим остаток от деления а, которое называют значением А, вычисленным по модулю М и обозначают:
а = А mod M
Рассмотрим два целых числа А и В. Разделив эти числа на третье целое положительное число М, получим остатки от деления а и b, которые называют значениями А и В, вычисленными по модулю М, и обозначают:
а = А mod M
b = B mod M
Числа А и В считаются равными (сравнимыми) между собой по mod M, если а ≡ b, где символ «≡», называемый сравнением, имеет тот же смысл, что и символ равенства в линейной арифметике.
Например, числа 373 и 693 по mod 20 равны (сравнимы) между собой:
373 ≡ 693 ≡ 13 mod 20
По mod 2 равны между собой все четные числа (0 mod 2) и нечетные числа (1 mod 2) и т.д.
Применение модульной арифметики.
Многие алгоритмы ЦОС представляют собой циклическую обработку блока данных фиксированной длины. Для хранения таких данных в памяти выделяется область заданного объема, которую называют буфером. Данные могут поступать в буфер извне или вычисляться в цикле. Организация последовательной записи данных в буфер или считывания из буфера представляет собой циклический буфер.
При обращении к ячейкам буфера исполняемые адреса вычисляются по правилам модульной арифметики, что позволяет автоматически выполнять операцию проверки достижения конца буфера и возврата в его начало, тем самым, обеспечивая циркуляцию данных внутри буфера.
Адресацию операнда называют циклической, если исполняемый адрес вычисляется по правилам модульной арифметики.
Рассмотрим организацию циклического буфера. Укажем его размер: М ячеек памяти данных. Это значение (либо на 1 меньшее, М – 1, как в процессорах фирмы Motorola) записывается в регистр типа арифметики, который в процессорах различных фирм имеет собственные имена и обозначения.
Рассмотрим вычисление исполняемого адреса при циклической адресации, для чего введем понятие относительного адреса в циклическом буфере. Будем называть относительными адреса ячеек буфера, не учитывающие его местоположение в пространстве памяти данных. Все относительные адреса начинаются с 0 (нижняя относительная граница буфера) и заканчиваются (М – 1) (верхняя относительная граница буфера). Очевидно, что абсолютные адреса отличаются от соответствующих относительных адресов на некоторую целую положительную константу, равную абсолютной нижней границе буфера. Она называется базой буфера и обозначается Bs (Base).
Регистр адреса при циклической адресации:
Как видно из рисунка, содержимое 16-разрядного регистра адреса (исполняемый адрес) при циклической адресации равно сумме двух 16-разрядных чисел: базы Bs и относительного адреса. Причем, база Bs содержит k нулевых младших разрядов, а относительный адрес содержит (16 – k) нулевых старших разрядов.
Количество k младших разрядов в регистре адреса, отводимое для хранения относительного адреса, определяется по заданному размеру М циклического буфера из условия:
2k – 1 < М ≤ 2k
Например: при М = 5, k = 3 (22 < М < 23);
при М = 32, k = 5 (24 < М = 25);
при М = 90, k = 7 (26 < М < 27).
Полученное значение k обеспечивает адресацию содержимого ячеек циклического буфера с относительными адресами с 0–го по (2k –1), что соответствует абсолютным адресам: с базового Bs по (Bs + (2 k – 1))-й. Адрес (2 k – 1) называется предельной относительной границей буфера; абсолютная предельная граница равна Bs + (2 k – 1). Пространство памяти буфера с относительными адресами с М-го по (2 k – 1)-й включительно свободно и может использоваться для других целей.
Значение базы Bs должно быть кратным 2 k:
Bs = р ∙ 2 k, где р = 1, 2, …
Выбор р определяется свободной областью в памяти данных, где может размещаться циклический буфер.
Начальный исполняемый адрес может быть:
-
равен нижней границе буфера – k младших разрядов содержат 0;
-
равен верхней границе буфера – k младших разрядов содержат 1;
-
произвольным в границах буфера - в k младших разрядах хранится соответствующий относительный исполняемый адрес.
Тогда, следующий исполняемый адрес ЕА при постинкременте/постдекременте на N (|N| < М, чтобы не выйти за пределы буфера), согласно правилам модульной арифметики, вычисляется по формуле:
(ЕА – Bs + N) mod М + Bs, если (ЕА – Bs + N) ≥ 0
или по формуле:
(ЕА – Bs + N) mod М + Bs +М, если (ЕА – Bs + N) < 0
Пример организации циклического буфера:
После выполнения команды:
MOVE A1, X: (R0) + N0
cледующий исполняемый адрес определяется как:
((R0) – Bs + (N0)) mod М + Bs > R0
Примечание: Все адреса указаны в десятичной системе.
Размер циклического буфера М = 90; значение (М – 1) хранится в регистре М0. Количество k младших разрядов, определенное из условия:
2 k – 1 < М ≤ 2 k (26 < 90 < 27),
равно 7. База Bs (нижняя граница буфера), кратная 27, выбрана равной 128. Верхняя граница буфера равна 217 (Bs + М − 1), а предельная граница − 255 (Bs + (27 − 1)). Ячейки с 218-й по 255-ю свободны и могут быть использованы для других целей. Начальный 16-разрядный исполняемый адрес равен 165 и хранится в регистре адреса R0. Относительный исполняемый
7-разрядный начальный адрес равен 37 = 0100101(2). После первого выполнения команды следующий исполняемый адрес вычисляется как:
((R0) – Bs + (N0)) mod 90 + Bs = (165 – 128 +15) mod 90 + 128 = 180.
После второго и третьего выполнения команды, исполняемые адреса последовательно становятся равными:
(180 – 128 +15) mod 90 + 128 = 195;
(195 – 128 +15) mod 90 + 128 = 210.
Очередной инкремент при линейной арифметике привел бы к исполняемому адресу 225, который выходит за верхнюю границу буфера. Однако, модульная арифметика заставляет содержимое R0 оставаться внутри буфера, т.е. в действительности исполняемый адрес становится равным:
(210 – 128 +15) mod 90 + 128 = 135.
Бит-реверсивная арифметика (с обратным переносом).
Бит-реверсивная арифметика (с обратным переносом) используется только при обработке положительных целых двоичных чисел. В результате выполнения операции бит-реверсии, биты двоичного числа оказываются переставленными в обратном порядке.
Бит-реверсивная арифметика применяется в алгоритмах быстрого преобразования Фурье (БПФ) по основанию 2, когда количество исходных отсчетов L равно L = 2k.