считывания данных из памяти в регистр AX0 загружается новое значение. По этой же причине регистром назначения (в этом примере AR) не может быть регистр, указанный в качестве регистра назначения при считывании данных из памяти.
Следующий пример демонстрирует выполнение вычислений с одновременной записью данных в память. Команда вычисления с одновременной записью в память имеет ту же структуру, что и команда вычисления с одновременным считыванием из памяти. Однако порядок операторов в строке данной команды меняется на обратный. Сначала выполняется запись данных в память, а затем вычисление. Вот пример такой команды:
DM(I0,M0)=AR, AR=AX0+AY0;
В приведенном примере исходным значением для записи в память (значение, содержащееся в регистре AR) является значение, хранящееся в этом регистре в начале цикла. В результате произведенного вычисления в этот же регистр загружается новое значение, которое является содержимым регистра AR в конце цикла. При постановке операторов данной команды в обратном порядке, что является неразрешенным действием, ассемблер генерирует предупреждение, подразумевающее, что в память записывается результат вычисления, а не предыдущее значение регистра, которое должно было записываться в память. Использование при этом одного и того же регистра не является обязательным, хотя именно таким образом чаще всего организуется конвейер операндов для вычисления. Для вычислительных операций с помощью таких команд действуют те же ограничения, что и для команд, рассмотренных выше. Разрешенными являются все операции АЛУ, кроме деления, все операции умножителя-накопителя MAC и все операции устройства сдвига, кроме непосредственного сдвига. Вычисления должны быть безусловными.
Наконец, рассмотрим команды выполнения вычислений с одновременной пересылкой данных между регистрами. Многофункциональные команды этого последнего типа задают выполнение пересылки данных из одного регистра данных в другой с одновременным выполнением какой-либо вычислительной операции. Большинство ограничений, рассмотренных для предыдущих типов многофункциональных команд, справедливо и для этих команд. Пример такой команды:
AR=AX0+AY0, AX0=MR2;
В данном примере операция сложения в АЛУ производится одновременно с загрузкой в регистр AX0 нового значения, взятого из регистра MR2. Как и в предыдущих примерах, для вычисления используется значение, содержащееся в регистре AX0 в начале цикла. Данные могут между всеми регистрами ввода или вывода АЛУ, умножителя-накопителя MAC и устройства сдвига, за исключением регистров обратной связи (AF и MF) и регистра SB. В рассмотренном примере новое значение загружается в регистр AX0 из регистра данных в конце цикла. Разрешенными являются все операции АЛУ, кроме деления, все операции умножителя-накопителя и все операции устройства сдвига, кроме непосредственного сдвига. Вычисления должны быть безусловными.
Ниже приводится полный список многофункциональных команд в соответствии с принятыми ранее условными обозначениями. Назначение команд приводится в тексте описания этих команд. Вычисление с пересылкой регистр-регистр:
| <ALU> |, dreg = dreg;
| <MAC> |
|<SHIFT>|
Вычисление с чтением из памяти:
|<ALU> |,dreg = |DM(|I0|,|M0|)|;
|<MAC> | | |I1| |M1| |
|<SHIFT>| | |I2| |M2| |
| |I3| |M3| |
| |I4| |M4| |
| |I5| |M5| |
| |I6| |M6| |
| |I7| |M7| |
| |
|PM(|I4|,|M4|)|;
| |I5| |M5| |
| |I6| |M6| |
| |I7| |M7| |
Вычисление с записью в память:
|DM(|I0|,|M0|)|=dreg, |<ALU> |;
| |I1| |M1| | |<MAC> |
| |I2| |M2| | |<SHIFT>|
| |I3| |M3| |
| |I4| |M4| |
| |I5| |M5| |
| |I6| |M6| |
| |I7| |M7| |
| |
|PM(|I4|,|M4|)|;
| |I5| |M5| |
| |I6| |M6| |
| |I7| |M7| |
Чтение памяти данных и программ:
|AX0|=DM(|I0|,|M0|), |AY0|=PM(|I4|,|M4|);
|AX1| |I1| |M1| |AY1| |I5| |M5|
|MX0| |I2| |M2| |MY0| |I6| |M6|
|MX1| |I3| |M3| |MY1| |I7| |M7|
Команда АЛУ или MAC с чтением памяти данных и программ:
|<ALU>|,|AX0|=DM(|I0|,|M0|), |AY0|=PM(|I4|,|M4|);
|<MAC>| |AX1| |I1| |M1| |AY1| |I5| |M5|
|MX0| |I2| |M2| |MY0| |I6| |M6|
|MX1| |I3| |M3| |MY1| |I7| |M7|
В качестве регистров dreg могут быть использованы регистры: AX0, АХ1, AY0, AY1, AR, MX0, МХ1, MY0, MY1, MR0, MR1, MR2, SI, SE, SR0 и SR1.
Примечания:
<ALU>¹ — любая команда АЛУ (исключая DIVS и DIVQ);
<MAC>¹ — любая команда умножителя/накопителя;
<SHIFT>² — любая команда устройства сдвига (исключая непосредственный сдвиг);
где ¹ — должны использоваться только регистры результатов AR, MR, а не регистры обратных связей AF, MF; ² — не могут быть условными командами.
В системе команд сигнального процессора имеется несколько команд, которые нельзя отнести ни к одной из перечисленных ранее групп. Полный список этих команд в соответствии с принятыми ранее условными обозначениями приводится ниже.
Пустая команда:
NOP;
Модифицировать регистр адреса:
MODIFY(|I0|,|M0|);
|I1| |M1|
|I2| |M2|
|I3| |M3|
|I4| |M4|