| Мнемоника |
Описание |
Операция |
Флаги |
| 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 |
— |