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 требуется один дополнительный цикл.
|