Набор команд
| Мнемоника | Операнды | Описание | Действие | Флаги | Цкл |
| Арифметические команды | |||||
| ADD | 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,l<Rdh,l+K | Z,C,N,V,S | 2 |
| SUB | Rd, Rr | Вычесть два регистра | Rd<Rd-Rr | ||
| SUBI | Rd, K | Вычесть константу | Rd<Rd-K | ||
| SBIW | Rdl,K | Вычесть слово с константой | Rdh,l<Rdh,l-K | ||
| SBC | Rd, Rr | Вычесть с переносом | Rd<Rd-Rr-C | ||
| SBCI | Rd, K | Вычесть с переносом | Rd<Rd-K-C | ||
| AND | Rd, Rr | Логическое И | Rd<Rd AND Rr | ||
| ANDI | Rd, K | Логическое И | Rd<Rd AND K | ||
| OR | Rd, Rr | Логическое ИЛИ | Rd<Rd OR Rr | ||
| ORI | Rd, K | Логическое ИЛИ | Rd<Rd OR K | Z,N,V | 1 |
| EOR | Rd, Rr | Исключающее ИЛИ | Rd<Rd XOR Rr | Z,N,V | 1 |
| COM | Rd | Дополнение до 1 | Rd<$FF - Rd | Z,C,N,V | 1 |
| NEG | Rd | Дополнение до 2 | Rd<$00 - Rd | Z,C,N,V,H | 1 |
| SBR | Rd,K | Установ. бита в регистре | Rd<Rd OR K | Z,N,V | 1 |
| CBR | Rd,K | Сброс. бита в регистре | Rd<RdAND(FFh-K) | Z,N,V | 1 |
| INC | Rd | Увеличить на 1 | Rd<Rd+1 | Z,N,V | 1 |
| DEC | Rd | Уменьшить на 1 | Rd<Rd-1 | Z,N,V | 1 |
| TST | Rd | Проверить на 0 или 1 | Rd<Rd AND Rd | Z,N,V | 1 |
| CLR | Rd | Очистить регистр | Rd<Rd XOR Rd | Z,N,V | 1 |
| SER | Rd | Установить регистр | Rd<$FF | None | 1 |
| КОМАНДЫ ВЕТВЛЕНИЯ | |||||
| RJMP | k | Относительный переход | PC<PC+k+1 | None | 2 |
| LJMP | Переход по адресу (Z) | PC<Z | None | 2 | |
| RCALL | k | Относительный вызов подпрогрограммы | PC<PC+k+1 | None | 3 |
| ICALL | Вызов подпр по адресу (Z) | PC<Z | None | 3 | |
| RET | Выход из подпрограммы | PC<STACK | None | 4 | |
| RETI | Выход из прерывания | PC<STACK | I | 4 | |
| CPSE | Rd,Rr | Сравнить , пропуск если Rd=Rr | if(Rd=Rr) PC<PC+2 или 3 | None | 1/2 |
| 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 | ||
| SBRC | Rr,b | Пропуск если бит в регистре сброшен | if(Rr(b)=0) | None | 1/2 |
| SBRS | Rr,b | Пропуск если бит в регистре установлен | if(Rr(b)=1) | None | 1/2 |
| SBIC | P, b | Пропуск если бит в регистре I\O сброшен | if(P(b)=0) | None | 1/2 |
| SBIS | P, b | Пропуск если бит в регистре I\O установлен | if(P(b)=1) | None | 1/2 |
| BRBS | s, k | Переход если установл флаг s | if(SREG(s)=1) | None | 1/2 |
| BRBC | s, k | Переход если сброшен флаг s | if(SREG(s)=0) | None | 1/2 |
| BREQ | k | Переход если равно Z=1 | if(Z=1) | None | 1/2 |
| BRNE | k | Переход если неравно if(Z=0) | if(Z=0) | None | 1/2 |
| BRCS | k | Переход если установл перенос | if(C=1) | None | 1/2 |
| BRCC | k | Переход если сброшен перенос | if(C=0) | None | 1/2 |
| BRSH | k | Переход если равно или больше | if(C=0) | None | 1/2 |
| BRLO | k | Переход если меньше | if(C=1) PC<PC+k+1 | None | 1/2 |
| BRMI | k | Переход если минус | if(N=1) PC<PC+k+1 | None | 1/2 |
| BRPL | k | Переход если плюс | if(N=0) PC<PC+k+1 | None | 1/2 |
| BRGE | k | Переход если больше или равно,со знаком | if(N XOR V=0) PC<PC+k+1 | None | 1/2 |
| BRLT | k | Переход если меньше нуля, со знаком | if(N XOR V=1) PC<PC+k+1 | None | 1/2 |
| BRHS | k | Переход если установл флаг H | if (H=1) PC<PC+k+1 | None | 1/2 |
| BRHC | k | Переход если сброшен флаг H | if (H=0) PC<PC+k+1 | None | 1/2 |
| BRTS | k | Переход если установл флаг T | if (H=1) PC<PC+k+1 | None | 1/2 |
| BRTC | k | Переход если сброшен флаг T | if (H=0) PC<PC+k+1 | None | 1/2 |
| BRVS | k | Переход если установл флаг V | if (H=1) PC<PC+k+1 | None | 1/2 |
| BRVC | k | Переход если сброшен флаг V | if (H=0) PC<PC+k+1 | None | 1/2 |
| BRIE | k | Переход если разрешены прерывания | if(I=1) PC<PC+k+1 | None | 1/2 |
| BRID | k | Переход если запрещены прерывания | if(I=1) PC<PC+k+1 | None | 1/2 |
| КОМАНДЫ ПЕРЕСЫЛКИ | |||||
| MOV | Rd,Rr | Пересылка между рег. | Rd<Rr | None | 1 |
| LDI | Rd,K | Загрузить константу | Rd<K | None | 1 |
| LD | Rd,X | Загрузить регистр непосредственно | Rd<(X) | None | 2 |
| LD | Rd,X+ | Загрузить регистр непосредст. c постинкрем | Rd<(X),X<X+1 | None | 2 |
| LD | Rd,-X | Загрузить регистр непоср. с предв.декрем | X<X-1,Rd<(X) | None | 2 |
| LD | Rd,Y | Загрузить регистр непосредственно | Rd<(Y) | None | 2 |
| LD | Rd,Y+ | Загрузить регистр непоср. c пост инкрем | Rd<(Y),Y<Y+1 | None | 2 |
| LD | Rd,-Y | Загрузить регистр непоср. с предв.декрем | Y<Y-1,Rd<(Y) | None | 2 |
| LDD | Rd,Y+q | Загрузить регистр непоср. со смещением | Rd<(Y+q) | None | 2 |
| LD | Rd,Z | Загрузить регистр непосредственно | Rd<(Z) | None | 2 |
| LD | Rd,Z+ | Загрузить регистр непоср. c пост инкрем | Rd<(Z),Z<Z+1 | None | 2 |
| LD | Rd,-Z | Загрузить регистр непоср. с предв.декрем | Z<Z-1,Rd<(Z) | None | 2 |
| LDD | Rd,Z+q | Загрузить регистр непоср. со смещением | Rd<(Z+q) | None | 2 |
| LDS | Rd,k | Загрузить из ОЗУ | Rd<(k) | None | 3 |
| ST | X,Rr | Записать регистр непосредственно | (X)<Rr | None | 2 |
| ST | -X,Rr | Записать регистр непоср.c пред.декрем. | X<X-1,(X)<Rr | ||
| ST | Y,Rr | Записать регистр непосредственно | (Y)<Rr | ||
| ST | Y+,Rr | Записать регистр непоср.c пост инкр | (X)<Rr,X<X+1 | ||
| ST | -Y,Rr | Записать регистр непоср.c пред.декрем | Y<Y-1,(Y)<Rr | None | 2 |
| STD | Y+q,Rr | Запис.рег.непоср.сосмещением | (Y+q)<Rr | None | 2 |
| ST | Z,Rr | Записать регистр непосредственно | (Y)<Rr | None | 2 |
| ST | Z+,Rr | Записать регистр непоср.c пост инкр | (Y)<Rr,Y<Y+1 | None | 2 |
| ST | -Z,Rr | Записать регистр непоср.c пред.декрем | Z<Z-1,(Z)<Rr | None | 2 |
| STD | Y+q,Rr | Запис.рег.непоср.сосмещением | (Y+q)<Rr | None | 2 |
| STS | k,Rr | Записать в ОЗУ | (k)<Rr | None | 3 |
| LPM | Загр.из памяти программ | R0<(Z) | None | 3 | |
| IN | Rd, P | Ввод из порта | Rd<P | None | 1 |
| OUT | P, Rr | Вывод в порт | P<Rr | None | 1 |
| PUSH | Rr | Записать в стек | STACK<Rr | None | 2 |
| POP | Rr | Прочитать из стека | Rr<STACK | None | 2 |
| КОМАНДЫ РАБОТЫ С БИТАМИ | |||||
| SBI | P,b | Установить бит в регистре ввода/вывода | I/O(P,b)<1 | None | 2 |
| CBI | P,b | Сбросить бит в регистре ввода/вывода | I/O(P,b)<0 | None | 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 | сдвиг влево через C | Rd(0)<C,Rd(n+1)<Rd(n), C<Rd(7) | Z,C,N,V | 1 |
| ROR | Rd | сдвиг вправо через C | 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) | None | 1 |
| BSET | s | Установить флаг | SREG(s)<1 | SREG(s) | 1 |
| BCLR | s | Сбросить флаг | SREG(s)<0 | SREG(s) | 1 |
| BST | Rr,b | Запомнить бит в T | T<Rr(b) | T | 1 |
| BLD | Rd, b | Прочитать бит из T | Rd(b)<T | None | 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 | Разрешить прерывания | I<1 | I | 1 | |
| CLI | Запретить прерывания | I<0 | I | 1 | |
| SES | Установить флаг S | S<1 | S | 1 | |
| CLS | Сбросить флаг S | S<0 | S | 1 | |
| SEV | Установить флаг V | V<1 | V | 1 | |
| CLV | Сбросить флаг V | V<0 | V | 1 | |
| SET | Установить флаг T | T<1 | T | 1 | |
| CLT | Сбросить флаг T | T<0 | T | 1 | |
| SEH | Установить флаг H | H<1 | H | 1 | |
| CLH | Сбросить флаг H | H<0 | H | 1 | |
| NOP | Нет операции | None | 1 | ||
| SLEEP | Останов | None | 3 | ||
| WDR | Сброс сторожевого таймера | None | 1 | ||
Подготовил Матвеев Дмитрий