Набор инструкций
| Мнемокод |
Операнды |
Описание |
Действие |
Флаги |
Кол. машинных циклов |
| Арифметические и логические инструкции |
| ADD1 |
Rd, Rr |
Сложить два регистра |
Rd < Rd + Rr |
Z,C,N,V,H |
1 |
| ADC |
Rd, Rr |
Сложить два регистра с переносом |
Rd < Rd + Rr + C |
Z,C,N,V,H |
1 |
| ADIW |
Rdl,K |
Сложить слово с константой |
Rdh:Rdl < Rdh:Rdl + K |
Z,C,N,V,S |
2 |
| SUB |
Rd, Rr |
Вычесть два регистра |
Rd < Rd - Rr |
Z,C,N,V,H |
1 |
| SUBI |
Rd, K |
Вычесть константу из регистра |
Rd < Rd - K |
Z,C,N,V,H |
1 |
| SBC |
Rd, Rr |
Вычесть два регистра с учетом переноса |
Rd < Rd - Rr - C |
Z,C,N,V,H |
1 |
| SBCI |
Rd, K |
Вычесть константу из регистра с учетом переноса |
Rd < Rd - K - C |
Z,C,N,V,H |
1 |
| SBIW |
Rdl,K |
Вычесть константу из слова |
Rdh:Rdl < Rdh:Rdl-K |
Z,C,N,V,S |
2 |
| AND |
Rd, Rr |
Логическое И между регистрами |
Rd < Rd · Rr |
Z,N,V |
1 |
| ANDI |
Rd, K |
Логическое И между регистром и константой |
Rd < Rd · K |
Z,N,V |
1 |
| OR |
Rd, Rr |
Логическое ИЛИ между регистрами |
Rd < Rd v Rr |
Z,N,V |
1 |
| ORI |
Rd, K |
Логическое ИЛИ между регистром и константой |
Rd < Rd v K |
Z,N,V |
1 |
| EOR |
Rd, Rr |
Искл. ИЛИ между регистрами |
Rd < Rd Е Rr |
Z,N,V |
1 |
| COM |
Rd |
Дополнение до 0b11111111 ($FF), инверсия |
Rd < $FF - Rd |
Z,C,N,V |
1 |
| NEG |
Rd |
Дополнение до 0b00000000 ($00) |
Rd < $00 - Rd |
Z,C,N,V,H |
1 |
| SBR |
Rd, K |
Установка бит (бита) в регистре |
Rd < Rd v K |
Z,N,V |
1 |
| CBR |
Rd, K |
Сброс бит (бита) в регистре |
Rd < Rd · ($FF - K) |
Z,N,V |
1 |
| INC |
Rd |
Инкремент |
Rd < Rd + 1 |
Z,N,V |
1 |
| DEC |
Rd |
Декремент |
Rd < Rd - 1 |
Z,N,V |
1 |
| TST |
Rd |
Проверка на ноль или минус |
Rd < Rd . Rd |
Z,N,V |
1 |
| CLR |
Rd |
Сброс регистра |
Rd < Rd Е Rd |
Z,N,V |
1 |
| SER |
Rd |
Установка регистра |
Rd < $FF |
Нет |
1 |
| MUL |
Rd, Rr |
Умножение без знака |
R1:R0 < RdxRr |
Z, C |
2 |
| MULS |
Rd, Rr |
Умножение со знаком |
R1:R0 < RdxRr |
Z, C |
2 |
| MULSU |
Rd, Rr |
Умножение знакового с беззнаковым числом |
R1:R0 < Rd x Rr |
Z, C |
2 |
| FMUL |
Rd. Rr |
Дробное умножение без знака |
R1:R0 < (RdxRr) << 1 |
Z, C |
2 |
| FMULS |
Rd, Rr |
Дробное умножение со знаком |
R1:R0 < (RdxRr) << 1 |
Z, C |
2 |
| FMULSU |
Rd, Rr |
Дробное умножение знакового с беззнаковым числом |
R1:R0 < (RdxRr) << 1 |
Z, C |
2 |
| Инструкции перехода |
| RJMP |
k |
Относительный переход |
PC < PC + k +1 |
Нет |
2 |
| IJMP |
|
Косвенный переход по указателю (Z) |
PC < Z |
Нет |
2 |
| JMP |
k |
Безусловный переход |
PC < k |
Нет |
3 |
| RCALL |
k |
Относительный вызов процедуры |
PC < PC + k + 1 |
Нет |
3 |
| ICALL |
|
Косвенный вызов процедуры по указателю (Z) |
PC < Z |
Нет |
3 |
| CALL |
k |
Безусловный вызов процедуры |
PC < k |
Нет |
4 |
| RET |
|
Возврат из подпрограммы |
PC < STACK |
Нет |
4 |
| RETI |
|
Возврат из прерывания |
PC < STACK |
I |
4 |
| CPSE |
Rd,Rr |
Сравнение и пропуск, если равно if (Rd = Rr) |
PC < PC + 2 или 3 |
Нет |
1/2/3 |
| CP |
Rd,Rr |
Сравнение |
Rd-Rr |
Z, N,V,C,H |
1 |
| CPC |
Rd,Rr |
Сравнение с учетом переноса |
Rd - Rr-C |
Z, N,V,C,H |
1 |
| CPI |
Rd,K |
Сравнение регистра с константой |
Rd-K |
Z, N,V,C,H |
1 |
| SBRC |
Rr,b |
Пропуск, если бит в регистре сброшен |
if (Rr(b)=O)PC < PC + 2 или 3 |
Нет |
1 /2/3 |
| SBRS |
Rr, b |
Пропуск, если бит в регистре установлен |
if (Rr(b)=1)PC < PC+ 2 или 3 |
Нет |
1/2/3 |
| SBIC |
P, b |
Пропуск, если бит в регистре ввода-вывода сброшен |
if (P(b)=O)PC < PC + 2 или 3 |
Нет |
1 /2/3 |
| SBIS |
P, b |
Пропуск, если бит в регистре ввода-вывода установлен |
if (P(b)=1)PC < PC + 2 или 3 |
Нет |
1 /2/3 |
| BRBS |
s, k |
Переход, если флаг состояния установлен |
if (SREG(s) = 1) then PC < PC+k + 1 |
Нет |
1/2 |
| BRBC |
s, k |
Переход, если флаг состояния сброшен |
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 |
Переход, если перенос установлен |
if (C = 1)then PC < PC + k+ 1 |
Нет |
1 /2 |
| BRCC |
k |
Переход, если перенос сброшен |
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 e V= 0) then PC < PC + k + 1 |
Нет |
1 /2 |
| BRLT |
k |
Переход, если меньше нуля с учетом знака |
if (N e V= 1) then PC < PC + k + 1 |
Нет |
1 /2 |
| BRHS |
k |
Переход, если флаг Н установлен |
if (H = 1)then PC < PC + k + 1 |
Нет |
1 /2 |
| BRHC |
k |
Переход, если флаг Н сброшен |
if (H = 0) then PC < PC + k + 1 |
Нет |
1 /2 |
| BRTS |
k |
Переход, если флаг Т установлен |
if (T = 1)then PC < PC + k +1 |
Нет |
1 /2 |
| BRTC |
k |
Переход, если флаг Т сброшен |
if (T = 0) then PC < PC + k + 1 |
Нет |
1 /2 |
| BRVS |
k |
Переход, если флаг V установлен |
if (V = 1)then PC < PC + k+ 1 |
Нет |
1 /2 |
| BRVC |
k |
Переход, если флаг V сброшен |
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 |
| Инструкции передачи данных |
| MOV |
Rd, Rr |
Запись из регистра в регистр |
Rd < Rr |
Нет |
1 |
| MOVW |
Rd, Rr |
Перезапись слова между регистрами |
Rd+1:Rd < Rr+1:Rr |
Нет |
1 |
| LDI |
Rd, K |
Запись константы в регистр |
Rd < K |
Нет |
1 |
| LD |
Rd, X |
Косвенное считывание из памяти в регистр |
Rd < (X) |
Нет |
2 |
| LD |
Rd, X+ |
Косвенное считывание из памяти в регистр и инкр. |
Rd < (X), X < X + 1 |
Нет |
2 |
| LD |
Rd,-X |
Предварительный декремент, а затем косвенное считывание из памяти в регистр |
X < X - 1, Rd < (X) |
Нет |
2 |
| LD |
Rd,Y |
Косвенное считывание из памяти в регистр |
Rd < (Y) |
Нет |
2 |
| LD |
Rd, Y+ |
Косвенное считывание из памяти в регистр и инкр. |
Rd < (Y), Y < Y + 1 |
Нет |
2 |
| LD |
Rd,-Y |
Предварительный декремент, а затем косвенное считывание из памяти в регистр |
Y < Y - 1, Rd < (Y) |
Нет |
2 |
| LDD |
Rd,Y+q |
Косвенное считывание из памяти в регистр со смещением |
Rd < (Y + q) |
Нет |
2 |
| LD |
Rd, Z |
Косвенное считывание из памяти в регистр |
Rd < (Z) |
Нет |
2 |
| LD |
Rd, Z+ |
Косвенное считывание из памяти в регистр и инкр. |
Rd < (Z),Z < Z+1 |
Нет |
2 |
| LD |
Rd.-Z |
Предварительный декремент, а затем косвенное считывание из памяти в регистр |
Z < Z - 1, Rd < (Z) |
Нет |
2 |
| LDD |
Rd, Z+q |
Косвенное считывание из памяти в регистр со смещением |
Rd < (Z + q) |
Нет |
2 |
| LDS |
Rd, k |
Непосредственное чтение из ОЗУ в регистр |
Rd < (k) |
Нет |
2 |
| ST |
X, Rr |
Косвенная запись |
(X) < Rr |
Нет |
2 |
| ST |
X+, Rr |
Косвенная запись и послед. инкремент |
(X) < Rr, X < X + 1 |
Нет |
2 |
| ST |
-X, Rr |
Предв. декремент и косвенная запись |
X < X - 1, (X) < Rr |
Нет |
2 |
| ST |
Y, Rr |
Косвенная запись |
(Y) < Rr |
Нет |
2 |
| ST |
Y+, Rr |
Косвенная запись и послед. инкремент |
(Y) < Rr, Y < Y + 1 |
Нет |
2 |
| ST |
-Y, Rr |
Предв. декремент и косвенная запись |
Y < Y - 1, (Y) < Rr |
Нет |
2 |
| STD |
Y+q,Rr |
Косвенная запись со смещением |
(Y + q) < Rr |
Нет |
2 |
| ST |
Z, Rr |
Косвенная запись |
(Z) < Rr |
Нет |
2 |
| ST |
Z+, Rr |
Косвенная запись и послед. инкремент |
(Z) < Rr, Z < Z + 1 |
Нет |
2 |
| ST |
-Z. Rr |
Предв. декремент и косвенная запись |
Z < Z - 1, (Z) < Rr |
Нет |
2 |
| STD |
Z+q,Rr |
Косвенная запись со смещением |
(Z + q) < Rr |
Нет |
2 |
| STS |
k, Rr |
Непосредственная запись в ОЗУ |
(k) < Rr |
Нет |
2 |
| 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), RAMPZ:Z < RAMPZ:Z+1 |
Нет |
3 |
| SPM |
|
Запись в память программ |
(Z) < R1 :R0 |
Нет |
- |
| IN |
Rd, P |
Считывание из порта ввода-вывода в регистр |
Rd < P |
Нет |
1 |
| OUT |
P, Rr |
Запись из регистра в порт ввода-вывода |
P < Rd |
Нет |
1 |
| PUSH |
Rr |
Помещение содержимого регистра в стек |
STACK < Rr |
Нет |
2 |
| POP |
Rd |
Извлечение из стека в регистр |
Rd < STACK |
Нет |
2 |
| Битовые инструкции и инструкции тестирования бит |
| SBI |
P,b |
Установка бита в регистре ввода-вывода |
l/O(P,b) < 1 |
Нет |
2 |
| CBI |
P,b |
Сброс бита в регистре ввода-вывода |
l/O(P,b) < 0 |
Нет |
2 |
| LSL |
Rd |
Логический сдвиг влево |
Rd(n+1) < Rd(n), Rd(0) < 0 |
Z,C,N,V |
1 |
| LSR |
Rd |
Логический сдвиг вправо |
Rd(n) < Rd(n+1), Rd(7) < 0 |
Z,C,N,V |
1 |
| ROL |
Rd |
Вращение влево через перенос |
Rd(0)< C,Rd(n+1)< Rd(n),C < Rd(7) |
Z,C,N,V |
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), Rd(7..4) < Rd(3..0) |
Нет |
1 |
| BSET |
s |
Установка флага регистра SREG |
SREG(s) < 1 |
SREG(s) |
1 |
| BCLR |
s |
Сброс флага регистра SREG |
SREG(s) < 0 |
SREG(s) |
1 |
| BST |
Rr, b |
Запись бита регистра в T |
T < Rr(b) |
T |
1 |
| BLD |
Rd, b |
Чтение из T в бит регистра |
Rd(b) < T |
Нет |
1 |
| SEC |
|
Установка переноса |
C < 1 |
C |
1 |
| CLC |
|
Сброс переноса |
C < 0 |
C |
1 |
| SEN |
|
Установка флага N |
N < 1 |
N |
1 |
| CLN |
|
Сброс флага N |
N < 0 |
N |
1 |
| SEZ |
|
Установка флага нуля Z |
Z < 1 |
Z |
1 |
| CLZ |
|
Сброс флага нуля Z |
Z < 0 |
Z |
1 |
| SEI |
|
Общее разрешение прерываний |
l< 1 |
I |
1 |
| CLI |
|
Общий запрет прерываний |
l < 0 |
I |
1 |
| SES |
|
Установка флага S |
S < 1 |
S |
1 |
| CLS |
|
Сброс флага S |
S < 0 |
S |
1 |
| SEV |
|
Установка флага V в регистре SREG |
V < 1 |
V |
1 |
| CLV |
|
Сброс флага V в регистре SREG |
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 |
| Инструкции управления микроконтроллером |
| NOP |
|
Нет операции |
|
Нет |
1 |
| SLEEP |
|
Перевод в режим сна |
(см. подробное описание режима сна) |
Нет |
1 |
| WDR |
|
Сброс сторожевого таймера |
(см. подробное описание сторожевого таймера) |
Нет |
1 |
| BREAK |
|
Прерывание |
Только для встроенной отладки |
Нет |
- |
|