32. Краткое описание набора инструкций
Мнемокод |
Операнды |
Описание |
Операция |
Флаги |
Кол.-во циклов |
Арифметические и логические инструкции |
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 |
LSR1 |
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 |
Прим.:
- Указанное количество циклов распространяется только на доступ к внутренней памяти и не действительно для доступов, выполняющихся через интерфейс внешней памяти.
- На доступ к внутреннему SRAM требуется один дополнительный цикл.
|