| 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 | |