Язык ассемблера позволяет использовать в командах арифметические или логические выражения. Список этих выражений и выполняемых с их помощью действий приведен в табл. 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 для циклических буферов |
|
Непосредственное значение данных |
|
Непосредственное значение адреса (абсолютный адрес или программная метка) |
|
Порядок (значение сдвига) в командах непосредственного сдвига (8-разрядное знаковое число) |
cond |
Код условия в условных командах |
term |
Код условия выхода из цикла DO UNTIL |
dreg |
Регистры данных (АЛУ, умножителя-накопителя или устройства сдвига) |
reg |
Любой регистр (включая регистры данных «dreg») |
; |
Точка с запятой, разделитель команд |
, |
Запятая, разделитель нескольких операций в одной команде |
[] |
Квадратные скобки, содержащие дополнительные, необязательные части команд |
[, …] |
Запись нескольких операций или команд в любом порядке, разделенных запятыми |
|опция1| |опция2| |опция3| |
Список опций (в команде выбирается одна из опций) |
xop |
Операнд «x» |
yop |
Операнд «y» |
constant |
Операнд-константа |
В табл. 13.4 приведен список регистров, допустимых к использованию в командах пересылки и многофункциональных командах.
Таблица 13.4 Список регистров допустимых к использованию в командах пересылки и многофункциональных командах
Регистр |
Примечание |
Регистры данных |
AX0, АХ1, AY0, AY1 |
– |
AR |
– |
MX0, МХ1, MY0, MY1 |
– |
MR0, MR1, MR2 |
– |
SI, SE, SR0, SR1 |
– |
Остальные регистры |
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 |
Только запись |
Следует обратить внимание на то, что регистры являются подмножеством регистров , поэтому их можно применять в командах, где используется условное сокращение .
Команда сложить или сложить с переносом, записанная с применением приведенных выше условных сокращений, будет выглядеть следующим образом:
[IF cond] |AR| = xop + | yop |;
|AF| | C |
| yop + C |
| constant |
Она означает, что если условие 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.
Читать дальше