| 31. Краткое описание набора инструкций31.1. Арифметические и логические инструкции 
    | Мнемонический код | Операнды | Описание | Операция | Флаги | Количество циклов синхронизации |  
    | 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 · ($FFh - 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 |  
    | FMUL2 | 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 | Шифрование данных | if (H = 0) then R15:R0 <--  Encrypt(R15:R0, K) else if (H = 1) then R15:R0 <-- Decrypt(R15:R0, K) |  | 1/2 |  31.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 | Сравнение и пропуск инструкции, если равно | if (Rd = Rr) PC <-- PC + 2 or 3 | Нет | 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 | Пропуск инструкции, если бит в регистре равен 0 | if (Rr(b) = 0) PC <-- PC + 2 or 3 | Нет | 1/2/3 |  
    | SBRS | Rr, b | Пропуск инструкции, если бит в регистре равен 1 | if (Rr(b) = 1) PC <-- PC + 2 or 3 | Нет | 1/2/3 |  
    | SBIC | A, b | Пропуск инструкции, если бит в регистре В/В равен 0 | if (I/O(A,b) = 0) PC <-- PC + 2 or 3 | Нет | 2/3/4 |  
    | SBIS | A, b | Пропуск инструкции, если бит в регистре В/В равен 1 | If (I/O(A,b) =1) PC <-- PC + 2 or 3 | Нет | 2/3/4 |  
    | BRBS | s, k | Переход, если флаг статуса равен 1 | if (SREG(s) = 1) then PC <-- PC + k + 1 | Нет | 1/2 |  
    | BRBC | s, k | Переход, если флаг статуса равен 0 | if (SREG(s) = 0) then PC <-- PC + k + 1 | Нет | 1/2 |  
    | BREQ | k | Переход, если равно | if (Z = 1) then PC <-- PC + k + 1 | Нет | 1/2 |  
    | BRNE | k | Переход, если неравно | if (Z = 0) then PC <-- PC + k + 1 | Нет | 1/2 |  
    | BRCS | k | Переход, если перенос равен 1 | if (C = 1) then PC <-- PC + k + 1 | Нет | 1/2 |  
    | BRCC | k | Переход, если перенос равен 0 | if (C = 0) then PC <-- PC + k + 1 | Нет | 1/2 |  
    | BRSH | k | Переход, если больше или равно | if (C = 0) then PC <-- PC + k + 1 | Нет | 1/2 |  
    | BRLO | k | Переход, если меньше | if (C = 1) then PC <-- PC + k + 1 | Нет | 1/2 |  
    | BRMI | k | Переход, если минус | if (N = 1) then PC <-- PC + k + 1 | Нет | 1/2 |  
    | BRPL | k | Переход, если плюс | if (N = 0) then PC <-- PC + k + 1 | Нет | 1/2 |  
    | BRGE | k | Переход, если больше или равно (с учетом знака) | if (N  V= 0) then PC <-- PC + k + 1 | Нет | 1/2 |  
    | BRLT | k | Переход, если меньше (с учетом знака) | if (N  V= 1) then PC <-- PC + k + 1 | Нет | 1/2 |  
    | BRHS | k | Переход, если флаг полупереноса равен 1 | if (H = 1) then PC <-- PC + k + 1 | Нет | 1/2 |  
    | BRHC | k | Переход, если флаг полупереноса равен 0 | if (H = 0) then PC <-- PC + k + 1 | Нет | 1/2 |  
    | BRTS | k | Переход, если флаг T равен 1 | if (T = 1) then PC <-- PC + k + 1 | Нет | 1/2 |  
    | BRTC | k | Переход, если флаг T равен 0 | if (T = 0) then PC <-- PC + k + 1 | Нет | 1/2 |  
    | BRVS | k | Переход, если флаг переполнения равен 1 | if (V = 1) then PC <-- PC + k + 1 | Нет | 1/2 |  
    | BRVC | k | Переход, если флаг переполнения равен 0 | if (V = 0) then PC <-- PC + k + 1 | Нет | 1/2 |  
    | BRIE | k | Переход, если прерывания разрешены | if (I = 1) then PC <-- PC + k + 1 | Нет | 1/2 |  
    | BRID | k | Переход, если прерывания отключены | if (I = 0) then PC <-- PC + k + 1 | Нет | 1/2 |  31.3. Инструкции передачи данных 
    | Мнемонический код | Операнды | Описание | Операция | Флаги | Количество циклов синхронизации |  
    | 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) <-- (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) <-- Rd | Нет | 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 |  | Расширенное чтение памяти программ | R0 <-- (RAMPZ:Z) | Нет | 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) |  31.4. Инструкции тестирования и обработки бит 
    | Мнемонический код | Операнды | Описание | Операция | Флаги | Количество циклов синхронизации |  
    | 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 | T <-- Rr(b) | T | 1 |  
    | BLD | Rd, b | Чтение бита Т в бит регистра | Rd(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 |  | Установка флага T в SREG | T ? 1 | T | 1 |  
    | CLT |  | Сброс флага T в SREG | T ? 0 | T | 1 |  
    | SEH |  | Установка флага полупереноса в SREG | H ? 1 | H | 1 |  
    | CLH |  | Сброс флага полупереноса в SREG | H <-- 0 | H | 1 |  31.5. Инструкции управления микроконтроллером 
    | Мнемонический код | Операнды | Описание | Операция | Флаги | Количество циклов синхронизации |  
    | BREAK |  | Останов | (см. подробное описание инструкции BREAK) | Нет | 1 |  
    | NOP |  | Нет операции |  | Нет | 1 |  
    | SLEEP |  | Переход в экономичный режим работы | (см. подробное описание инструкции SLEEP) | Нет | 1 |  
    | WDR |  | Сброс сторожевого таймера | (см. подробное описание инструкции WDR) | Нет | 1 |  Прим.: 
Количество циклов, необходимых для доступа к памяти данных, распространяются на доступы к внутренней памяти и не имеют отношения к доступам через интерфейс внешнего ОЗУ.
Для доступа к внутреннему SRAM необходим еще один дополнительный цикл.
 
 
 |