Арифметические операции
ADD   ADD R0, R1, Operand2
ADD R0, R1, 12bit const.
Сложение
R0 = R1 + R2
N, Z, C, V  S
ADC   ADC R0, R1, R2
ADC R0, R1, 8bit const
Сложение с учётом переноса
R0 = R1 + R2 + C
N, Z, C, V S
ADDW   ADD R0, R1, 12bit const. Сложение с 12bit константой N, Z, C, V  
SUB   SUB R0, R1, R2
SUB R0, R1, 12bit const.
Вычитание
R0 = R1 - R2
N, Z, C, V S
SBC   SBC R0, R1, R2
SBC R0, R1, 8bit const.
Вычитание с учётом переноса
R0 = R1 - R2 - C
N, Z, C, V S
SUBW   SUB R0, R1, 12bit const. Вычитание с 12bit константой N, Z, C, V  
RSB   RSB R0, R1, R2
RSB R0, R1, 8bit const.
RSB R0, R1, R2, ASR#23
Вычитание с противоположным порядком
аргументов.
R0 = R2 - R1 или R0 = 8bit const - R1
N, Z, C, V S

Умножение. Деление.
MUL
MLA
MLS
  R0 = R1 x R2
R0 = (R1 x R2) + R3
R0 = R3 - (R1 x R2)
Умножение. 32bit результат
Умножение и сложение
Умножение и вычитание
N, Z S
UMULL
UMLAL
SMULL
SMLAL
  RLo, RHi = R2 x R3
RLo, RHi += R2 x R3
RLo, RHi = R2 x R3
RLo, RHi += R2 x R3
Умножение. 64bit результат
Умножение и сложение
Умножение со знаком. 64bit результат
Умножение со знаком и сложение
UDIV
SDIV
  R0 = R1 / R2
R0 = R1 / R2
Деление без знака
Деление со знаком

Доступ к памяти
ADR   ADR R0, label +/- 12bit
ADR.W R0, label +/- 32bit
Загрузка адреса метки в регистр.
LDR
STR
  LDR R0, [R1, #8bit const.]! - прединкремент
LDR R0, [R1], #8bit const. - постинкремент
LDRB R0, [R1] - без инкремента
STRB R0, [R1], #1
Загрузка/сохранение регистра в режиме
адресации со смещением.
B=байт, SB=байт со знаком (только загрузка)
H=полуслово, SH=полуслово со знаком (только загрузка)
LDR
STR
  LDR R0, [R1, R2, {LSL#0..3}]
STR R0, [R1, R2, {LSL#0..3}]
Смещение задаётся третьим регистром.
B, SB, H, SH работают аналогично
LDR
LDRD
  LDR R0, label
LDRD R0, R1, label
Смещение задаётся адресом метки.
B, SB, H, SH работают аналогично
Невозможно применить к STR/STRD.
LDRT
STRT
    Непривилегированный доступ.
Аналогичны простому LDR/STR.
LDRD
STRD
  LDRD R0, R1, [R2, #10bit const.]! - прединкремент
LDRD R0, R1, [R2], #10bit const. - постинкремент
LDRD R0, R1, [R2] - без инкремента
STRD R0, R1, [R2]
Загрузка/сохранение двух регистров в режиме
адресации со смещением.
Константа должна быть кратна 4.
 
LDM
STM
  LDM R0, {R1-R3}
LDM R0!, {R1-R3} - постинкремент R0
IA, DB, FD, EA - см. описание
Загрузка/сохранение множества регистров.
IA - с увеличением адреса
DB - с уменьшением адреса.
PUSH
POP
  PUSH {R0, R2-R7, R12}
POP {R0, R2-R7, R12}
Загрузка/чтение из стека
LDREX
STREX
  LDREX R1, [R2, #10bit const.]
STREX R0, R1, [R2, #10bit const.]
Эксклюзивное чтение/запись регистра.
B=байт, H=полуслово.
CLREX   CLREX (без параметров) Сброс признака эксклюзивного доступа.

Перемещение и обработка данных
MOV
MVN
  MOV R0, R1
MOV R0, 16bit const.
MVN R0, R1
Загрузка/перемещение регистров
Загрузка 16-бит в мл. полуслово, сброс старшего
Перемещение регистра с инверсией
N, Z, C, V S
MOVT   MOVT R0, 16bit const. Загр. 16bit в старшее полуслово. Младш. остаётся без изменений.
CMP
CMN
  CMP R0, R1
CMN R0, R1
Сравнение
Сравнение с противоположным знаком
N, Z, C, V S
TST   TST R0, Operand2 Проверить значение битов по маске N, Z, C S
TEQ   TEQ R0, Operand2 Проверить равенство двух величин N, Z S
REV
REV16
REVSH
RBIT
  REV R0, R1 Изменение порядка битов или байтов в слове
CLZ   CLZ R0, R1 Подсчет количества ведущих нулей

Логические операции
AND
ORR
EOR
BIC
ORN
  И
ИЛИ
Исключающее ИЛИ
Сброс битов по маске. И-НЕ
ИЛИ-НЕ
0 в маске сбрасывает биты. Второй Operand2 для всех команд
1 в маске устанавливает биты
1 в маске инвертирует биты
1 в маске сбрасывает биты
0 в маске устанавливает биты
N, Z, C S

Операции сдвига
ASR
LSL
LSR
ROR
RRX
  Арифметический сдвиг вправо
Логический сдвиг влево
Логический сдвиг вправо
Циклический сдвиг вправо
Сдвиг вправо на 1 позицию через перенос
 
 
 
 
 
N, Z, C S

Ветвление. Подпрограммы.
B   B label Переход к метке
BX   BX R0 Переход по адресу в регистре
BL   BL label Выполнить подпрограмму label
BLX   BLX R0 Выполнить подпрограмму по адресу в регистре
BX LR   BX LR Возврат из подпрограммы
CBZ
CBNZ
  CBZ R0, label
CBNZ R0, label
Переход, если R0 = 0
Переход, если R0 != 0
TBB
TBH
  TBB [R0, R1]
TBH [R0, R1, LSL #1]
Табличный переход по индексу. Короткий переход.
Длиннй переход
IT   IT{x{y{z}}} cond Блок условно исполняемых инструкций

Работа с битовыми полями
BFC   BFC R0, #lsb, #width Сброс поля в ноль
BFI   BFI R0, R1, #lsb, #width Копирует младшие биты R1 в поле R0
UBFX   UBFX R0, R1, #lsb, #width Копирует поле R1 в мл. биты R0 с заполнением нулями
SBFX   SBFX R0, R1, #lsb, #width Копирует поле R1 в мл. биты R0 с расширением знака
UXTB
UXTH
  UXTB R0, R1 {, ROR #8,16,24} Преобразование байта с заполнением нулями
Преобразование полуслова
SXTB
SXTH
  SXTB R0, R1 {, ROR #8,16,24} Преобразование байта с расширением знака
Преобразование полуслова

Преобразование данных с насыщением
SSAT
USAT
  SSAT Rd, #n, Rm {, shift #s}
USAT Rd, #n, Rm {, shift #s}
Число со знаком в число со знаком,
Число со знаком в число без знака
Q

Управление системой
MRS
MSR
  MRS R0, PSR
MSR PSR, R0
Чтение/запись специальных регистров.
CPSIE
CPSID
    Разрешение/запрет прерываний
WFE   WFE Ожидать событие
WFI   WFI Ожидать прерывание
BKPT     Точка останова
DMB
DSB
  DMB Барьер синхронизации доступа к ОЗУ
ISB   ISB Сброс конвейера
SEV   SEV Дёрнуть ножкой события для внешних камней
SVC   SVC 8bit const. Вызов системного сервиса
NOP   NOP  

Суффиксы условного исполнения
EQ   Z = 1 Равенство
NE   Z = 0 Неравенство
CS, HS   C = 1 Больше или равно, беззнаковое сравнение
CC, LO   C = 0 Меньше, беззнаковое сравнение
MI   N = 1 Отрицательное значение, меньше нуля
PL   N = 0 Положительное значение, больше или равно нулю
VS   V = 1 Переполнение
  V = 0 Нет переполнения
HI   C = 1 и Z=0 Больше, беззнаковое сравнение
LS   C = 0 или Z=1 Меньше или равно, беззнаковое сравнение
GE   N = V Больше или равно, знаковое сравнение
LT   N != V Меньше, знаковое сравнение
GT   Z = 0 и N = V Больше, знаковое сравнение
LE   Z = 1 и N != V Меньше или равно, знаковое сравнение
AL   1 Безусловное исполнение

Встроенные псевдоинструкции компиллятора
MOV32   MOV32 R0, 32bit const. (label) Загрузить слово в регистр.
LDR   LDR R0, =label Загрузить 32bit адрес метки или #число
ADRL   ADRL R0, label Загрузить 32bit адрес метки

Форматы операндов