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С | 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 адрес метки |