Шрифт:
Набор команд ADSP-2181 совместим вверх с набором команд ADSP-21XX, поэтому, программы, написанные для ADSP-21XX, могут выполняться на ADSP-2181 с минимальными изменениями. Процессор ADSP-2181 имеет ряд дополнительных команд. Каждая команда может быть выполнена отдельно в своем такте. Кроме того, система команд позволяет выполнять за один такт процессора многофункциональные команды.
Язык ассемблера позволяет использовать в командах арифметические или логические выражения. Список этих выражений и выполняемых с их помощью действий приведен в табл. 13.2.
Таблица 13.2 Список арифметических или логических выражений и выполняемых с их помощью действий
| Выражение | Действие |
|---|---|
| = | Присвоение |
| + | Сложение |
| – | Вычитание |
| * | Умножение |
| AND | Логическое «И» |
| OR | Логическое «ИЛИ» |
| NOT | Логическое отрицание |
| XOR | Исключающее «ИЛИ» |
| PASS | Пересылка |
| ABS | Абсолютное значение |
Ниже приведены примеры записи некоторых команд языка ассемблера ADSP-21XX с объяснением их назначения.
Эта команда, знакомая читателям из предыдущих примеров программ, присваивает (записывает) значение регистра AX0 переменной var1, хранящейся в памяти данных.
Данная команда выполняет операцию умножения и сложения. Он умножает входные значения из регистров 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 Список регистров допустимых к использованию в командах пересылки и многофункциональных командах
| Регистр | Примечание |
|---|---|
| Регистры данных <dreg> | |
| AX0, АХ1, AY0, AY1 | – |
| AR | – |
| MX0, МХ1, MY0, MY1 | – |
| MR0, MR1, MR2 | – |
| SI, SE, SR0, SR1 | – |
| Остальные регистры <reg> | |
| I0, I1, I2, I3, I4, I5, I6, I7 | – |
| M0, M1, M2, M3, M4, M5, M6, M7 | – |
| L0, L1, L2, L3, L4, L5, L6, L7 | – |
| TX0, TX1, RX0, RX1 | – |
| SB, PX | – |
| ASTAT, MSTAT | – |
| SSTAT | Только чтение |
| IMASK, ICNTL | – |
| IFC | Только запись |
| CNTR | – |
| OWRCNTR | Только запись |
Следует обратить внимание на то, что регистры <dreg> являются подмножеством регистров <reg>, поэтому их можно применять в командах, где используется условное сокращение <reg>.
Команда сложить или сложить с переносом, записанная с применением приведенных выше условных сокращений, будет выглядеть следующим образом:
Она означает, что если условие cond предыдущей команды выполняется, то в регистр AR или AF будет занесен результат сложения операнда xop с операндом yop или с переносом или с константой. Разрешенные операнды xop, yop и константы constant указываются для группы команд индивидуально, поскольку они не всегда могут быть произвольными. Например, для команд АЛУ разрешено использовать в качестве операнда xop регистры; AX0, АХ1, AR, MR0, MR1, MR2, SR0, SR1. В качестве операнда yop допускается использование регистров: AY0, AY1 и AF. Причем команда DIVS не может использовать регистр AY0.
Коды условий cond с описанием их назначения приведены в табл. 13.5.
Таблица 13.5 Коды условий cond с описанием их назначения
| Код условия cond оператора IF | Описание |
|---|---|
| EQ | Равно нулю |
| NE | He равно нулю |
| LT | Меньше нуля |
| GE | Больше или равно нулю |
| LE | Меньше или равно нулю |
| GT | Больше нуля |
| AC | Перенос АЛУ |
| NOT AC | Нет переноса АЛУ |
| AV | Переполнение АЛУ |
| NOT AV | Нет переполнения АЛУ |
| MV | Переполнение умножителя |
| NOT MV | Нет переполнения умножителя |
| NEG | Входной операнд xop отрицателен |
| POS | Входной операнд xop положителен |
| NOT CE | Счетчик циклов не пуст |
| FLAG_IN* | Вывод FI = 1 |
| NOT FLAG_IN* | Вывод FI = 0 |