Система команд микроконтроллеров 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
| Сбросить сторожевой таймер
|