| Формат | Количество целых разрядов | Количество дробных разрядов | Максимальное положительное значение | Максимальное отрицательное значение | Вес младшего разряда |
|---|---|---|---|---|---|
| 1.15 | 1 | 15 | 0,999969482421875 | -1,0 | 0.000030517578125 |
| 2.14 | 2 | 14 | 1,999938964843750 | -2,0 | 0.000061035156250 |
| 3.13 | 3 | 13 | 3,999877929687500 | -4,0 | 0.000122070312500 |
| 4.12 | 4 | 12 | 7,999755859375000 | -8,0 | 0.000244140625000 |
| 5.11 | 5 | 11 | 15,999511718750000 | -16,0 | 0.000488281250000 |
| 6.10 | 6 | 10 | 31,999023437500000 | -32,0 | 0.000976562500000 |
| 7.9 | 7 | 9 | 63,998046875000000 | -64,0 | 0.001953125000000 |
| 8.8 | 8 | 8 | 127,996093750000000 | -128,0 | 0.003906250000000 |
| 9.7 | 9 | 7 | 255,992187500000000 | -256,0 | 0.007812500000000 |
| 10.6 | 10 | 6 | 511,984375000000000 | -512,0 | 0.015625000000000 |
| 11.5 | 11 | 5 | 1023,968750000000000 | -1024,0 | 0.031250000000000 |
| 12.4 | 12 | 4 | 2047,937500000000000 | -2048 | 0.062500000000000 |
| 13.3 | 13 | 3 | 4095,875000000000000 | -4096,0 | 0.125000000000000 |
| 14.2 | 14 | 2 | 8191,750000000000000 | -8192,0 | 0.250000000000000 |
| 15.1 | 15 | 1 | 16383,500000000000000 | -16384,0 | 0.500000000000000 |
| 16.0 | 16 | 0 | 32767,000000000000000 | -32768,0 | 1.000000000000000 |
Из таблицы видно, что чем больше двоичных разрядов отводится под целую часть числа, тем больший диапазон чисел можно охватить с помощью такого формата. Однако при этом снижается точность представления числа, т.е. его дробная часть сводится к нулю. И наоборот, чем больше двоичных разрядов отводится под дробную часть числа, тем меньший диапазон чисел можно охватить с помощью такого формата. Но при этом увеличивается точность представления числа, т.е. его дробная часть может быть очень малой величиной, составляющей менее одной миллиардной доли единицы.
В зависимости от типа решаемой задачи программист сам определяет, какой именно формат лучше использовать.
Глава 13. Система команд
В этой главе начинается изложение системы команд сигнального процессора.
Сигнальные процессоры семейства ADSP-21XX используют единую систему команд для совместимости с устройствами с более высокой интеграцией. Процессоры ADSP-2181 имеют ряд дополнительных команд. Каждая команда может быть выполнена в процессоре за один такт. Кроме того, система команд процессора позволяет выполнять за один такт многофункциональные команды. Как было сказано ранее, язык ассемблер семейства ADSP-21XX использует высокоуровневый алгебраический синтаксис записи команд, что облегчает их понимание и запоминание. Операнды источника и приемника команды явно присутствуют в ее записи в виде мнемоники. Мнемоника основных регистров процессора с описанием их назначения приводится в табл. 13.1.
Таблица 13.1 Мнемоника основных регистров процессора с описанием их назначения
| Мнемоника | Определение |
|---|---|
| AX0, AX1, AY0, AY1 | Входные регистры АЛУ |
| AR | Регистр результата АЛУ |
| AF | Регистр обратной связи АЛУ |
| MX0, MX1, MY0, MY1 | Входные регистры умножителя MAC |
| MR0, MR1, MR2 | Регистры результата умножителя |
| MF | Регистр обратной связи умножителя |
| SI | Входной регистр устройства сдвига Shifter |
| SE | Регистр экспоненты устройства сдвига |
| SR0, SR1 | Регистры результата устройства сдвига |
| SB | Регистр блочного сдвига (используется в блочных операциях с плавающей точкой) |
| PX | Регистр шинного обмена памяти программ PM с памятью данных DM |
| I0–I7 | Индексные регистры генераторов адреса DAG |
| M0–M7 | Регистры модификации DAG |
| L0–L7 | Регистры длины DAG (для циклических буферов) |
| PC | Программный счетчик |
| CNTR | Счетчик циклов |
| ASTAT | Регистр арифметического статуса |
| MSTAT | Регистр статуса режима |
| SSTAT | Регистр статуса стека |
| IMASK | Регистр маски прерываний |
| ICNTL | Регистр режимов управления прерываниями |
| RX0, RX1 | Регистры приема данных последовательных портов SPORT |
| TX0, TX1 | Регистры передачи данных последовательных портов SPORT |
Набор команд ADSP-2181 совместим вверх с набором команд ADSP-21XX, поэтому, программы, написанные для ADSP-21XX, могут выполняться на ADSP-2181 с минимальными изменениями. Процессор ADSP-2181 имеет ряд дополнительных команд. Каждая команда может быть выполнена отдельно в своем такте. Кроме того, система команд позволяет выполнять за один такт процессора многофункциональные команды.
Язык ассемблера позволяет использовать в командах арифметические или логические выражения. Список этих выражений и выполняемых с их помощью действий приведен в табл. 13.2.
Таблица 13.2 Список арифметических или логических выражений и выполняемых с их помощью действий
| Выражение | Действие |
|---|---|
| = | Присвоение |
| + | Сложение |
| - | Вычитание |
| * | Умножение |
| AND | Логическое "И" |
| OR | Логическое "ИЛИ" |
| NOT | Логическое отрицание |
| XOR | Исключающее "ИЛИ" |
| PASS | Пересылка |
| ABS | Абсолютное значение |
Ниже приведены примеры записи некоторых команд языка ассемблера ADSP-21XX с объяснением их назначения.
DM(var1) = AX0;
Эта команда, знакомая читателям из предыдущих примеров программ, присваивает (записывает) значение регистра AX0 переменной var1, хранящейся в памяти данных.
MR = MR + MX1*MY1;
Данная команда выполняет операцию умножения и сложения. Он умножает входные значения из регистров MX1 и MY1, складывает результат умножения с текущим содержимым регистра MR (результат предыдущего умножения), а затем записывает результат в регистр MR.
При рассмотрении системы команд мы будем пользоваться условными обозначениями, приведенными в табл. 13.3. Эти обозначения позволяют сделать описание команд компактным.
Таблица 13.3 Условные обозначения системы команд
| Обозначение | Описание |
|---|---|
| I0–I7 | Индексные регистры DAG для косвенной адресации |
| M0–M7 | Регистры модификации DAG для косвенной адресации |
| L0–L7 | Регистры длины DAG для циклических буферов |
| <data> | Непосредственное значение данных |
| <addr> | Непосредственное значение адреса (абсолютный адрес или программная метка) |
| <exp> | Порядок (значение сдвига) в командах непосредственного сдвига (8-разрядное знаковое число) |
| cond | Код условия в условных командах |
| term | Код условия выхода из цикла DO UNTIL |
| dreg | Регистры данных (АЛУ, умножителя-накопителя или устройства сдвига) |
| reg | Любой регистр (включая регистры данных "dreg") |
| ; | Точка с запятой, разделитель команд |
| , | Запятая, разделитель нескольких операций в одной команде |
| [] | Квадратные скобки, содержащие дополнительные, необязательные части команд |
| [, …] | Запись нескольких операций или команд в любом порядке, разделенных запятыми |
| |опция1| |опция2| |опция3| | Список опций (в команде выбирается одна из опций) |
| xop | Операнд "x" |
| yop | Операнд "y" |
| constant | Операнд-константа |
В табл. 13.4 приведен список регистров, допустимых к использованию в командах пересылки и многофункциональных командах.
Таблица 13.4 Список регистров допустимых к использованию в командах пересылки и многофункциональных командах