
- •7. Система команд и адресация данных
- •7.2. Непосредственная и прямая адресации данных
- •Addi @bcdEh, r7
- •К содержимому регистра a1 прибавляется (add) константа –13. Результат помещается в регистр a6. Операция выполняется в функциональном блоке l1.
- •Mpyu .M1 a1, a2, a3;
- •Cmpy .M1 a0, a1, a3:a2;
- •В качестве адреса может быть указана метка в программе. Например, jump fir_start. Метке fir_start соответствует исполняемый адрес команды, в которой указана эта метка.
- •B .S1 loop, b .S2 b10.
- •Рассмотрим программную организацию цикла в процессоре tms320c64xx.
- •Filtr: . . . . . . . . . .
К содержимому регистра a1 прибавляется (add) константа –13. Результат помещается в регистр a6. Операция выполняется в функциональном блоке l1.
ADD . L2X A1, B1, B2;
К содержимому регистра A1 прибавляется содержимое регистра B1. Результат помещается в регистр B2. Символ «X» в обозначении блока .L2X показывает, что при выполнении операции используются перекрёстные связи между каналами обработки данных A и B.
SUB .L1 A1, A2, A3;
Из содержимого регистра A1 вычитается (subtract) содержимое регистра 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;
Команда перемножения комплексных чисел (complex 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
- арифметический сдвиг (Shift Right) содержимого регистра А0 на 8 разрядов вправо с расширением знака и записью результата в регистр A1,
SHL .S1 A0, 4, A1
- арифметический сдвиг (Shift Left) содержимого регистра A0 на 4 разряда влево с заполнением освободившихся младших разрядов нулями и записью результата в регистр A1.
7.4.2.4. Дополнительный набор арифметических команд
Кроме команд сложения, вычитания, умножения, умножения с накоплением и арифметических сдвигов многими процессорами поддерживается дополнительный набор команд.
Рассмотрим некоторые дополнительные команды процессоров TMS320C64x:
ABS .L1 A1, A5;
Команда определяет абсолютное значение (absolute value) числа в A1 и пересылает его в A5.
AVG2 .M1 A0, A1,A2;
По этой команде находятся арифметическое среднее (average) двух знаковых чисел, занимающих 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;
Команда насыщения (saturation) работает следующим образом. Если 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.