Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

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

Читайте также:
  1. II. 12-24. Причина страданий преданных
  2. II. Ввод и редактирование данных
  3. V. Форматирование данных
  4. X. Оператора манипулирования данными. Вставка данных
  5. Адресация данных в процессоре
  6. Анализ и обобщение опыта передовой практики и литературных данных
  7. Архивирование данных об источниках информации

 

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

Примеры:

AX0 = 0x001A (ADSP2181)

ADDI 100Ah, R1 (TMS320C3x)

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

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

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

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

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

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

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

 

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

 

 

Адрес операнда в памяти данных
Адрес страницы Адрес операнда в пределах страницы
..... 000001 (Страница 0) ...... (Адреса 0..63)
..... 000001 (Страница 1) ...... (Адреса 0..63)
..... ......
..... 000001 (Страница 15) ...... (Адреса 0..63)

 

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

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

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

 

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

 

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) (постинкремент). Временная задержка t означает, что изменение содержимого регистра 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 включает три набора регистров:

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

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

* регистры длины 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.

В этом примере рассмотрены относительные адреса ячеек памяти буфера, которые не учитывают месторасположения группы ячеек (буфера данных) в памяти. Все относительные адреса изменяются в пределах 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; К содержимому регистра A1 прибавляется (add) константа –13. Результат помещается в регистр A6. Операция выполняется в функциональном блоке L1.

ADD. L2X A1, B1, B2; К содержимому регистра A1 прибавляется содержимое регистра B1. Результат помещается в регистр B2. Символ «X» в обозначении блока.L2X показывает, что при выполнении операции используются перекрёстные связи между каналами обработки данных A и B.

SUB.L1 A1, A2, A3; Из содержимого регистра A1 вычитается (sub tract) содержимое регистра A2. Результат помещается в регистр A3.

 

7.4.2.2. Умножение и умножение с накоплением

 

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

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

IF NOT MV MR = MR+MX0*MY0 (SS); Если регистр, хранящий результат операции умножения/накопления, не переполнен (MV=0), выполняется операция умножения с накоплением. Символ «SS» означает, что оба сомножителя знаковые.

Примеры команд умножения в процессоре TMS320C64x.

MPYU.M1 A1, A2, A3; Команда перемножения (multiply) беззнаковых (unsigned) 16 – шестнадцатиразрядных чисел, хранящихся в 16 младших разрядах регистров A1 и A2, c сохранением результата в 32 разрядах регистра A3.

MPY.M1 A1, A2, A3; Команда перемножения шестнадцатиразрядных знаковых чисел, хранящихся в младших разрядах регистров A1 и A2 (16LSB x 16LSB), c сохранением результата в 32 разрядах регистра A3.

CMPY.M1 A0, A1, A3:A2; Команда перемножения комплексных чисел (c omplex multiply ). Действительные части сомножителей размещаются в 16 старших разрядах регистров A0 и A1, а мнимые – в 16 младших. Действительная часть произведения загружается в регистр A3, а мнимая – в регистр A2

7.4.2.3. Команды арифметического сдвига

При арифметическом сдвиге влево содержимого регистра младшие освободившиеся биты заполняются нулями, а старшие выдвигаемые биты теряются. При арифметическом сдвиге вправо младшие выдвигаемые биты теряются, а старшие освободившиеся заполняются расширением знака. Сказанное иллюстрируется рисунком

Рассмотрим примеры команд арифметического сдвига в процессоре ADSP-2181:

SI = 0xB6A3;

SR = ASHIFT SI BY -5 (HI);

Во входном регистре сдвигателя находится число 0xB6A3. Команда ASHIFT выполняет арифметический сдвиг этого числа на –5 двоичных разрядов, т.е. на 5 разрядов вправо. Модификатор HI означает, что сдвиг осуществляется относительно старшей части SR1 выходного регистра SR. Чтобы найти результат, нужно мысленно поместить входной операнд в SR1, а затем выполнить сдвиг вправо на 5 двоичных разрядов с расширением знака. Результат показан на рисунке.

SR = ASHIFT SI BY 5 (LO); Команда выполняет арифметический сдвиг на 5 разрядов влево. Модификатор LO означает, что сдвиг выполняется относительно младшей части SR0 выходного регистра SR. Результат выполнения команды показан на рисунке.

Примеры команд арифметического сдвига процессоров TMS320C64x:

SHR.S1 A0, 8, A1 - арифметический сдвиг (Sh ift R ight) содержимого регистра А0 на 8 разрядов вправо с расширением знака и записью результата в регистр A1,

SHL.S1 A0, 4, A1 - арифметический сдвиг (Sh ift L eft) содержимого регистра A0 на 4 разряда влево с заполнением освободившихся младших разрядов нулями и записью результата в регистр A1.

 

7.4.2.4. Дополнительный набор арифметических команд

 

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

Рассмотрим некоторые дополнительные команды процессоров TMS320C64x:

ABS.L1 A1, A5; Команда определяет абсолютное значение (abs olute value) числа в A1 и пересылает его в A5. AVG2.M1 A0, A1,A2; По этой команде находятся арифметическое среднее (av era g e) двух знаковых чисел, занимающих 16 старших разрядов регистров A0 и A1, и арифметическое среднее двух знаковых чисел, находящихся в 16 младших разрядах регистров A0 и A1. Полученные средние значения сохраняются в 16 старших и 16 младших разрядах регистра A2 соответственно.

MAX2.L2X A2, B8, B12; Команда позволяет определить максимальное из двух знаковых чисел, находящихся в 16 старших разрядах регистров A2 и B8, и максимальное из двух знаковых чисел из 16 младших разрядов регистров A2 и B8. Полученные максимальные значения помещаются в 16 старших и 16 младших разрядов регистра B12 соответственно.

SAT.L2 B1:B0, B5; Команда насыщения (sat uration) работает следующим образом. Если 40-разрядное содержимое сдвоенного регистра B1:B0, больше 232-1, то в регистр B5 записывается 232-1, т.е. максимальное 32-разрядное положительное число, если содержимое регистра B1:B0 меньше –232, то в регистр B5 записывается минимальное 32-разрядное отрицательное число -232. В противном случае содержимое B1:B0 пересылается в B5.

 

7.4.3. Команды логических операций

 

К командам логических операций относятся AND –“И” (логическое умножение), OR-“ИЛИ” (логическое сложение), XOR- “ИСКЛЮЧАЮЩЕЕ ИЛИ”, NOT – “НЕ” (отрицание). Указанные операции выполняются побитно.

Приведём примеры команд логических операций процессоров ADSP-21xx:

AR = AX0 AND AY0; AF = NOT AY1; AR = AF OR AX0.

Логический сдвиг отличается от арифметического тем, что отсутствует расширение знака, которое имеет место при арифметическом сдвиге. При логическом сдвиге все свободные биты заполняются нулями.

SI = 0xB6A3;

SR = LSHIFT SI BY –5 (HI); Команда выполняется подобно команде арифметического сдвига, рассмотренной в предыдущем разделе.

Рассмотрим примеры команд логических операций в процессорах TMS320C64x.

AND.L1 15, A1, A3;; В функциональном блоке L1 выполняется операция поразрядного логического умножения (bitwise and –поразрядное «и») константы 15 и содержимого регистра A1 с записью результата операции в регистр A3.

NOT.L1 A1, A2; Выполняется операция поразрядного логического отрицания (bitwise not-поразрядное «не») содержимого регистра A1 с записью результата в регистр A2.

OR.S1 A3, A4, A5; В функциональном блоке S1 выполняется операция поразрядного логического сложения (bitwise or –поразрядное «или») содержимого регистров A3 и A4 с сохранением результата в регистре A5.

 

7.4.4. Команды бит-манипуляций

 

Бит-манипуляцией называется выполнение операции над отдельным, указываемым в команде битом или группой битов. Это может быть: обнуление бита, установка бита, проверка бита, инверсия бита. Указанные операции используются обычно для изменения содержимого управляющих регистров процессора.

В процессорах ADSP-21xx к командам бит-манипуляций относятся: TEST BIT- проверка бита, SET BIT-установка бита, CLEAR BIT – стирание бита (установка «0»), TOGGLE BIT – переключение бита – замена “1” на “0” и наоборот.

Приведём пример команд бит-манипуляций.

AF=TSTBIT 5 OF AR; Команда выполняет тестирование 5-го бита регистра АЛУ AR с записью результата в регистр AF. Тестирование осуществляется с помощью операции логического «И» содержимого регистра AR и операнда, содержащего «1» только в тестируемом разряде.

AR=CLEAR 13 OF AX0; Команда записывает в регистр АЛУ AR значение операнда AX0 с нулевым битом №13. Для этого используется операция «и» (AND) содержимого регистра AX0 и операнда, содержащего «0» только в разряде №13.

Рассмотрим примеры команд бит-манипуляций в процессорах семейства TMS320C64x.

SET.S1 A0, 7, 21, A1; Команда выполняется в функциональном блоке S1. Она устанавливает биты «1» в операнде, хранящемся в регистре A0, начиная с 7 и заканчивая 21 битом, c записью результата в регистр A1.

SET.S2 B0, B1, B2; В данной команде в отличие от предыдущей значения пограничных битов определяются содержимым регистра B1: минимальное значение определяется битами 9..5, максимальное – битами 4..0.

 

7.4.5. Команды управления

 

Команды управления в целом обеспечивают программное управление работой процессора. К ним относятся:

· команды безусловного перехода,

· команды условного перехода,

· команды цикла,

· команды обращения к подпрограммам,

· команды безусловного перехода передают управление ячейке памяти программ, адрес которой указывается в команде.
Например, команда JUMP(I4) в процессорах ADSP-21xx означает переход к ячейке памяти программ, адрес которой содержится в индексном регистре I4.

В качестве адреса может быть указана метка в программе. Например, JUMP FIR_START. Метке FIR_START соответствует исполняемый адрес команды, в которой указана эта метка.

Аналогичные команды используется в процессорах TMS320C6xx:


Дата добавления: 2015-07-08; просмотров: 212 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
ADD .L1 A0, A1, A2;| B .S1 LOOP, B .S2 B10.

mybiblioteka.su - 2015-2024 год. (0.027 сек.)