Набор команд
Мнемоника | Операнды | Описание | Действие | Флаги | Цкл |
Арифметические команды | |||||
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 |
Подготовил Матвеев Дмитрий