Раздел: Контроллеры
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 | Прерывание | Только для встроенной отладки | Нет | - | |
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.









