Набор инструкций AVR

Мнемоника Операнды Описание Действие Флаги Кол-во циклов, примечания
 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  Rd, K Прибавить константу к слову  Rd+1:Rd ¬ Rd+1:Rd + K Z,C,N,V 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  Rd, K Вычесть константу из слова  Rd+1:Rd ¬ Rd+1:Rd - K Z,C,N,V 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  Значения битов на противоположные Rd ¬ $FF - Rd Z,C,N,V 1
 NEG  Rd  Изменение знака числа 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 · ($FFh - 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 ¬ Rd ´ Rr C 2(1)
Команды ветвления
 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 or 3 Нет 1 / 2 / 3
 CP  Rd, Rr Сравнить  Rd - Rr Z,C,N,V,H 1
CPC  Rd, Rr Сравнить с учетом переноса  Rd - Rr - C Z,C,N,V,H 1
 CPI  Rd, K Сравнить с константой  Rd - K Z,C,N,V,H 1
 SBRC  Rr, b Пропустить если бит в регистре сброшен  if (Rr(b)=0) PC ¬ PC + 2 or 3 Нет 1 / 2 / 3
 SBRS  Rr, b Пропустить если бит в регистре установлен  if (Rr(b)=1) PC ¬ PC + 2 or 3 Нет 1 / 2 / 3
 SBIC  P, b Пропустить если бит в регистре ввода-вывода сброшен if(I/O(P,b)=0) PC ¬ PC + 2 or 3  Нет 1 / 2 / 3
 SBIS  P, b Пропустить если бит в регистре ввода-вывода установлен if(I/O(P,b)=1) PC ¬ PC + 2 or 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 Å V= 0) then PC ¬ PC+ k + 1 Нет 1 / 2
 BRLT  k   if (N Å 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   if (V = 1) then PC ¬ PC + k + 1 Нет 1 / 2
 BRVC  k   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
 LDI  Rd, K Загрузить константу  Rd ¬ K Нет 1
 LDS  Rd, k Загрузить напрямик из SRAM  Rd ¬ (k) Нет 3
 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
 STS  k, Rr Сохранить напрямик в SRAM  (k) ¬ Rr Нет 3
 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
 LPM   Загрузить память программы  R0 ¬ (Z) Нет 3
 IN  Rd, P Ввод из порта  Rd ¬ P Нет 1
 OUT  P, Rr Вывод в порт  P ¬ Rr Нет 1
 PUSH  Rr Положить регистр в стек  STACK ¬ Rr Нет 2
 POP  Rd Достать регистр из стека  Rd ¬ STACK Нет 2
Битовые инструкции
 LSL  Rd Логический сдвиг влево  Rd(n+1) ¬ Rd(n),Rd(0) ¬ 0,C ¬ Rd(7) Z,C,N,V,H 1
 LSR  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  P, b Установить бит в регистре ввода-вывода  I/O(P, b) ¬ 1 Нет 2
 CBI  P, b Сбросить бит в регистре ввода-вывода  I/O(P, b) ¬ 0 Нет 2
 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   Установить флаг Negative  N ¬ 1 N 1
 CLN   Сбросить флаг Negative  N ¬ 0 N 1
 SEZ   Установить флаг Zero  Z ¬ 1 Z 1
 CLZ   Сбросить флаг Zero  Z ¬ 0 Z 1
 SEI   Общее разрешение прерываний  I ¬ 1 I 1
 CLI   Общее запрещение прерываний  I ¬ 0 I 1
 SES   Установить флаг Signed Test S ¬ 1 S 1
 CLS   Сбросить флаг Signed Test S ¬ 0 S 1
 SEV     V ¬ 1 V 1
 CLV     V ¬ 0 V 1
 SET   Установить T в SREG  T ¬ 1 T 1
 CLT   Сбросить T в SREG  T ¬ 0 T 1
 SEH   Установить Half Carry Flag в SREG  H ¬ 1 H 1
 CLH   Сбросить Half Carry Flag в SREG  H ¬ 0 H 1
 NOP   Нет действия   Нет 1
 SLEEP   Режим сна   Нет 1
 WDR   Сброс таймера Watchdog   Нет 1


Примечание 1. Отсутствует в простых (base-line) микроконтроллерах

Операнды могут иметь следующие значения:

Rd: R0-R31 или R16-R31 (в зависимости от инструкции)
Rr: R0-R31
b: Константа (от 0 до 7)
s: Константа (от 0 до 7)
P: Константа (от 0 до 31, 63)
K: Константа (от 0 до 255)
k: Константа, диапазон значений зависит от инструкции
q: Константа (от 0 до 63)

Назад: Микроконтроллеры AVR.

Hosted by uCoz