Формат системы команд в режиме ARM приведен ниже.
Примечание: некоторые коды команд не определены, но в то же время их выполнение не вызывает исключения "неизвестная команда" (Undefined instruction exception), кроме команды умножения с установленным в "1" битом 6. Эти команды не должны применяться, хотя, некоторые из них могут быть реализованы в новых версиях ядра ARM.
Таблица 5. Система команд в режиме ARM
Мнемоника |
Команда |
Действие |
ADC |
Сложение с переносом |
Rd := Rn + Op2 + перенос |
ADD |
Сложение |
Rd := Rn + Op2 |
AND |
Логическое И |
Rd := Rn AND Op2 |
B |
Переход |
R15 := адрес |
BIC |
Очистить бит |
Rd := Rn AND NOT Op2 |
BL |
Переход со ссылкой |
R14 := R15, R15 := адрес |
BX |
Переход и переключение режима ядра |
R15 := Rn, T бит := Rn[0] |
CDP |
Обработать данные сопроцессором |
(зависит от типа сопроцессора) |
CMN |
Сравнить с отрицательным операндом |
CPSR флаги := Rn + Op2 |
CMP |
Сравнение |
CPSR флаги:= Rn - Op2 |
EOR |
Исключающее ИЛИ |
Rd := (Rn AND NOT Op2) OR (op2 AND NOT Rn) |
LDC |
Загрузить в сопроцессор из памяти |
Загрузить в сопроцессор |
LDM |
Загрузить сразу несколько регистров |
Манипуляции со стеком (Pop) |
LDR |
Загрузить регистр из памяти по указанному адресу |
Rd := (адрес) |
MCR |
Скопировать регистр CPU в регистр сопроцессора |
cRn := rRn {<op>cRm} |
MLA |
Умножение со сложением |
Rd := (Rm * Rs) + Rn |
MOV |
Загрузить в регистр константу |
Rd : = Op2 |
MRC |
Скопировать регистр сопроцессора в регистр CPU |
Rn := cRn {<op>cRm} |
MRS |
Переместить регистр статуса/флагов PSR в регистр Rn |
Rn := PSR |
MSR |
Загрузить в PSR статус/флаги указанный регистр |
PSR := Rm |
MUL |
Умножение |
Rd := Rm * Rs |
MVN |
Загрузить регистр отрицательной константой |
Rd := 0xFFFFFFFF EOR Op2 |
ORR |
Логическое ИЛИ |
Rd := Rn OR Op2 |
RSB |
Обратное вычитание |
Rd := Op2 - Rn |
RSC |
Обратное вычитание с переносом |
Rd := Op2 - Rn - 1 + Перенос |
SBC |
Вычитание с переносом |
Rd := Rn - Op2 - 1 + Перенос |
STC |
Сохранить регистр сопроцессора в памяти |
адрес := CRn |
STM |
Сохранить сразу несколько регистров |
Манипуляции со стеком (Push) |
STR |
Сохранить регистр в памяти |
<адрес> := Rd |
SUB |
Вычитание |
Rd := Rn - Op2 |
SWI |
Программное прерывание |
Вызывается операционной системой |
SWP |
Обменять местами содержимое регистра и памяти |
Rd := [Rn], [Rn] := Rm |
TEQ |
Побитовая проверка на равенство |
CPSR флаги := Rn EOR Op2 |
TST |
Проверка битов |
CPSR флаги := Rn AND Op2 |