Раздел: Контроллеры
ATmega128. Набор инструкций
Набор инструкций
Мнемокод | Операнды | Описание | Действие | Флаги | Кол. машинных циклов |
Арифметические и логические инструкции | |||||
ADD1 | 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:Rdl <— Rdh:Rdl + K | Z,C,N,V,S | 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 | Rdl,K | Вычесть константу из слова | Rdh:Rdl <— Rdh:Rdl-K | Z,C,N,V,S | 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 | Дополнение до 0b11111111 ($FF), инверсия | Rd <— $FF - Rd | Z,C,N,V | 1 |
NEG | Rd | Дополнение до 0b00000000 ($00) | 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 · ($FF - 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 <— RdxRr | Z, C | 2 |
MULS | Rd, Rr | Умножение со знаком | R1:R0 <— RdxRr | Z, C | 2 |
MULSU | Rd, Rr | Умножение знакового с беззнаковым числом | R1:R0 <— Rd x Rr | Z, C | 2 |
FMUL | Rd. Rr | Дробное умножение без знака | R1:R0 <— (RdxRr) << 1 | Z, C | 2 |
FMULS | Rd, Rr | Дробное умножение со знаком | R1:R0 <— (RdxRr) << 1 | Z, C | 2 |
FMULSU | Rd, Rr | Дробное умножение знакового с беззнаковым числом | R1:R0 <— (RdxRr) << 1 | Z, C | 2 |
Инструкции перехода | |||||
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 или 3 | Нет | 1/2/3 |
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 | Z, N,V,C,H | 1 |
SBRC | Rr,b | Пропуск, если бит в регистре сброшен | if (Rr(b)=O)PC <— PC + 2 или 3 | Нет | 1 /2/3 |
SBRS | Rr, b | Пропуск, если бит в регистре установлен | if (Rr(b)=1)PC <— PC+ 2 или 3 | Нет | 1/2/3 |
SBIC | P, b | Пропуск, если бит в регистре ввода-вывода сброшен | if (P(b)=O)PC <— PC + 2 или 3 | Нет | 1 /2/3 |
SBIS | P, b | Пропуск, если бит в регистре ввода-вывода установлен | if (P(b)=1)PC <— PC + 2 или 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 e V= 0) then PC <— PC + k + 1 | Нет | 1 /2 |
BRLT | k | Переход, если меньше нуля с учетом знака | if (N e 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 | Переход, если флаг V установлен | if (V = 1)then PC <— PC + k+ 1 | Нет | 1 /2 |
BRVC | k | Переход, если флаг V сброшен | 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 |
MOVW | Rd, Rr | Перезапись слова между регистрами | Rd+1:Rd <— Rr+1:Rr | Нет | 1 |
LDI | Rd, K | Запись константы в регистр | Rd <— K | Нет | 1 |
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 |
LDS | Rd, k | Непосредственное чтение из ОЗУ в регистр | Rd <— (k) | Нет | 2 |
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 |
STS | k, Rr | Непосредственная запись в ОЗУ | (k) <— Rr | Нет | 2 |
LPM | Чтение из памяти программ | R0 <— (Z) | Нет | 3 | |
LPM | Rd, Z | Чтение из памяти программ | Rd <— (Z) | Нет | 3 |
LPM | Rd, Z+ | Чтение из памяти программ и последующий инкремент | Rd <— (Z), Z <— Z+1 | Нет | 3 |
ELPM | Расширенное чтение из памяти программ | R0 <— (RAMPZ:Z) | Нет | 3 | |
ELPM | Rd, Z | Расширенное чтение из памяти программ | Rd <— (RAMPZ:Z) | Нет | 3 |
ELPM | Rd, Z+ | Расширенное чтение из памяти программ и последующие инкремент | Rd <— (RAMPZ:Z), RAMPZ:Z <— RAMPZ:Z+1 | Нет | 3 |
SPM | Запись в память программ | (Z) <— R1 :R0 | Нет | - | |
IN | Rd, P | Считывание из порта ввода-вывода в регистр | Rd <— P | Нет | 1 |
OUT | P, Rr | Запись из регистра в порт ввода-вывода | P <— Rd | Нет | 1 |
PUSH | Rr | Помещение содержимого регистра в стек | STACK <— Rr | Нет | 2 |
POP | Rd | Извлечение из стека в регистр | Rd <— STACK | Нет | 2 |
Битовые инструкции и инструкции тестирования бит | |||||
SBI | P,b | Установка бита в регистре ввода-вывода | l/O(P,b) <— 1 | Нет | 2 |
CBI | P,b | Сброс бита в регистре ввода-вывода | l/O(P,b) <— 0 | Нет | 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 | Вращение влево через перенос | Rd(0)<— C,Rd(n+1)<— Rd(n),C <— Rd(7) | Z,C,N,V | 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), Rd(7..4) <— Rd(3..0) | Нет | 1 |
BSET | s | Установка флага регистра SREG | SREG(s) <— 1 | SREG(s) | 1 |
BCLR | s | Сброс флага регистра SREG | SREG(s) <— 0 | SREG(s) | 1 |
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 | Установка флага N | N <— 1 | N | 1 | |
CLN | Сброс флага N | N <— 0 | N | 1 | |
SEZ | Установка флага нуля Z | Z <— 1 | Z | 1 | |
CLZ | Сброс флага нуля Z | Z <— 0 | Z | 1 | |
SEI | Общее разрешение прерываний | l<— 1 | I | 1 | |
CLI | Общий запрет прерываний | l <— 0 | I | 1 | |
SES | Установка флага S | S <— 1 | S | 1 | |
CLS | Сброс флага S | S <— 0 | S | 1 | |
SEV | Установка флага V в регистре SREG | V <— 1 | V | 1 | |
CLV | Сброс флага V в регистре SREG | V <— 0 | V | 1 | |
SET | Установка флага T в регистре SREG | T <— 1 | T | 1 | |
CLT | Сброс флага T в регистре SREG | T <— 0 | T | 1 | |
SEH | Установка флага Н в регистре SREG | H <— 1 | H | 1 | |
CLH | Сброс флага Н в регистре SREG | H <— 0 | H | 1 | |
Инструкции управления микроконтроллером | |||||
NOP | Нет операции | Нет | 1 | ||
SLEEP | Перевод в режим сна | (см. подробное описание режима сна) | Нет | 1 | |
WDR | Сброс сторожевого таймера | (см. подробное описание сторожевого таймера) | Нет | 1 | |
BREAK | Прерывание | Только для встроенной отладки | Нет | - |
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.