Система команд микроконтроллеров AVR весьма развита и насчитывает в различных моделях от 90 до 133 различных инструкций.
Большинство команд занимает только 1 ячейку памяти (16 бит).
Большинство команд выполняется за 1 такт.
Управление периферийными устройствами осуществляется через адресное пространство данных. Для удобства существуют «сокращённые команды» IN/OUT.
| Регистр статуса (SREG)
|
| SREG:
| Регистр статуса
|
| C:
| Флаг переноса
|
| Z:
| Флаг нулевого значения
|
| N:
| Флаг отрицательного значения
|
| V:
| Флаг-указатель переполнения дополнения до двух
|
| S:
| NÅV, Для проверок со знаком
|
| H:
| Флаг полупереноса
|
| T:
| Флаг пересылки, используемый командами BLD и BST
|
| I:
| Флаг разрешения/запрещения глобального прерывания
|
| Регистры и операнды
|
| Rd:
| Регистр назначения (и источник) в регистровом файле
|
| Rr:
| Регистр источник в регистровом файле
|
| R:
| Результат выполнения команды
|
| K:
| Литерал или байт данных (8 бит)
|
| k:
| Данные адреса константы для счетчика программ
|
| b:
| Бит в регистровом файле или I/O регистр (3 бита)
|
| s:
| Бит в регистре статуса (3 бита)
|
| X, Y, Z:
| Регистр косвенной адресации (X=R27:R26, Y=R29:R28, Z=R31:R30)
|
| P:
| Адрес I/O порта
|
| q:
| Смещение при прямой адресации (6 бит)
|
| I/O регистры
|
| RAMPX, RAMPY, RAMPZ:
| Регистры связанные с X, Y и Z регистрами, обеспечивающие косвенную адресацию всей области СОЗУ микроконтроллера с объемом СОЗУ более 64 Кбайт
|
| Стек:
|
| STACK:
| Стек для адреса возврата и опущенных в стек регистров
|
| SP:
| Указатель стека
|
| Флаги:
|
| Û
| Флаг, на который воздействует команда
|
| 0:
| Очищенный командой Флаг
|
| 1:
| Установленный командой флаг
|
| -:
| Флаг, на который не воздействует команда
|
| Обозначение
| Функция
|
| ADC
| Сложить с переносом
|
| ADD
| Сложить без переноса
|
| ADIW
| Сложить непосредственное значение со словом
|
| AND
| Выполнить логическое AND
|
| ANDI
| Выполнить логическое AND c непосредственным значением
|
| ASR
| Арифметически сдвинуть вправо
|
| BCLR
| Очистить флаг
|
| BLD
| Загрузить T флаг в бит регистра
|
| BRBC
| Перейти если бит в регистре статуса очищен
|
| BRBS
| Перейти если бит в регистре статуса установлен
|
| BRCC
| Перейти если флаг переноса очищен
|
| BRCS
| Перейти если флаг переноса установлен
|
| BREQ
| Перейти если равно
|
| BRGE
| Перейти если больше или равно (с учетом знака)
|
| BRHC
| Перейти если флаг полупереноса очищен
|
| BRHS
| Перейти если флаг полупереноса установлен
|
| BRID
| Перейти если глобальное прерывание запрещено
|
| BRIE
| Перейти если глобальное прерывание разрешено
|
| BRLO
| Перейти если меньше (без знака)
|
| BRLT
| Перейти если меньше чем (со знаком)
|
| BRMI
| Перейти если минус
|
| BRNE
| Перейти если не равно
|
| BRPL
| Перейти если плюс
|
| BRSH
| Перейти если равно или больше (без знака)
|
| BRTC
| Перейти если флаг T очищен
|
| BRTS
| Перейти если флаг T установлен
|
| BRVC
| Перейти если переполнение очищено
|
| BRVS
| Перейти если переполнение установлено
|
| BSET
| Установить флаг
|
| BST
| Переписать бит из регистра во флаг T
|
| CALL
| Выполнить длинный вызов подпрограммы
|
| CBI
| - Очистить бит в регистре I/O
|
| CBR
| Очистить биты в регистре
|
| CLC
| Очистить флаг переноса
|
| CLH
| Очистить флаг полупереноса
|
| CLI
| Очистить флаг глобального прерывания
|
| CLN
| Очистить флаг отрицательного значения
|
| CLR
| Очистить регистр
|
| CLS
| Очистить флаг знака
|
| CLT
| Очистить флаг T
|
| CLV
| Очистить флаг переполнения
|
| CLZ
| Очистить флаг нулевого значения
|
| COM
| Выполнить дополнение до единицы
|
| CP
| Сравнить
|
| CPC
| Сравнить с учетом переноса
|
| CPI
| Сравнить c константой
|
| CPSE
| Сравнить и пропустить если равно
|
| DEC
| Декрементировать
|
| EOR
| Выполнить исключающее OR
|
| ICALL
| Вызвать подпрограмму косвенно
|
| IJMP
| Перейти косвенно
|
| IN
| Загрузить данные из порта I/O в регистр
|
| INC
| Инкрементировать
|
| FMUL
| Дробное незнаковое умножение
|
| FMULS
| Дробное умножение со знаком
|
| FMULSU
| Дробное умножение знакового с незнаковым
|
| JMP
| Перейти
|
| LD Rd,X
| Загрузить косвенно
|
| LD Rd,X+
| Загрузить косвенно инкрементировав впоследствии
|
| LD Rd,-X
| Загрузить косвенно декрементировав предварительно
|
| LDI
| Загрузить непосредственное значение
|
| LDS
| Загрузить непосредственно из СОЗУ
|
| LPM
| Загрузить байт памяти программ
|
| LSL
| Логически сдвинуть влево
|
| LSR
| Логически сдвинуть вправо
|
| MOV
| Копировать регистр
|
| MUL
| Перемножить
|
| NEG
| Выполнить дополнение до двух
|
| NOP
| Выполнить холостую команду
|
| OR
| Выполнить логическое OR
|
| ORI
| Выполнить логическое OR с непосредственным значением
|
| OUT
| Записать данные из регистра в порт I/O
|
| POP
| Загрузить регистр из стека
|
| PUSH
| Поместить регистр в стек
|
| RCALL
| Вызвать подпрограмму относительно
|
| RET
| Вернуться из подпрограммы
|
| RETI
| Вернуться из прерывания
|
| RJMP
| Перейти относительно
|
| ROL
| Сдвинуть влево через перенос
|
| ROR
| Сдвинуть вправо через перенос
|
| SBC
| Вычесть с переносом
|
| SBCI
| Вычесть непосредственное значение с переносом
|
| SBI
| Установить бит в регистр I/O
|
| SBIC
| Пропустить если бит в регистре I/O очищен
|
| SBIS
| Пропустить если бит в регистре I/O установлен
|
| SBIW
| Вычесть непосредственное значение из слова
|
| SBR
| Установить биты в регистре
|
| SBRC
| Пропустить если бит в регистре очищен
|
| SBRS
| Пропустить если бит в регистре установлен
|
| SEC
| Установить флаг переноса
|
| SEH
| Установить флаг полупереноса
|
| SEI
| Установить флаг глобального прерывания
|
| SEN
| Установить флаг отрицательного значения
|
| SER
| Установить все биты регистра
|
| SES
| Установить флаг знака
|
| SET
| Установить флаг T
|
| SEV
| Установить флаг переполнения
|
| SEZ
| Установить флаг нулевого значения
|
| SLEEP
| Установить режим SLEEP
|
| ST X,Rr
| Записать косвенно
|
| ST Y,Rr
| Записать косвенно из регистра в СОЗУ с использованием индекса Y
|
| ST Z,Rr
| Записать косвенно из регистра в СОЗУ с использованием индекса Z
|
| STS
| Загрузить непосредственно в СОЗУ
|
| SUB
| Вычесть без переноса
|
| SUBI
| Вычесть непосредственное значение
|
| SWAP
| Поменять нибблы местами
|
| TST
| Проверить на ноль или минус
|
| WDR
| Сбросить сторожевой таймер
|