OSDev Wiki
Advertisement

Архитектура ARM предусматривает 16 команд обработки данных общего назначения, перечисленных в таблице ниже. Помимо этих инструкций, разные модели процессоров могут иметь дополнительные команды, имеющие, как правило, специальное назначение (основным исключением являются команды умножения, отсутствующие в базовой архитектуре, хотя во всех более-менее современных процессорах ARM основная их часть присутствует всегда).

Мнемоника Код операции Операция Действие
AND
0000
Логическое И Rd := Rn AND операнд сдвигателя
EOR
0001
Логическое исключающее ИЛИ Rd := Rn EOR операнд сдвигателя
SUB
0010
Вычитание Rd := Rnоперанд сдвигателя
RSB
0011
Обратное вычитание Rd := операнд сдвигателяRn
ADD
0100
Сложение Rd := Rn + операнд сдвигателя
ADC
0101
Сложение с переносом Rd := Rn + операнд сдвигателя + C
SBC
0110
Вычитание с переносом Rd := Rnоперанд сдвигателя – NOT C
RSC
0111
Обратное вычитание с переносом Rd := операнд сдвигателяRn – NOT C
TST
1000
Проверка Rn AND операнд сдвигателя
TEQ
1001
Проверка эквивалентности Rn EOR операнд сдвигателя
CMP
1010
Сравнение Rnоперанд сдвигателя
CMN
1011
Сравнение с обратной величиной Rn + операнд сдвигателя
ORR
1100
Логическое ИЛИ Rd := Rn OR операнд сдвигателя
MOV
1101
Пересылка Rd := операнд сдвигателя
BIC
1110
Сброс битов Rd := Rn AND NOT операнд сдвигателя
MVN
1111
Пересылка с инверсией Rd := NOT операнд сдвигателя

У большинства команд обработки данных, за исключением MOV и MVN, имеются два исходных операнда (регистр общего назначения Rn и так называемый операнд-сдвигателя — сдвинутое содержимое регистра Rs или однобайтовой константы, заданной непосредственно в коде команды; о нём подробно написано в разделе Режим адресации 1: инструкции обработки данных), между которыми и производится операция. Результат большинства инструкций помещается в отдельно указанный регистр Rd; исключением являются команды CMP, CMN, TST и TEQ: их результат теряется, и единственным последствием их выполнения является изменение флагов N, Z, V и C в регистре состояния CPSR. Остальные инструкции также могут менять эти флаги, но могут их и не менять: это завсит от значения бита S в коде команды (когда он установлен, флаги меняются), единичному значению которого соответствует буква S, добавляемая к мнемонике команды, например, MOVS, ADDS. У перечисленных четырёх инструкций этот бит всегда установлен; коды команд с нулевым значением этого бита не являются операциями обработки данных, а относятся к одному из пространств расширения системы команд.

Общий формат кодирования инструкций обработки данных приведён на рисунке:

Кодирование инструкций обработки данных (ARM)

Назначение полей кода команды:

  • condкод условия, при соблюдении которого инструкция выполняется;
  • I — разряд, задающий формат операнда сдвигателя (константа или содержимое регистра; подробнее см. в разделе Режим адресации 1: инструкции обработки данных);
  • opcode — код выполняемой операции (приведены в таблице выше);
  • S — бит, указывающий, должна ли команда изменять флаги состояния в регистре CPSR (при единичном значении флаги меняются, при нулевом — не меняются). В инструкциях CMP, CMN, TST и TEQ этот разряд всегда равен единице;
  • Rn — номер регистра-источника. Это поле не используется в командах MOV и MVN;
  • Rd — номер регистра-приёмника. Это поле не используется в командах CMP, CMN, TST и TEQ;
  • shifter_operand — операнд сдвигателя (см. раздел Режим адресации 1: инструкции обработки данных).
Advertisement