Мнемоника |
Описание |
Операция |
Флаги |
ADD Rd, Rr |
Сложение двух регистров |
Rd ← Rd + Rr |
Z, C, N, V, H |
ADC Rd, Rr |
Сложение двух регистров с переносом |
Rd ← Rd + Rr + С |
Z, C, N, V, H |
SUB Rd, Rr |
Вычитание двух регистров |
Rd ← Rd - Rr |
Z, C, N, V, H |
SBC Rd, Rr |
Вычитание двух регистров с заёмом |
Rd ← Rd - Rr - С |
Z, C, N, V, H |
ADIW Rd, K |
Сложение регистровой пары с константой |
R(d+1):Rd ← R(d+1):Rd + K |
Z, C, N, V, S |
SBIW Rd, K |
Вычитание константы из регистровой пары |
R(d+1):Rdl ← R(d+1):Rd - K |
Z, C, N, V, S |
SUBI Rd, K |
Вычитание константы из регистра |
Rd ← Rd - K |
Z, C, N, V, H |
SBCI Rd, K |
Вычитание константы из регистра с заёмом |
Rd ← Rd - K - С |
Z, C, N, V, H |
INC Rd |
Инкремент регистра |
Rd ← Rd + 1 |
Z, N, V |
DEC Rd |
Декремент регистра |
Rd ← Rd – 1 |
Z, N, V |
MUL Rd, Rr |
Умножение чисел без знака |
R1:R0 ← Rd * Rr |
Z, C |
MULS Rd, Rr |
Умножение чисел со знаком |
R1:R0 ← Rd * Rr |
Z, C |
MULSU Rd, Rr |
Умножение числа со знаком с числом без знака |
R1:R0 ← Rd * Rr |
Z, C |
FMUL Rd, Rr |
Умножение дробных чисел без знака |
R1:R0 ← (Rd * Rr) << 1 |
Z, C |
FMULS Rd, Rr |
Умножение дробных чисел со знаком |
R1:R0 ← (Rd * Rr) << 1 |
Z, C |
FMULSU Rd, Rr |
Умножение дробного числа со знаком с числом без знака |
R1:R0 ← (Rd * Rr) << 1 |
Z, C |
Мнемоника |
Описание |
Операция |
Флаги |
CBR Rd, K |
Очистка разрядов регистра |
Rd ← Rd and (0FFH – K) |
Z, N, V |
SBR Rd, K |
Установка разрядов регистра |
Rd ← Rd or K |
Z, N, V |
CBI P, b |
Сброс разряда I/O-регистра |
P.b ← 0 |
— |
SBI P, b |
Установка разряда I/O-регистра |
P.b ← 1 |
— |
BCLR s |
Сброс флага SREG |
SREG.s ← 0 |
SREG.s |
BSET s |
Установка флага SREG |
SREG.s ← 1 |
SREG.s |
BLD Rd, b |
Загрузка разряда регистра из флага T |
Rd.b ← T |
— |
BST Rr, b |
Запись разряда регистра во флаг T |
T ← Rd.b |
T |
CLC |
Сброс флага переноса |
C ← 0 |
C |
SEC |
Установка флага переноса |
C ← 1 |
C |
CLN |
Сброс флага отрицательного числа |
N ← 0 |
N |
SEN |
Установка флага отрицательного числа |
N ← 1 |
N |
CLZ |
Сброс флага нуля |
Z ← 0 |
Z |
SEZ |
Установка флага нуля |
Z ← 1 |
Z |
CLI |
Общий запрет прерываний |
I ← 0 |
I |
SEI |
Общее разрешение прерываний |
I ← 1 |
I |
CLS |
Сброс флага знака |
S ← 0 |
S |
SES |
Установка флага знака |
S ← 1 |
S |
CLV |
Сброс флага переполнения дополнительного кода |
V ← 0 |
V |
SEV |
Установка флага переполнения дополнительного кода |
V ← 1 |
V |
CLT |
Сброс пользовательского флага T |
T ← 0 |
T |
SET |
Установка пользовательского флага T |
T ← 1 |
T |
CLH |
Сброс флага половинного переноса |
H ← 0 |
H |
SEH |
Установка флага половинного переноса |
H ← 1 |
H |
Мнемоника |
Описание |
Операция |
Флаги |
ASR Rd |
Арифметический сдвиг вправо |
Rd(i) ← Rd(i+1) (n=0..6), C ← Rd(0) |
Z, C, N, V |
LSL Rd |
Логический сдвиг влево |
Rd(i+1) ← Rd(i), Rd(0) ← 0, C ← Rd(7) |
Z, C, N, V |
LSR Rd |
Логический сдвиг вправо |
Rd(i) ← Rd(i+1), Rd(7) ← 0, C ← Rd(0) |
Z, C, N, V |
ROL Rd |
Сдвиг влево через перенос |
Rd(i+1) ← Rd(i), Rd(0) ← C, C ← Rd(7) |
Z, C, N, V |
ROR Rd |
Сдвиг вправо через перенос |
Rd(i) ← Rd(i+1), Rd(7) ← C, C ← Rd(0) |
Z, C, N, V |
SWAP Rd |
Обмен местами тетрад |
Rd(3..0) ↔ Rd(7..4) |
— |
Мнемоника |
Описание |
Операция |
Флаги |
MOV Rd, Rr |
Пересылка между регистрами |
Rd ← Rr |
— |
MOVW Rd, Rr |
Пересылка между парами регистров |
R(d +1):Rd ← R(r+1):Rr |
— |
LDI Rd, K |
Загрузка константы в регистр |
Rd ← K |
— |
LD Rd, X |
Косвенное чтение |
Rd ← [X] |
— |
LD Rd, X+ |
Косвенное чтение с пост-инкрементом |
Rd ← [X], X ← X + 1 |
— |
LD Rd, -X |
Косвенное чтение с пред-декрементом |
X ← X - 1, Rd ← [X] |
— |
LD Rd, Y |
Косвенное чтение |
Rd ← [Y] |
— |
LD Rd, Y+ |
Косвенное чтение с пост-инкрементом |
Rd ← [Y], Y ← Y + 1 |
— |
LD Rd, -Y |
Косвенное чтение с пред-декрементом |
Y ← Y - 1, Rd ← [Y] |
— |
LDD Rd, Y+q |
Косвенное чтение со смещением |
Rd ← [Y+q] |
— |
LD Rd, Z |
Косвенное чтение |
Rd ← [Z] |
— |
LD Rd, Z+ |
Косвенное чтение с пост-инкрементом |
Rd ← [Z], Z ← Z + 1 |
— |
LD Rd, -Z |
Косвенное чтение с пред-декрементом |
Z ← Z - 1, Rd ← [Z] |
— |
LDD Rd, Z+q |
Косвенное чтение со смещением |
Rd ← [Z+q] |
— |
LDS Rd, A |
Непосредственное чтение из ОЗУ |
Rd ← [A] |
— |
ST X, Rr |
Косвенная запись |
[X] ← Rr |
— |
ST X+, Rr |
Косвенная запись с пост-инкрементом |
[X] ← Rr, X ← X + 1 |
— |
ST -X, Rr |
Косвенная запись с пред-декрементом |
X ← X - 1, [X] ← Rr |
— |
ST Y, Rr |
Косвенная запись |
[Y] ← Rr |
— |
ST Y+, Rr |
Косвенная запись с пост-инкрементом |
[Y] ← Rr, Y ← Y + 1 |
— |
ST -Y, Rr |
Косвенная запись с пред-декрементом |
Y ← Y - 1, [Y] ← Rr |
— |
STD Y+q, Rr |
Косвенная запись со смещением |
[Y+q] ← Rr |
— |
ST Z, Rr |
Косвенная запись |
[Z] ← Rr |
— |
ST Z+, Rr |
Косвенная запись с пост-инкрементом |
[Z] ← Rr, Z ← Z + 1 |
— |
ST -Z, Rr |
Косвенная запись с пред-декрементом |
Z ← Z - 1, [Z] ← Rr |
— |
STD Z+q, Rr |
Косвенная запись со смещением |
[Z+q] ← Rr |
— |
STS A, Rr |
Непосредственная запись в ОЗУ |
[A] ← Rr |
— |
LPM |
Загрузка данных из памяти программы |
R0 ← {Z} |
— |
LPM Rd, Z |
Загрузка данных из памяти программы в регистр |
Rd ← {Z} |
— |
LPM Rd, Z+ |
Загрузка данных из памяти программы с пост-инкрементом Z |
Rd ← {Z}, Z ← Z + 1 |
— |
ELPM |
Расширенная загрузка данных из памяти программы |
R0 ← {RAMPZ:Z} |
— |
ELPM Rd, Z |
Расширенная загрузка данных из памяти программы в регистр |
Rd ← {RAMPZ:Z} |
— |
ELPM Rd, Z+ |
Расширенная загрузка данных из памяти программы с пост-инкрементом Z |
Rd ← {RAMPZ:Z}, Z ← Z + 1 |
— |
SPM |
Запись в программную память |
{Z} ← R1:R0 |
— |
IN Rd, P |
Пересылка из I/O-регистра в регистр |
Rd ← P |
— |
OUT P, Rr |
Пересылка из регистра в I/O-регистр |
P ← Rr |
— |
PUSH Rr |
Сохранение регистра в стеке |
STACK ← Rr |
— |
POP Rd |
Извлечение регистра из стека |
Rd ← STACK |
— |
Все команды этой группы выполняют переход (PC ← PC + A + 1) при разных условиях.
Мнемоника |
Описание |
Условие |
Флаги |
BRBC s, A |
Переход если флаг S сброшен |
Если SREG(S) = 0 |
— |
BRBS s, A |
Переход если флаг S установлен |
Если SREG(S) = 1 |
— |
BRCS A |
Переход по переносу |
Если C = 1 |
— |
BRCC A |
Переход если нет переноса |
Если C = 0 |
— |
BREQ A |
Переход если равно |
Если Z = 1 |
— |
BRNE A |
Переход если не равно |
Если Z = 0 |
— |
BRSH A |
Переход если больше или равно |
Если C = 0 |
— |
BRLO A |
Переход если меньше |
Если C = 1 |
— |
BRMI A |
Переход если отрицательное значение |
Если N = 1 |
— |
BRPL A |
Переход если положительное значение |
Если N = 0 |
— |
BRGE A |
Переход если больше или равно (со знаком) |
Если (N и V) = 0 |
— |
BRLT A |
Переход если меньше (со знаком) |
Если (N или V) = 1 |
— |
BRHS A |
Переход по половинному переносу |
Если H = 1 |
— |
BRHC A |
Переход если нет половинного переноса |
Если H = 0 |
— |
BRTS A |
Переход если флаг T установлен |
Если T = 1 |
— |
BRTC A |
Переход если флаг T сброшен |
Если T = 0 |
— |
BRVS A |
Переход по переполнению дополнительного кода |
Если V = 1 |
— |
BRVC A |
Переход если нет переполнения дополнительного кода |
Если V = 0 |
— |
BRID A |
Переход если прерывания запрещены |
Если I = 0 |
— |
BRIE A |
Переход если прерывания разрешены |
Если I = 1 |
— |
SBRC Rd, K |
Пропустить следующую команду если бит в регистре очищен |
Если Rd[K] = 0 |
— |
SBRS Rd, K |
Пропустить следующую команду если бит в регистре установлен |
Если Rd[K] = 1 |
— |
SBIC A, b |
Пропустить следующую команду если бит в регистре ввода/вывода очищен |
Если I/O(A, b) = 0 |
— |
SBIS A, b |
Пропустить следующую команду если бит в регистре ввода/вывода установлен |
Если I/O(A, b) = 1 |
— |