Система команд 8-разрядных RISC микроконтроллеров семейства AVR

Система команд микроконтроллеров 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. Скачали 694 раз

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *