Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЦОС 2.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
2.92 Mб
Скачать

46. Способы указания операндов в слове команды. Прямая адресация. Непосредственная адресация.

5.3.2. Непосредственная и прямая адресации данных

При непосредственной адресации операнд указывается в команде константой.

Примеры:

AX0 = 0x001A (ADSP2181)

ADDI 100Ah, R1 (TMS320C3x)

Адресацию называют прямой, если в команде указывается:

  • исполняемый адрес, т.е. адрес – адрес ячейки памяти данных,

  • адрес операнда на странице памяти данных, по которому автоматически вычисляется исполняемый адрес,

  • имя регистра, из которого считывается, или в который записывается операнд.

Рассмотрим пример исполняемого адреса: AX1 = DM(0x1001) - команда пересылки в процессоре ADSP-21xx из памяти данных (DM) по адресу 0x1001 в регистр АЛУ AX1.

Приведём пример адреса операнда на странице памяти данных. Сначала рассмотрим разбиение памяти данных на страницы. В таблице показано разбиение 10-разрядного адреса памяти данных на две части: 4-разрядный адрес страницы и 6-разрядный адрес операнда в пределах данной страницы.

Для того чтобы использовать адрес на странице нужно предварительно указать в программе номер страницы. Адрес памяти формирует процессор путем конкатенации (объединения) двух адресов. Адрес страницы располагается в старших разрядах адреса памяти данных, а адрес на странице – в младших.

Таблица. Разбиение памяти данных на страницы

Адрес операнда в памяти данных

Адрес страницы

Адрес операнда в пределах страницы

0000

0000

. . . . .

0000

000000

000001 (Страница 0)

. . . . . . (Адреса 0..63)

111111

0001

0001

. . . . .

0001

000000

000001 (Страница 1)

. . . . . . (Адреса 0..63)

111111

. . . . .

. . . . . .

1111

1111

. . . . .

1111

000000

000001 (Страница 15)

. . . . . . (Адреса 0..63)

111111

Рассмотрим пример выполнения команды сложения целых чисел со страничной адресацией ADDI @BCDEh, R7 в процессорах платформы С3000 фирмы TI, где @ - символ прямой адресации, а R7 – регистр процессора.

DP (data page pointer) - указатель страницы

В рассмотренных примерах операнды в словах команд указываются константами (0x001A, 0x1001, BCDEh) и именами регистров процессоров (AX0, AX1, R1, R7).

47. Косвенная адресация. Виды модификации адреса.

5.3.3. Косвенная адресация

Адресация называется косвенной, если исполняемый адрес хранится в специальном регистре, называемом регистром адреса. Косвенная адресация поддерживается всеми сигнальными процессорами. Слово расширения при косвенной адресации, как правило, не используется.

Для определения исполняемого адреса при косвенной адресации требуется выполнение арифметических операций. Для их реализации используются специальные узлы. Например, процессоры семейства ADSP-21xx имеют два генератора адресов данных: DAG1 и DAG2 (Date Address Generator), а в процессорах TMS320C3xxx используются два арифметических устройства вспомогательных регистров ARAU (Auxiliary Register Arithmetic Unit).

При косвенной адресации предусматривается возможность наряду с определением исполняемого адреса его модификация.

Существуют следующие виды модификации:

  • постдекремент – уменьшение после выполнения команды содержимого регистра адреса на M, где M – целое положительное число, называемое смещением;

  • постинкремент – увеличение после выполнения команды содержимого регистра адреса на M;

  • предекремент - уменьшение до выполнения команды содержимого регистра адреса на M;

  • преинкремент - увеличение до выполнения команды содержимого регистра адреса на M;

Рассмотрим примеры косвенной адресации в процессорах TMS320C3xxx.

Команда ADDI *AR0, R7 предусматривает выполнение операции сложения содержимого регистра R7 и содержимого ячейки памяти, адрес которой находится во вспомогательном регистре AR0. Префикс * означает, что данный регистр используется в качестве регистра адреса. На рисунке дано наглядное представление определения операнда, адрес которого задан в виде *AR0. На этом же рисунке представлен способ адресации с преинкрементом.

Косвенная адресация *AR0 и косвенная адресация с преинкрементом *+ARn(M),

где n =0..7

В двух предыдущих случаях содержимое регистра ARn не изменялось при модификации адреса, содержащегося в регистре ARn. Следующий рисунок показывает, как находится операнд при косвенной адресации вида *+ +ARn(M) (преинкремент) и вида *ARn++(M) (постинкремент) . Временная задержка  означает, что изменение содержимого регистра ARn осуществляется после определения исполняемого адреса операнда.

Косвенная адресация с преинкрементом Косвенная адресация с постинкрементом

и изменением содержимого и изменением содержимого

регистра адреса *++ARn(M), где n = 0..7 регистра адреса *ARn++ (M), где n = 0..7

Выбор операнда с использованием предекремента и *-ARn(M), *- -ARn(M) постдекремента *ARn--(M) отличается от выбора операнда в ранее рассмотренных примерах только использованием операции вычитания вместо операции сложения.

Во всех приведенных вариантах косвенной адресации в скобках вместо константы M можно указывать индексные регистры IR0 и IR1. Тогда во всех операциях вместо M будет использоваться их содержимое.

Значение M=1 используется в приведенных командах по умолчанию и в команде вместе со скобками не указывается.

Рассмотрим косвенную адресацию в процессорах семейства ADSP21xx. В этих процессорах имеется два независимых генератора адресов данных DAG (data address generator) , для того чтобы можно было одновременно работать с памятью программ и памятью данных. Оба генератора обеспечивают косвенную адресацию. Однако DAG1 может генерировать только адреса памяти данных, но имеет дополнительную возможность изменения порядка бит в адресе на обратный (реверс бит), а DAG2 может генерировать как адреса памяти данных, так и адреса памяти программ, но не обладает возможностью реверса бит.

Каждый DAG включает три набора регистров:

  1. регистры модификации M,

  2. индексные регистры I,

  3. регистры длины L.

Каждый набор содержит четыре 14-битных регистра, содержимое которых может быть считано или записано по шине данных памяти данных DMD.

Индексные регистры I0..I3 в DAG1 и I4..I7 в DAG2 содержат реальные адреса, по которым производится доступ к памяти.

Генераторы адресов данных используют схему постмодификации: после косвенной адресации данных к содержимому определенного I - регистра добавляется содержимое определенного M - регистра (M0..M3 в DAG1 и M4..M7 в DAG2) для генерации измененного значения адреса в индексном регистре. Значения модификации, записанные в M - регистрах, знаковые, поэтому следующий адрес может быть как больше, так и меньше текущего.

Для линейной адресации вида I=I+M в соответствующий L - регистр записывается ноль.

Рассмотрим команду пересылки, в которой используется косвенная адресация

AX0 = DM(I2,M2).

Наряду с линейной адресацией в сигнальных процессорах используется адресация по модулю при организации циклов

I=0, а L=5, M=1 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0

I=4, L=5, M=-1 4, 3, 2, 1, 0, 4, 3, 2, 1, 0

Iисп = B+I

В этом примере рассмотрены относительные адреса ячеек памяти буфера, которые не учитывают месторасположения группы ячеек (буфера данных) в памяти. Все относительные адреса изменяются в пределах 0 .. L-1.

Абсолютные адреса ячеек памяти буфера отличаются от относительных на некоторую положительную константу, которая называется базой буфера B.

Исполняемый адрес ячейки памяти циклического буфера Iисп = B+I.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]