Система команд микроконтроллеров AVR.
Микроконтроллер имеет своем составе 32 регистра. Первая их половина (R0-R15) не может быть использована в операциях с непосредственным операндом. Во второй половине есть специфические регистровые пары, которые могут использоваться в операциях пересылки данных между регистрами и памятью и некоторых других действий (X,Y и Z). Заметим к тому же, что «возможности» этих регистровых пар различны!
Кроме регистров, микроконтроллер может иметь память данных (ОЗУ), обращение к которой производится при помощи регистровых пар (индексная адресация) или указанием 16-ти разрядного адреса. Микроконтроллер может только прочесть память данных в регистр или записать туда из регистра, никакие арифметические или логические операции с памятью данных невозможны.
Ну и последнее — периферия, или регистры ввода-вывода (I/O). Можно прочитать данные из I/O в регистр общего назначения и записать из регистра общего назначения в I/O. Кроме этого, у части регистров ввода-вывода, а точнее — у тех, чей адрес не превышает 0x1F, возможна установка отдельных бит в состояние 0 или 1.
Принятые обозначения
Регистр статуса (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 | Сбросить сторожевой таймер |
Более полное описание на русском можно скачать ниже.
Скачать описание системы команд 8-разрядных RISC микроконтроллеров семейства AVR. Скачали 3955 раз