Mnemonics | Operands | Description | Operation | Flags | #Clocks |
Арифметические и логические инструкции |
|||||
ADD | Rd, Rr | Сложение без учета переноса | Rd ← Rd+Rr | Z, C, N, V, S, H | 1 |
ADC | Rd, Rr | Сложение с учетом переноса | Rd ← Rd+Rr+C | Z, C, N, V, S, H | 1 |
ADIW | Rd, K | Сложение слова с константой | Rd ← Rd+1:Rd+K | Z, C, N, V, S | 2 |
SUB | Rd, Rr | Вычитание без учета переноса | Rd ← Rd-Rr | Z, C, N, V, S, H | 1 |
SUBI | Rd, K | Вычитание константы | Rd ← Rd-K | Z, C, N, V, S, H | 1 |
SBC | Rd, Rr | Вычитание с учетом переноса | Rd ← Rd-Rr-C | Z, C, N, V, S, H | 1 |
SBCI | Rd, K | Вычитание константы с учетом переноса | Rd ← Rd-K-C | Z, C, N, V, S, H | 1 |
SBIW | Rd, K | Вычитание константы из слова | Rd+1:Rd ← Rd+1:Rd-K | Z, C, N, V, S | 2 |
AND | Rd, Rr | Логическое И | Rd ← Rd•Rr | Z, N, V, S | 1 |
ANDI | Rd, K | Логическое И с константой | Rd ← Rd•K | Z, N, V, S | 1 |
OR | Rd, Rr | Логическое ИЛИ | Rd ← Rd v Rr | Z, N, V, S | 1 |
ORI | Rd, K | Логическое ИЛИ с константой | Rd ← Rd v K | Z, N, V, S | 1 |
EOR | Rd, Rr | Исключающее ИЛИ | Rd ← Rd ⊕ Rr | Z, N, V, S | 1 |
COM | Rd | Дополнение до единицы | Rd ← $FF-Rd | Z, C, N, V, S | 1 |
NEG | Rd | Дополнение до двух | Rd ← $00-Rd | Z, C, N, V, S, H | 1 |
SBR | Rd, K | Установка бита (бит) регистра | Rd ← Rd v K | Z, N, V, S | 1 |
CBR | Rd, K | Сброс бита (бит) регистра | Rd ← Rd•($FF-K) | Z, N, V, S | 1 |
INC | Rd | Инкремент | Rd ← Rd+1 | Z, N, V, S | 1 |
DEC | Rd | Декремент | Rd ← Rd-1 | Z, N, V, S | 1 |
TST | Rd | Проверка на ноль или минус | Rd ← Rd•Rd | Z, N, V, S | 1 |
CLR | Rd | Сброс регистра | Rd ← Rd ⊕ Rd | Z, N, V, S | 1 |
SER | Rd | Установка регистра | Rd ← $FF | Нет | 1 |
MUL | Rd, Rr | Умножение беззнаковых чисел | R1:R0 ← Rd x Rr (UU) | Z, C | 2 |
MULS | Rd, Rr | Умножение знаковых чисел | R1:R0 ← Rd x Rr (SS) | Z, C | 2 |
MULSU | Rd, Rr | Умножение знакового числа на беззнаковое | R1:R0 ← Rd x Rr (SU) | Z, C | 2 |
FMUL | Rd, Rr | Дробное умножение беззнаковых чисел | R1:R0 ← Rd x Rr<<1 (UU) | Z, C | 2 |
FMULS | Rd, Rr | Дробное умножение знаковых чисел | R1:R0 ← Rd x Rr<<1 (SS) | Z, C | 2 |
FMULSU | Rd, Rr | Дробное умножение знакового числа на беззнаковое | R1:R0 ← Rd x Rr<<1 (SU) | Z, C | 2 |
DES | K | Шифрование данных | R15:R0 ← ENCRYPT(R15:R0,K), если H=0, R15:R0 ← DECRYPT(R15:R0,K), если H=1 |
1/2 | |
Инструкции перехода |
|||||
RJMP | k | Относительный переход | PC ← PC+k+1 | Нет | 2 |
IJMP | Косвенный переход по Z-указателю | PC(15:0) ← Z PC(21:16) ← 0 |
Нет | 2 | |
EIJMP | Расширенный косвенный переход по Z-указателю | PC(15:0) ← Z PC(21:16) ← EIND |
Нет | 2 | |
JMP | k | Переход | PC ← k | Нет | 3 |
RCALL | k | Относительный вызов подпрограммы | PC ← PC+k+1 | Нет | 2/3(1) |
ICALL | Косвенный вызов подпрограммы по Z-указателю | PC(15:0) ← Z PC(21:16) ← 0 |
Нет | 2/3(1) | |
EICALL | Расширенный косвенный вызов подпрограммы по Z-указателю | PC(15:0) ← Z PC(21:16) ← EIND |
Нет | 3(1) | |
CALL | k | Вызов подпрограммы | PC ← k | Нет | 3/4(1) |
RET | Выход из подпрограммы | PC ← STACK | Нет | 4/5(1) | |
RETI | Выход из процедуры обработки прерывания | PC ← STACK | I | 4/5(1) | |
CPSE | Rd, Rr | Сравнение и пропуск, если равно | PC ← PC+2 или 3, если Rd=Rr | Нет | 1/2/3 |
CP | Rd, Rr | Сравнение | Rd-Rr | Z, C, N, V, S, H | 1 |
CPC | Rd, Rr | Сравнение с переносом | Rd-Rr-C | Z, C, N, V, S, H | 1 |
CPI | Rd, K | Сравнение с константой | Rd-K | Z, C, N, V, S, H | 1 |
SBRC | Rr,b | Пропуск, если бит регистра равен нулю | PC ← PC+2 или 3, если Rr(b)=0 | Нет | 1/2/3 |
SBRS | Rr,b | Пропуск, если бит регистра равен единице | PC ← PC+2 или 3, если Rr(b)=1 | Нет | 1/2/3 |
SBIC | A, b | Пропуск, если бит регистра в/в равен нулю | PC ← PC+2 или 3, если I/O(A, b)=0 | Нет | 2/3/4 |
SBIS | A, b | Пропуск, если бит регистра в/в равен единице | PC ← PC+2 или 3, если I/O(A, b)=1 | Нет | 2/3/4 |
BRBS | s, k | Переход, если флаг статуса равен единице | PC ← PC+k+1, если SREG(s) = 1 | Нет | 1/2 |
BRBC | s, k | Переход, если флаг статуса равен нулю | PC ← PC+k+1, если SREG(s) = 0 | Нет | 1/2 |
BREQ | k | Переход, если равно | PC ← PC+k+1, если Z = 1 | Нет | 1/2 |
BRNE | k | Переход, если не равно | PC ← PC+k+1, если Z = 0 | Нет | 1/2 |
BRCS | k | Переход, если флаг переноса равен единице | PC ← PC+k+1, если C = 1 | Нет | 1/2 |
BRCC | k | Переход, если флаг переноса равен нулю | PC ← PC+k+1, если C = 0 | Нет | 1/2 |
BRSH | k | Переход, если больше или равно | PC ← PC+k+1, если C = 0 | Нет | 1/2 |
BRLO | k | Переход, если меньше | PC ← PC+k+1, если C = 1 | Нет | 1/2 |
BRMI | k | Переход, если минус | PC ← PC+k+1, если N = 1 | Нет | 1/2 |
BRPL | k | Переход, если плюс | PC ← PC+k+1, если N = 0 | Нет | 1/2 |
BRGE | k | Переход, если больше или равно с учетом знака | PC ← PC+k+1, если N ⊕ V = 0 | Нет | 1/2 |
BRLT | k | Переход, если меньше с учетом знака | PC ← PC+k+1, если N ⊕ V = 1 | Нет | 1/2 |
BRHS | k | Переход, если установлен флаг полупереноса | PC ← PC+k+1, если H = 1 | Нет | 1/2 |
BRHC | k | Переход, если сброшен флаг полупереноса | PC ← PC+k+1, если H = 0 | Нет | 1/2 |
BRTS | k | Переход, если установлен флаг Т | PC ← PC+k+1, если Т = 1 | Нет | 1/2 |
BRTC | k | Переход, если сброшен флаг Т | PC ← PC+k+1, если Т = 0 | Нет | 1/2 |
BRVS | k | Переход, если установлен флаг переполнения | PC ← PC+k+1, если V = 1 | Нет | 1/2 |
BRVC | k | Переход, если сброшен флаг переполнения | PC ← PC+k+1, если V = 0 | Нет | 1/2 |
BRIE | k | Переход, если прерывания разрешены | PC ← PC+k+1, если I = 1 | Нет | 1/2 |
BRID | k | Переход, если прерывания запрещены | PC PC+k+1, если I = 0 | Нет | 1/2 |
Инструкции передачи данных |
|||||
MOV | Rd, Rr | Копирование регистра | Rd ← Rr | Нет | 1 |
MOVW | Rd, Rr | Копирование регистровой пары | Rd+1:Rd ← Rr+1:Rr | Нет | 1 |
LDI | Rd, K | Запись константы в регистр | Rd ← K | Нет | 1 |
LDS | Rd, k | Прямое чтение из памяти данных в регистр | Rd ← (k) | Нет | 2(1)(2) |
LD | Rd, X | Косвенное чтение | Rd ← (X) | Нет | 1(1)(2) |
LD | Rd, X+ | Косвенное чтение с последующим инкрементом | Rd (X) X X+1 |
Нет | 1(1)(2) |
LD | Rd, -X | Косвенное чтение с предварительным декрементом | X ← X-1 ← X-1 Rd ← X ← (X) |
Нет | 2(1)(2) |
LD | Rd, Y | Косвенное чтение | Rd ← (Y) | Нет | 1(1)(2) |
LD | Rd, Y+ | Косвенное чтение с последующим инкрементом | Rd ← (Y) Y ← Y+1 |
Нет | 1(1)(2) |
LD | Rd, -Y | Косвенное чтение с предварительным декрементом | Y ← Y-1 ← Y-1 Rd ← Y ← (Y) |
Нет | 2(1)(2) |
LDD | Rd,Y+q | Косвенное чтение со смещением | Rd ← (Y+q) | Нет | 2(1)(2) |
LD | Rd, Z | Косвенное чтение | Rd ← (Z) | Нет | 1(1)(2) |
LD | Rd, Z+ | Косвенное чтение с последующим инкрементом | Rd ← (Z) Z ← Z+1 |
Нет | 1(1)(2) |
LD | Rd, -Z | Косвенное чтение с предварительным декрементом | Z ← Z-1 ← Z-1 Rd ← Z ← (Z) |
Нет | 2(1)(2) |
LDD | Rd, Z+q | Косвенное чтение со смещением | Rd ← (Z+q) | Нет | 2(1)(2) |
STS | k, Rr | Прямая запись в память данных | (k) ← Rr | Нет | 2(1) |
ST | X, Rr | Косвенная запись | (X) ← Rr | Нет | 1(1) |
ST | X+, Rr | Косвенная запись с последующим инкрементом | (X) ← Rr X ← X+1 |
Нет | 1(1) |
ST | -X, Rr | Косвенная запись с предварительным декрементом | X ← X-1 (X) ← Rr |
Нет | 2(1) |
ST | Y, Rr | Косвенная запись | (Y) ← Rr | Нет | 1(1) |
ST | Y+, Rr | Косвенная запись с последующим инкрементом | (Y) ← Rr Y ← Y+1 |
Нет | 1(1) |
ST | -Y, Rr | Косвенная запись с предварительным декрементом | Y ← Y-1 (Y) ← Rr |
Нет | 2(1) |
STD | Y+q, Rr | Косвенная запись со смещением | (Y+q) ← Rr | Нет | 2(1) |
ST | Z, Rr | Косвенная запись | (Z) ← Rr | Нет | 1(1) |
ST | Z+, Rr | Косвенная запись с последующим инкрементом | (Z) ← Rr Z ← Z+1 |
Нет | 1(1) |
ST | -Z, Rr | Косвенная запись с предварительным декрементом | Z ← Z-1 (Z) ← Rr |
Нет | 2(1) |
STD | Z+q, Rr | Косвенная запись со смещением | (Z+q) ← Rr | Нет | 2(1) |
LPM | Чтение памяти программ | R0 ← (Z) | Нет | 3 | |
LPM | Rd, Z | Чтение памяти программ | Rd ← (Z) | Нет | 3 |
LPM | Rd, Z+ | Чтение памяти программ с последующим инкрементом | Rd ← (Z) Z ← Z+1 |
Нет | 3 |
ELPM | Rd, Z | Расширенное чтение памяти программ | Rd ← (RAMPZ:Z) | Нет | 3 |
ELPM | Rd, Z+ | Расширенное чтение памяти программ с последующим инкрементированием | Rd ← (RAMPZ:Z) Z ← Z+1 |
Нет | 3 |
SPM | Запись в память программ | (RAMPZ:Z) ← R1:R0 | Нет | - | |
SPM | Z+ | Запись в память программ с последующим инкрементированием на 2 | (RAMPZ:Z) ← R1:R0 Z ← Z+2 |
Нет | - |
IN | Rd, A | Чтение памяти ввода-вывода | Rd ← I/O(A) | Нет | 1 |
OUT | A, Rr | Запись в память ввода-вывода | I/O(A) ← Rr | Нет | 1 |
PUSH | Rr | Поместить регистр в стек | STACK ← Rr | Нет | 1(1) |
POP | Rd | Извлечение регистра из стека | Rd ← STACK | Нет | 2(1) |
Операции над битами |
|||||
LSL | Rd | Логический сдвиг влево | Rd(n+1) ← Rd(n) Rd(0) ← 0 C ← Rd(7) |
Z, C, N, V, H | 1 |
LSR | Rd | Логический сдвиг вправо | Rd(n) ← Rd(n+1) Rd(7) ← 0 C ← Rd(0) |
Z, C, N, V | 1 |
ROL | Rd | Циклический сдвиг влево через перенос | Rd(0) ← C Rd(n+1) ← Rd(n) C ← Rd(7) |
Z, C, N, V, H | 1 |
ROR | Rd | Циклический сдвиг вправо через перенос | Rd(7) ← C Rd(n) ← Rd(n+1) C ← Rd(0) |
Z, C, N, V | 1 |
ASR | Rd | Арифметический сдвиг вправо | Rd(n) ← Rd(n+1), n=0…6 | Z, C, N, V | 1 |
SWAP | Rd | Обмен тетрад | Rd(3…0) ↔ Rd(7…4) | Нет | 1 |
BSET | s | Установка флага | SREG(s) ← 1 | SREG(s) | 1 |
BCLR | s | Сброс флага | SREG(s) ← 0 | SREG(s) | 1 |
SBI | A, b | Установка бита в регистре ввода-вывода | I/O(A, b) ← 1 | Нет | 1 |
CBI | A, b | Сброс бита в регистре ввода-вывода | I/O(A, b) ← 0 | Нет | 1 |
BST | Rr, b | Запись бита регистра в бит Т | T ← Rr(b) | Т | 1 |
BLD | Rd, b | Чтение бита Т в бит регистра | Rr(b) ← T | Нет | 1 |
SEC | Установка флага переноса | C ← 1 | C | 1 | |
CLC | Сброс флага переноса | C ← 0 | C | 1 | |
SEN | Установка флага минуса | N ← 1 | N | 1 | |
CLN | Сброс флага минуса | N ← 0 | N | 1 | |
SEZ | Установка флага нуля | Z ← 1 | Z | 1 | |
CLZ | Сброс флага нуля | Z ← 0 | Z | 1 | |
SEI | Общее разрешение прерываний | I ← 1 | I | 1 | |
CLI | Общий запрет прерываний | I ← 0 | I | 1 | |
SES | Установка флага знакового сравнения | S ← 1 | S | 1 | |
CLS | Сброс флага знакового сравнения | S ← 0 | S | 1 | |
SEV | Установка флага переполнения дополнения до двух | V ← 1 | V | 1 | |
CLV | Сброс флага переполнения дополнения до двух | V ← 0 | V | 1 | |
SET | Установка бита Т в SREG | T ← 1 | T | 1 | |
CLT | Сброс бита Т в SREG | T ← 0 | T | 1 | |
SEH | Установка флага полупереноса в SREG | H ← 1 | H | 1 | |
CLH | Сброс флага полупереноса в SREG | H ← 0 | H | 1 | |
Инструкции управления микроконтроллером |
|||||
BREAK | Останов | (см. описание набора инструкций) | Нет | 1 | |
NOP | Нет операции | Нет | 1 | ||
SLEEP | Переход в экономичный режим работы | (см. описание набора инструкций) | Нет | 1 | |
WDR | Сброс сторожевого таймера | (см. описание набора инструкций) | Нет | 1 |