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

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

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

Примеры:

AX0 = 0x001A (ADSP2181)

ADDI 100Ah, R1 (TMS320C3x)

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

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

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

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

Пример исполняемого адреса:

AX1 = DM(0x1001)

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

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

Сначала рассмотрим разбиение памяти данных на страницы.

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

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

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

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

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) - указатель страницы

7.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. На этом же рисунке представлен способ адресации с преинкрементом.

Косвенная адресация с преинкрементом *+ARn(M), где n = 0..7

В двух предыдущих случаях содержимое регистра ARn не изменялось при модификации адреса, содержащегося в регистре ARn..

*+ +ARn(M) - преинкремент с последующим изменением

адреса

*ARn++(M) - постинкремент с последующим изменением

адреса

Временная задержка  означает, что изменение содержимого регистра ARn осуществляется после определения исполняемого адреса операнда.

Выбор операнда с использованием предекремента и постдекремента и *-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).

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

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

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

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

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

7.4. Основные типы команд процессора

7.4.1. Команды пересылок

Команды пересылок предназначены для чтения операндов из памяти в регистр, записи операндов из регистра в память, организации ввода/вывода данных.

Основные типы пересылок:

В регистр:

из ячейки памяти данных, из ячейки памяти программ, из другого регистра, константы;

В ячейку памяти данных:

из другой ячейки памяти данных, из ячейки памяти программ , из регистра, константы;

В ячейку памяти программ:

из ячейки памяти данных, из регистра.

Команды пересылок могут отличаться наличием условия пересылки, указанием сдвига данных перед пересылкой, типом пересылаемых данных (старшее или младшее слово, полуслово, байт)

Рассмотрим примеры команд пересылок.

AX0 = DM(I0,M0);

Из ячейки памяти, адрес которой находится в индексном регистре I0, данные пересылаются в регистр АЛУ AX0. После этого адрес, хранящийся в I0, изменяется на величину смещения M0.

DM(I1,M1) = AR;

Пересылка осуществляется из регистра АЛУ AR в ячейку памяти, адрес которой находится в индексном регистре I1 с последующей модификацией адреса памяти на величину M1.

В процессорах TMS320C64x:

LDW .D1 *A10, B1;

Команда выполняется в функциональном блоке .D1 и обеспечивает загрузку (LD-load-загрузка) слова (W-word-слово) в регистр B1 из ячейки памяти, адрес которой содержится в регистре A10.

LDW .D1 *++A4 [A12], A8;

Команда выполняется в .D1 и обеспечивает загрузку слова, адрес которого в ячейке памяти определяется, исходя из содержимого индексного регистра A4 и содержимого регистра модификации A12. Новое значение адреса записывается в регистр A4. При A12>0 эта операция называется преинкрементом, а при A12<0 – предекрементом.

LDB .D1 *++A4 [A12] , A8

Команда позволяет выделить из слова и переслать один байт.

7.4.2. Команды арифметических операций

7.4.2.1. Сложение и вычитание

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

Примеры команд сложения и вычитания в процессоре ADSP-2181:

AR = AX0 + AY0,

AR = AX0 – AY0,

AF = AX1+1.

Примеры команд сложения и вычитания в процессоре TMS320C64.

ADD .L1 -13, A1, A6 ;