Реферат Курсовая Конспект
Система команд 8-разрядных RISC микроконтроллеров семейства AVR - раздел Компьютеры, Система Команд 8-Разрядных Risc Микроконтроллеров Семейства Avr Прин...
|
Система команд 8-разрядных RISC микроконтроллеров семейства AVR
Принятые обозначения
Регистр статуса (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 | Инкрементировать |
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 | Сбросить сторожевой таймер |
Команда ADC - Сложить с переносом
Описание:Сложение двух регистров и содержимого флага переноса (С), размещение результата в регистре назначения Rd.
Операция:
(i) | Rd <- Rd + Rr + C | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | ADC Rd,Rr | 0 < d < 31, 0 < r < 31 | PC < PC + 1 | ||
16-разрядный код операции:
11rd | dddd | rrrr |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | <=> | <=> | <=> | <=> | <=> | <=> | |||
H: | Rd3*Rr3+Rr3+R3+R3*Rd3 Устанавливается если есть перенос из бита 3, в ином случае очищается | |||||||||
S: | NEV, Для проверок со знаком | |||||||||
V: | Rd7*Rr7*R7+Rd7*Rr7*R7 Устанавливается если в результате операции образуется переполнение дополнения до двух, в ином случае очищается | |||||||||
N: | R7 Устанавливается если в результате установлен MSB, в ином случае очищается | |||||||||
Z: | Rd7*Rr7*R7*R7*R7*Rd7 Устанавливается если результат $00, в ином случае очищается | |||||||||
C: | Rd7*Rr7+Rr7+R7+R7*Rd7 Устанавливается если есть перенос из MSB результата, в ином случае очищается | |||||||||
R: | (Результат) соответствует Rd после выполнения команды | |||||||||
Пример:
; СложитьR1 : R0 с R3 : R2
add r2, r0 ; Сложить младший байт
adc r3, r1 ; Сложить старший байт с переносом
Слов: 1 (2 байта)
Циклов: 1
Команда ADD - Add without Carry - Сложить без переноса
Описание:Сложение двух регистров без добавления содержимого флага переноса (С), размещение результата в регистре назначения Rd.
Операция:
(i) | Rd <- Rd + Rr | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | ADD Rd,Rr | 0 < d < 31, 0 < r < 31 | PC < PC + 1 | ||
16-разрядный код операции:
11rd | dddd | rrrr |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | <=> | <=> | <=> | <=> | <=> | <=> | |||
H: | Rd3*Rr3+Rr3+R3+R3*Rd3 Устанавливается если есть перенос из бита 3, в ином случае очищается | |||||||||
S: | NEV, Для проверок со знаком | |||||||||
V: | Rd7*Rr7*R7+Rd7*Rr7*R7 Устанавливается если в результате операции образуется переполнение дополнения до двух, в ином случае очищается | |||||||||
N: | R7 Устанавливается если в результате установлен MSB, в ином случае очищается | |||||||||
Z: | R7*R6*R5*R4*R3*R2*R1*R0 Устанавливается если результат $00, в ином случае очищается | |||||||||
C: | Rd7*Rr7+Rr7*R7+R7*Rd7 Устанавливается если есть перенос из MSB результата, в ином случае очищается | |||||||||
R: | (Результат) соответствует Rd после выполнения команды | |||||||||
Пример:
add r1,r2 ; Сложить r2 с r1 (r1=r1+r2)
adc r28,r28 ; Сложить r28 с самим собой
(r28=r28+r28)
Слов: 1 (2 байта)
Циклов: 1
Команда ADIW - Add Immediate to Word- Сложить непосредственное значение со словом
Описание:Сложение непосредственного значения (0-63) с парой регистров и размещение результата в паре регистров. Команда работает с четырьмя верхними парами регистров, удобна для работы с регистрами указателями.
Операция:
(i) | Rdh:Rdl <- Rdh:Rdl + K | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | ADIW Rdl,K | dl Î {24,26,28,30}, 0 < K < 63 | PC < PC + 1 | ||
16-разрядный код операции:
KKdd | KKKK |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | Û | Û | Û | Û | Û |
S: | NEV, Для проверок со знаком |
V: | Rdh7 R15 Устанавливается если в результате операции образуется переполнение дополнения до двух, в ином случае очищается |
N: | R15 Устанавливается если в результате установлен MSB, в ином случае очищается |
Z: | R15*R14*R13*R12*R11*R10*R9*R8*R7*R6*R5*R4*R3*R2 Устанавливается если результат $0000, в ином случае очищается |
C: | R15*Rdh7 Устанавливается если есть перенос из MSB результата, в ином случае очищается |
R: | (Результат) соответствует Rdh:Rdl после выполнения команды (Rdh7-Rdh0 = R15-R8, Rdl7-Rdl0 = R7-R0) |
Пример:
adiw r24, 1 ; Сложить 1 с r25:r24
adiw r30, 63 ; Сложить 63 с Z указателем (r31 : r30)
Слов: 1 (2 байта)
Циклов: 2
Команда AND - Выполнить логическое AND
Описание: Выполнение логического AND между содержимым регистров Rd и Rr и помещение результата в регистр назначения Rd.
Операция:
(i) | Rd <- Rd*Rr | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | AND Rd,Rr | 0 < d < 31,0 < r < 31 | PC <- PC + 1 | ||
16-разрядный код операции:
00rd | dddd | rrrr |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | - | Û | Û | Û | - | ||||
S: | NEV, Для проверок со знаком | |||||||||
V: | 0 Очищен | |||||||||
N: | R7 Устанавливается если в результате установлен MSB, в ином случае очищается | |||||||||
Z: | R7*R6*R5*R4*R3*R2*R1*R0 Устанавливается если результат $00, в ином случае очищается | |||||||||
R: | (Результат) соответствует Rd после выполнения команды | |||||||||
Пример:
and r2, r3 ; Поразрядное and r2 и r3, результат поместить в r2
ldi r16, 1 ; Установить маску 0000 0001 в r16
and r2, r16 ; Выделить бит 0 в r2
Слов: 1 (2 байта)
Циклов: 1
Команда ANDI - Выполнить логическое AND c непосредственным значением
Описание:Выполнение логического AND между содержимым регистра Rd и константой и помещение результата в регистр назначения Rd.
Операция:
(i) | Rd <- Rd*K | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | ANDI Rd,K | 16 < d <31, 0 < K <255 | PC <- PC + 1 | ||
16-разрядный код операции:
KKKK | dddd | KKKK |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | - | Û | Û | Û | - | ||||
S: | NEV, Для проверок со знаком | |||||||||
V: | 0 Очищен | |||||||||
N: | R7 Устанавливается если в результате установлен MSB, в ином случае очищается | |||||||||
Z: | R7*R6*R5*R4*R3*R2*R1*R0 Устанавливается если результат $00, в ином случае очищается | |||||||||
R: | (Результат) соответствует Rd после выполнения команды | |||||||||
Пример:
andi r17, $0F ; Очистить старший ниббл r17
andi r18, $10 ; Выделить бит 4 в r18
andi r19, $AA ; Очистить нечетные биты r19
Слов: 1 (2 байта)
Циклов: 1
Команда ASR - Арифметически сдвинуть вправо
Описание:Выполнение сдвига всех битов Rd на одно место вправо. Состояние бита 7 не изменяется. Бит 0 загружается во флаг переноса (С) регистра состояния (SREG). Эта команда эффективно делит значение дополнения до двух на два, без изменения знака. Флаг переноса может быть использован для округления результата.
Операция:
(i) | |||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | ASR Rd | 0 < d <31 | PC <- PC + 1 | ||
16-разрядный код операции:
010d | dddd |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | - | Û | Û | Û | Û | Û | |||
S: | NEV, Для проверок со знаком | |||||||||
V: | NEC (Для N и C после сдвига) Устанавливается если (N устанавливается и C очищается) или (N очищается а C устанавливается). В ином случае очищается (при наличии значений N и C после сдвига) | |||||||||
N: | R7 Устанавливается если в результате установлен MSB, в ином случае очищается | |||||||||
Z: | R7*R6*R5*R4*R3*R2*R1*R0 Устанавливается если результат $00, в ином случае очищается | |||||||||
C: | Rd0 Устанавливается если перед сдвигом были установлены LSB или Rd | |||||||||
R: | (Результат) соответствует Rd после выполнения команды | |||||||||
Пример:
ldi r16, $10 ; Загрузить десятичное значение 16 в r16
asr r16 ; r16=r16 / 2
ldi r17, $FC ; Загрузить -4 в r17
asr r17 ; r17=r17 / 2
Слов: 1 (2 байта)
Циклов: 1
Команда BCLR - Очистить бит в регистре статуса (SREG)
Описание:Очистка одного флага в регистре статуса
Операция:
(i) | SREG(s) <- 0 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | BCLR s | 0 < S < 7 | PC <- PC + 1 | ||
16-разрядный код операции:
1sss |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
Û | Û | Û | Û | Û | Û | Û | Û | |||
I: | 0 если s = 7: в ином случае не изменяется | |||||||||
T: | 0 если s = 6: в ином случае не изменяется | |||||||||
H: | 0 если s = 5: в ином случае не изменяется | |||||||||
S: | 0 если s = 4: в ином случае не изменяется | |||||||||
V: | 0 если s = 3: в ином случае не изменяется | |||||||||
N: | 0 если s = 2: в ином случае не изменяется | |||||||||
Z: | 0 если s = 1: в ином случае не изменяется | |||||||||
C: | 0 если s = 0: в ином случае не изменяется | |||||||||
Пример:
bclr 0 ; Очистить флаг переноса
bclr 7 ; Запретить прерывания
Слов: 1 (2 байта)
Циклов: 1
Команда BLD - Загрузить содержимое T флага регистра статуса (SREG) в бит регистра
Описание:Копирование содержимого T флага регистра статуса в бит b регистра Rd
Операция:
(i) | Rd(b) <- T | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | BLD Rd,b | 0 < d < 31, 0 < b < 7 | PC <- PC + 1 | ||
16-разрядный код операции:
100d | dddd | 0bbb |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
; Скопировать бит
bst r1, 0 ; Сохранить бит 2 регистра r1 во флаге T
bld r0, 4 ; Загрузить T в бит 4 регистра r0
Слов: 1 (2 байта)
Циклов: 1
Команда BRBC - Перейти если бит в регистре статуса очищен
Описание:Условный относительный переход. Тестируется один из битов регистра статуса и, если бит очищен, выполняется переход относительно состояния счетчика программ. Данная команда выполняет переход в любом направлении относительно состояния счетчика программ (PC-64 < назначение < PC+63). Параметр k является смещением относительно состояния счетчика программ и представлен в форме дополнения до двух.
Операция:
(i) | If SREG(s) = 0 then PC <- PC + k +1, else PC <- PC +1 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | BRBC s, k | 0 < s <7, -64 < k <+63 | PC <- PC + k + 1, PC <- PC + 1, если условия не соблюдены | ||
16-разрядный код операции:
01kk | kkkk | ksss |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
cpi r20, 5 ;Сравнить r20 со значением 5
brbc 1,noteq ;Перейти если флаг нуля очищен
.....
noteq: nop ;Перейти по назначению(пустая операция)
Слов: 1 (2 байта)
Циклов:1 если условия не соблюдены, 2 при соблюдении правильных условий
Команда BRBS - Перейти если бит в регистре статуса установлен
Описание:Условный относительный переход. Тестируется один из битов регистра статуса и, если бит установлен, выполняется переход относительно состояния счетчика программ. Данная команда выполняет переход в любом направлении относительно состояния счетчика программ (PC-64 < назначение < PC+63). Параметр k является смещением относительно счетчика программ и представлен в форме дополнения до двух.
Операция:
(i) | If SREG(s) = 1 then PC <- PC + k +1, else PC <- PC +1 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | BRBS s, k | 0 < s <7, -64 < k <+63 | PC <- PC + k + 1, PC <- PC + 1, если условия не соблюдены | ||
16-разрядный код операции:
1111 kkkk ksss 1111 | 00kk | kkkk | ksss |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
bst r0, 3 ;Загрузить T битом 3 регистра r0
brbs 6,bitset ;Перейти если бит T установлен
.....
bitset: nop ;Перейти по назначению(пустая операция)
Слов: 1 (2 байта)
Циклов:1 если условия не соблюдены, 2 при соблюдении правильных условий
Команда BRCC - Перейти если флаг переноса очищен
Описание:Условный относительный переход. Тестируется бит флага переноса (С) регистра статуса и, если бит очищен, выполняется переход относительно состояния счетчика программ. Данная команда выполняет переход в любом направлении относительно состояния счетчика программ (PC-64 < назначение < PC+63). Параметр k является смещением относительно состояния счетчика программ и представлен в форме дополнения до двух. (Команда эквивалентна BRBC 0,k).
Операция:
(i) | If С= 0 then PC <- PC + k +1, else PC <- PC +1 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | BRСС k | -64 < k <+63 | PC <- PC + k + 1, PC <- PC + 1, если условия не соблюдены | ||
16-разрядный код операции:
01kk | kkkk | k000 |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
add r22, r23 ; Сложить r23 с r22
brcc nocarry ; Перейти если перенос очищен
.....
nocarry: nop ; Перейти по назначению (пустая операция)
Слов: 1 (2 байта)
Циклов:1 если условия не соблюдены, 2 при соблюдении правильных условий
Команда BRCS - Перейти если флаг переноса установлен
Описание:Условный относительный переход. Тестируется бит флага переноса (С) регистра статуса и, если бит установлен, выполняется переход относительно состояния счетчика программ. Данная команда выполняет переход в любом направлении относительно состояния счетчика программ (PC-64 < назначение < PC+63). Параметр k является смещением относительно состояния счетчика программ и представлен в форме дополнения до двух. (Команда эквивалентна BRBS 0,k).
Операция:
(i) | If С= 1 then PC <- PC + k +1, else PC <- PC +1 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | BRСS k | -64 < k <+63 | PC <- PC + k + 1, PC <- PC + 1, если условия не соблюдены | ||
16-разрядный код операции:
00kk | kkkk | k000 |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
cpi r26, $56 ; Сравнить r26 с $56
brcs carry ; Перейти если перенос установлен
.....
carry: nop ; Перейти по назначению (пустая операция)
Слов: 1 (2 байта)
Циклов:1 если условия не соблюдены, 2 при соблюдении правильных условий
Команда BREQ - Перейти если равно
Описание:Условный относительный переход. Тестируется бит флага нулевого значения (Z) регистра статуса и, если бит установлен, выполняется переход относительно состояния счетчика программ. Если команда выполняется непосредственно после выполнения любой из команд CP, CPI, SUB или SUBI переход произойдет если, и только если, двоичное число, со знаком или без знака, представленное в Rd, эквивалентно двоичному числу, со знаком или без знака, представленному в Rr. Данная команда выполняет переход в любом направлении относительно состояния счетчика программ (PC-64 < назначение < PC+63). Параметр k является смещением относительно состояния счетчика программ и представлен в форме дополнения до двух. (Команда эквивалентна BRBS 1,k).
Операция:
(i) | If Rd = Rr (Z = 1) then PC <- PC + k +1, else PC <- PC +1 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | BREQ k | -64 < k <+63 | PC <- PC + k + 1, PC <- PC + 1, если условия не соблюдены | ||
16-разрядный код операции:
00kk | kkkk | k001 |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
cp r1, r0 ; Сравнить регистры r1 и r0
breq equal ; Перейти если содержимое регистров совпадает
.....
equal: nop ; Перейти по назначению (пустая операция)
Слов: 1 (2 байта)
Циклов:1 если условия не соблюдены, 2 при соблюдении правильных условий
Команда BRGE - Перейти если больше или равно (с учетом знака)
Описание:Условный относительный переход. Тестируется бит флага знака (S) регистра статуса и, если бит очищен, выполняется переход относительно состояния счетчика программ. Если команда выполняется непосредственно после выполнения любой из команд CP, CPI, SUB или SUBI переход произойдет если, и только если, двоичное число, со знаком представленное в Rd, больше или эквивалентно двоичному числу со знаком, представленному в Rr. Данная команда выполняет переход в любом направлении относительно состояния счетчика программ (PC-64 < назначение < PC+63). Параметр k является смещением относительно состояния счетчика программ и представлен в форме дополнения до двух. (Команда эквивалентна BRBC 4,k).
Операция:
(i) | If Rd > Rr (NEV = 0) then PC <- PC + k +1, else PC <- PC +1 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | BRGE k | -64 < k <+63 | PC <- PC + k + 1 PC <- PC + 1, если условия не соблюдены | ||
16-разрядный код операции:
01kk | kkkk | k100 |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
cp r11, r12 ; Сравнить регистры r11 и r12
brge greateq ; Перейти если r11 >= r12 (со знаком)
.....
greateq: nop ; Перейти по назначению (пустая операция)
Слов: 1 (2 байта)
Циклов:1 если условия не соблюдены, 2 при соблюдении правильных условий
Команда BRHC - Перейти если флаг полупереноса очищен
Описание:Условный относительный переход. Тестируется бит флага полупереноса (H) регистра статуса и, если бит очищен, выполняется переход относительно состояния счетчика программ. Данная команда выполняет переход в любом направлении относительно состояния счетчика программ (PC-64 < назначение < PC+63). Параметр k является смещением относительно состояния счетчика программ и представлен в форме дополнения до двух. (Команда эквивалентна BRBC 5,k).
Операция:
(i) | If H = 0 then PC <- PC + k +1, else PC <- PC +1 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | BRHC k | -64 < k <+63 | PC <- PC + k + 1 PC <- PC + 1, если условия не соблюдены | ||
16-разрядный код операции:
01kk | kkkk | k101 |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
brhc hclear ; Перейти если флаг полупереноса очищен
.....
hclear: nop ; Перейти по назначению (пустая операция)
Слов: 1 (2 байта)
Циклов:1 если условия не соблюдены, 2 при соблюдении правильных условий
Команда BRHS - Перейти если флаг полупереноса установлен
Описание:Условный относительный переход. Тестируется бит флага полупереноса (H) регистра статуса и, если бит установлен, выполняется переход относительно состояния счетчика программ. Данная команда выполняет переход в любом направлении относительно состояния счетчика программ (PC-64 < назначение < PC+63). Параметр k является смещением относительно состояния счетчика программ и представлен в форме дополнения до двух. (Команда эквивалентна BRBS 5,k).
Операция:
(i) | If H = 1 then PC <- PC + k +1, else PC <- PC +1 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | BRHS k | -64 < k <+63 | PC <- PC + k + 1 PC <- PC + 1, если условия не соблюдены | ||
16-разрядный код операции:
00kk | kkkk | k101 |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
brhs hset ; Перейти если флаг полупереноса установлен
.....
hset: nop ; Перейти по назначению (пустая операция)
Слов: 1 (2 байта)
Циклов:1 если условия не соблюдены, 2 при соблюдении правильных условий
Команда BRID - Перейти если глобальное прерывание запрещено
Описание:Условный относительный переход. Тестируется бит флага глобального прерывания (I) регистра статуса и, если бит сброшен, выполняется переход относительно состояния счетчика программ. Данная команда выполняет переход в любом направлении относительно состояния счетчика программ (PC-64 << назначение < PC+63). Параметр k является смещением относительно состояния счетчика программ и представлен в форме дополнения до двух. (Команда эквивалентна BRBC 7,k).
Операция:
(i) | If I = 0 then PC <- PC + k +1, else PC <- PC +1 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | BRID k | -64 < k <+63 | PC <- PC + k + 1 PC <- PC + 1, если условия не соблюдены | ||
16-разрядный код операции:
01kk | kkkk | k111 |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
brid intdis ; Перейти если глобальное прерывание запрещено
.....
intdis: nop ; Перейти по назначению (пустая операция)
Слов: 1 (2 байта)
Циклов:1 если условия не соблюдены, 2 при соблюдении правильных условий
Команда BRIE - Перейти если глобальное прерывание разрешено
Описание:Условный относительный переход. Тестируется бит флага глобального прерывания (I) регистра статуса и, если бит установлен, выполняется переход относительно состояния счетчика программ. Данная команда выполняет переход в любом направлении относительно состояния счетчика программ (PC64 < назначение < PC+63). Параметр k является смещением относительно состояния счетчика программ и представлен в форме дополнения до двух. (Команда эквивалентна BRBS 7,k).
Операция:
(i) | If I = 1 then PC <- PC + k +1, else PC <- PC +1 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | BRIE k | -64 < k <+63 | PC <- PC + k + 1 PC <- PC + 1, если условия не соблюдены | ||
16-разрядный код операции:
00kk | kkkk | k111 |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
brie inten ;Перейти если глобальное прерывание разрешено
.....
inten: nop ;Перейти по назначению (пустая операция)
Слов: 1 (2 байта)
Циклов:1 если условия не соблюдены, 2 при соблюдении правильных условий
Команда BRLO - Перейти если меньше (без знака)
Описание:Условный относительный переход. Тестируется бит флага переноса (C) регистра статуса и, если бит установлен, выполняется переход относительно состояния счетчика программ. Если команда выполняется непосредственно после выполнения любой из команд CP, CPI, SUB или SUBI переход произойдет если, и только если, двоичное число без знака, представленное в Rd, меньше двоичного числа без знака, представленного в Rr Данная команда выполняет переход в любом направлении относительно состояния счетчика программ (PC-64 < назначение < PC+63). Параметр k является смещением относительно состояния счетчика программ и представлен в форме дополнения до двух. (Команда эквивалентна BRBS 0,k).
Операция:
(i) | If Rd < Rr (C = 1) then PC <- PC + k +1, else PC <- PC +1 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | BRLO k | -64 < k <+63 | PC <- PC + k + 1 PC <- PC + 1, если условия не соблюдены | ||
16-разрядный код операции:
00kk | kkkk | k000 |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
eor r19, r19 ; Очистить r19
loop: inc r19 ; Увеличить на 1 r19
.....
cpi r19, $10 ; Сравнить r19 с $10
brlo loop ; Перейти если r19 < $10 (без знака)
nop ; Выйти из петли (пустая операция)
Слов: 1 (2 байта)
Циклов:1 если условия не соблюдены, 2 при соблюдении правильных условий
Команда BRLT - Перейти если меньше чем (со знаком)
Описание:Условный относительный переход. Тестируется бит флага знака (S) регистра статуса и, если бит установлен, выполняется переход относительно состояния счетчика программ. Если команда выполняется непосредственно после выполнения любой из команд CP, CPI, SUB или SUBI переход произойдет если, и только если, двоичное число со знаком, представленное в Rd, меньше двоичного числа со знаком, представленного в Rr. Данная команда выполняет переход в любом направлении относительно состояния счетчика программ (PC-64 < назначение < PC+63). Параметр k является смещением относительно состояния счетчика программ и представлен в форме дополнения до двух. (Команда эквивалентна BRBS 4,k).
Операция:
(i) | If Rd < Rr (NEV = 1) then PC <- PC + k +1, else PC <- PC +1 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | BRLT k | -64 < k <+63 | PC <- PC + k + 1 PC <- PC + 1, если условия не соблюдены | ||
16-разрядный код операции:
00kk | kkkk | k100 |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
cp r16, r1 ; Сравнить r16 с r1
brlt less ; Перейти если r16 < r1 (со знаком)
.....
less nop ; Перейти по назначению (пустая операция)
Слов: 1 (2 байта)
Циклов:1 если условия не соблюдены, 2 при соблюдении правильных условий
Команда BRMI - Перейти если минус
Описание:Условный относительный переход. Тестируется бит флага отрицательного значения (N) регистра статуса и, если бит установлен, выполняется переход относительно состояния счетчика программ. Данная команда выполняет переход в любом направлении относительно состояния счетчика программ (PC64 < назначение < PC+63). Параметр k является смещением относительно состояния счетчика программ и представлен в форме дополнения до двух. (Команда эквивалентна BRBS r, k).
Операция:
(i) | If N = 1 then then PC <- PC + k +1, else PC <- PC +1 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | BRMI k | -64 < k <+63 | PC <- PC + k + 1 PC <- PC + 1, если условия не соблюдены | ||
16-разрядный код операции:
00kk | kkkk | k010 |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
subi r18, 4 ; Вычесть 4 из r18
brmi negative ; Перейти если результат отрицательный
.....
negative: nop ; Перейти по назначению (пустая операция)
Слов: 1 (2 байта)
Циклов:1 если условия не соблюдены, 2 при соблюдении правильных условий
Команда BRNE - Перейти если не равно
Описание:Условный относительный переход. Тестируется бит флага нулевого значения (Z) регистра статуса и, если бит очищен, выполняется переход относительно состояния счетчика программ. Если команда выполняется непосредственно после выполнения любой из команд CP, CPI, SUB или SUBI переход произойдет если, и только если, двоичное число со знаком или без знака, представленное в Rd, не равно двоичному числу со знаком или без знака, представленному в Rr Данная команда выполняет переход в любом направлении относительно состояния счетчика программ (PC-64 < назначение < PC+63). Параметр k является смещением относительно состояния счетчика программ и представлен в форме дополнения до двух. (Команда эквивалентна BRBC 1,k).
Операция:
(i) | If Rd ¹ Rr (Z = 0) then then PC <- PC + k +1, else PC <- PC +1 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | BRNE k | -64 < k <+63 | PC <- PC + k + 1 PC <- PC + 1, если условия не соблюдены | ||
16-разрядный код операции:
01kk | kkkk | k001 |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
eor r27, r27 ; Очистить r27
loop: inc r27 ; Увеличить на 1 r27
.....
cpi r27, 5 ; Сравнить r27 с 5
brne loop ; Перейти если r27 <> 5
nop ; Выйти из петли (пустая операция)
Слов: 1 (2 байта)
Циклов:1 если условия не соблюдены, 2 при соблюдении правильных условий
Команда BRPL - Перейти если плюс
Описание:Условный относительный переход. Тестируется бит флага отрицательного значения (N) регистра статуса и, если бит очищен, выполняется переход относительно состояния счетчика программ. Данная команда выполняет переход в любом направлении относительно состояния счетчика программ (PC-64 < назначение < PC+63). Параметр k является смещением относительно состояния счетчика программ и представлен в форме дополнения до двух. (Команда эквивалентна BRBC 2,k).
Операция:
(i) | If N = 0 then then PC <- PC + k +1, else PC <- PC +1 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | BRPL k | -64 < k <+63 | PC <- PC + k + 1 PC <- PC + 1, если условия не соблюдены | ||
16-разрядный код операции:
01kk | kkkk | k010 |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
subi r26, $50 ; Вычесть $50 из r26
brpl positive ; Перейти если r26 положителен
.....
positive: nop ; Перейти по назначению (пустая операция)
Слов: 1 (2 байта)
Циклов:1 если условия не соблюдены, 2 при соблюдении правильных условий
Команда BRSH - Перейти если равно или больше (без знака)
Описание:Условный относительный переход. Тестируется бит флага перехода (C) регистра статуса и, если бит очищен, выполняется переход относительно состояния счетчика программ. Если команда выполняется непосредственно после выполнения любой из команд CP, CPI, SUB или SUBI переход произойдет если, и только если, двоичное число без знака, представленное в Rd, больше или равно двоичному числу без знака, представленному в Rr Данная команда выполняет переход в любом направлении относительно состояния счетчика программ (PC-64 < назначение < PC+63). Параметр k является смещением относительно состояния счетчика программ и представлен в форме дополнения до двух. (Команда эквивалентна BRBC 0,k).
Операция:
(i) | If Rd > Rr (C = 0) then then PC <- PC + k +1, else PC <- PC +1 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | BRSH k | -64 < k <+63 | PC <- PC + k + 1 PC <- PC + 1, если условия не соблюдены | ||
16-разрядный код операции:
01kk | kkkk | k000 |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
subi r19, 4 ; Вычесть 4 из r19
brsh highsm ; Перейти если r2 >= 4 (без знака)
.....
highsm: nop ; Перейти по назначению (пустая операция)
Слов: 1 (2 байта)
Циклов:1 если условия не соблюдены, 2 при соблюдении правильных условий
Команда BRTC - Перейти если флаг T очищен
Описание:Условный относительный переход. Тестируется бит флага пересылки (T) регистра статуса и, если бит очищен, выполняется переход относительно состояния счетчика программ. Данная команда выполняет переход в любом направлении относительно состояния счетчика программ (PC-64 < назначение < PC+63). Параметр k является смещением относительно состояния счетчика программ и представлен в форме дополнения до двух. (Команда эквивалентна BRBC 6,k).
Операция:
(i) | If T = 0 then then PC <- PC + k +1, else PC <- PC +1 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | BRTC k | -64 < k <+63 | PC <- PC + k + 1 PC <- PC + 1, если условия не соблюдены | ||
16-разрядный код операции:
01kk | kkkk | k110 |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
bst r3, 5 ; Сохранить бит 5 регистра r3 во флаге T
brtc tclear ; Перейти если этот бит очищен
.....
tclear: nop ; Перейти по назначению (пустая операция)
Слов: 1 (2 байта)
Циклов:1 если условия не соблюдены, 2 при соблюдении правильных условий
Команда BRTS - Перейти если флаг T установлен
Описание:Условный относительный переход. Тестируется бит флага пересылки (T) регистра статуса и, если бит установлен, выполняется переход относительно состояния счетчика программ. Данная команда выполняет переход в любом направлении относительно состояния счетчика программ (PC-64 < назначение < PC+63). Параметр k является смещением относительно состояния счетчика программ и представлен в форме дополнения до двух. (Команда эквивалентна BRBC 6,k).
Операция:
(i) | If T = 1 then then PC <- PC + k +1, else PC <- PC +1 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | BRTS k | -64 < k <+63 | PC <- PC + k + 1 PC <- PC + 1, если условия не соблюдены | ||
16-разрядный код операции:
00kk | kkkk | k110 |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
bst r3, 5 ; Сохранить бит 5 регистра r3 во флаге T
brts tset ; Перейти если этот бит установлен
.....
tset: nop ; Перейти по назначению (пустая операция)
Слов: 1 (2 байта)
Циклов:1 если условия не соблюдены, 2 при соблюдении правильных условий
Команда BRVC - Перейти если переполнение очищено
Описание:Условный относительный переход. Тестируется бит флага переполнения (V) регистра статуса и, если бит очищен, выполняется переход относительно состояния счетчика программ. Данная команда выполняет переход в любом направлении относительно состояния счетчика программ (PC-64 < назначение < PC+63). Параметр k является смещением относительно состояния счетчика программ и представлен в форме дополнения до двух. (Команда эквивалентна BRBC 3,k).
Операция:
(i) | If V = 0 then then PC <- PC + k +1, else PC <- PC +1 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | BRVC k | -64 < k <+63 | PC <- PC + k + 1 PC <- PC + 1, если условия не соблюдены | ||
16-разрядный код операции:
01kk | kkkk | k011 |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
add r3, r4 ; Сложить r4 с r3
brvc noover ; Перейти если нет переполнения
.....
noover: nop ; Перейти по назначению (пустая операция)
Слов: 1 (2 байта)
Циклов:1 если условия не соблюдены, 2 при соблюдении правильных условий
Команда BRVS - Перейти если переполнение установлено
Описание:Условный относительный переход. Тестируется бит флага переполнения (V) регистра статуса и, если бит установлен, выполняется переход относительно состояния счетчика программ. Данная команда выполняет переход в любом направлении относительно состояния счетчика программ (PC-64 < назначение < PC+63). Параметр k является смещением относительно состояния счетчика программ и представлен в форме дополнения до двух. (Команда эквивалентна BRBC 3,k).
Операция:
(i) | If V = 1 then then PC <- PC + k +1, else PC <- PC +1 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | BRVS k | -64 < k <+63 | PC <- PC + k + 1 PC <- PC + 1, если условия не соблюдены | ||
16-разрядный код операции:
00kk | kkkk | k011 |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
add r3, r4 ; Сложит r4 с r3
brvs overfl ; Перейти если есть переполнение
.....
overfl: nop ; Перейти по назначению (пустая операция)
Слов: 1 (2 байта)
Циклов:1 если условия не соблюдены, 2 при соблюдении правильных условий
Команда BSET - Установить бит в регистре статуса (SREG)
Описание:Установка одного флага в регистре статуса.
Операция:
(i) | SREG(s)<-- 1 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | BSET s | 0 < s < 7 | PC <- PC + 1 | ||
16-разрядный код операции:
0sss |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
Û | Û | Û | Û | Û | Û | Û | Û | |||
I : | 1 если s = 7: в ином случае не изменяется | |||||||||
T : | 1 если s = 6: в ином случае не изменяется | |||||||||
H : | 1 если s = 5: в ином случае не изменяется | |||||||||
S: | 1 если s = 4: в ином случае не изменяется | |||||||||
V: | 1 если s = 3: в ином случае не изменяется | |||||||||
N: | 1 если s = 2: в ином случае не изменяется | |||||||||
Z: | 1 если s = 1: в ином случае не изменяется | |||||||||
C: | 1 если s = 0: в ином случае не изменяется | |||||||||
Пример:
bset 6 ; Установить флаг T
bset 7 ; Разрешить прерывание
Слов: 1 (2 байта)
Циклов: 1
Команда BST - Переписать бит из регистра во флаг T регистра статуса (SREG)
Описание:Перезапись бита b из регистра Rd в флаг T регистра статуса (SREG)
Операция:
(i) | T <-- Rd(b) | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | BST Rd,b | 0 < d < 31, 0 < b < 7 | PC <- PC + 1 | ||
16-разрядный код операции:
101d | dddd | Xbbb |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | Û | - | - | - | - | - | - | |||
T : | 0 если бит b в Rd очищен: в ином случае устанавливается 1 | |||||||||
Пример:
; Копировать бит
bst r1, 2 ; Сохранить бит 2 регистра r1 во флаге T
bld r0, 4 ; Загрузить T в бит 4регистра r0
Слов: 1 (2 байта)
Циклов: 1
Команда CALL - Выполнить длинный вызов подпрограммы
Описание:Вызов подпрограммы из памяти программ. Адрес возврата (к команде после CALL) сохраняется в стеке. (См. также RCALL).
Операция:
(i) | PC <-- k | Приборы с 16-разрядным счетчиком программ, максимальный объем памяти программ 128К. | |||||
(i) | PC <-- k | Приборы с 22-разрядным счетчиком программ, максимальный объем памяти программ 8М. | |||||
Синтаксис | Операнды: | Счетчик программ: | |||||
(i) | CALL k | 0 < k < 64K | PC <-- kSTACK <-- PC + 2 SP <-- SP-2, (2 байта, 16 битов) | ||||
(i) | CALL k | 0 < k < 4M | PC <-- kSTACK <-- PC + 2 SP <-- SP-3, (3 байта, 22 бита) | ||||
16-разрядный код операции:
010k | kkkk | 111k | |
kkkk | kkkk | kkkk | kkkk |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
mov r16, r0 ; Копировать r0 в r16
call check ; Вызвать подпрограмму
nop ; Продолжать (пустая операция)
. . .
check: cpi r16, $42 ; Проверить содержит ли r16 заданное значение
breq error ; Перейти если содержит
ret ; Вернуться из подпрограммы
. . .
error: rjmp error ; Бесконечная петля
Слов: 2 (4 байта)
Циклов: 4
Команда CBI - Очистить бит в регистре I/O
Описание:Очистка определенного бита в регистре ввода/вывода. Команда работает c младшими 32 регистрами ввода/вывода - адреса с 0 по 31.
Операция:
(i) | I/O(P,b)<-- 0 | |||||
Синтаксис | Операнды: | Счетчик программ: | ||||
(i) | CBI P,b | 0 < P < 31, 0 < b < 7 | PC <-- PC + 1 | |||
16-разрядный код операции:
pppp | pbbb |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
cbi $12. 7 ; Очистить бит 7 в Порте D
Слов: 1 (2 байта)
Циклов: 2
Команда CBR - oчистить биты в регистре
Описание:Очистка определенных битов регистра Rd. Выполняется логическое AND между содержимым регистра Rd и комплементом постоянной K
Операция:
(i) | Rd <-- Rd * ($FF - K) | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | CBR Rd | 16 < d < 31, 0 < K <255 | PC <- PC + 1 | ||
16-разрядный код операции:
Смотри команду ANDI с комплементом K
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | - | Û | Û | Û | - | ||||
S: | NEV, Для проверок со знаком | |||||||||
V: | 0 Очищен | |||||||||
N: | R7 Устанавливается если в результате установлен MSB, в ином случае очищается | |||||||||
Z: | R7*R6*R5*R4*R3*R2*R1*R0 Устанавливается если результат $00, в ином случае очищается | |||||||||
R: | (Результат) соответствует Rd после выполнения команды | |||||||||
Пример:
cbr r16, $F0 ; Очистить старший ниббл регистра r16
cbr r18, 1 ; Очистить бит в r18
Слов: 1 (2 байта)
Циклов: 1
Команда CLC - oчистить флаг переноса в регистре статуса (SREG)
Описание:Очистка флага переноса (C) в регистре статуса (SREG)
Операция:
(i) | C <-- 0 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | CLC | None | PC <- PC + 1 | ||
16-разрядный код операции:
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | - | - | - | - | - | ||||
C: | 0 Флаг переноса очищен | |||||||||
Пример:
add r0, r0 ; Сложить r0 с самим собой
clc ; Очистить флаг переноса
Слов: 1 (2 байта)
Циклов: 1
Команда CLH - oчистить флаг полупереноса в регистре статуса (SREG)
Описание:Очистка флага полупереноса (H) в регистре статуса (SREG).
Операция:
(i) | H <-- 0 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | CLH | None | PC <- PC + 1 | ||
16-разрядный код операции:
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | - | - | - | - | - | ||||
H: | 0 Флаг полупереноса очищен | |||||||||
Пример:
clh ; Очистить флаг полупереноса
Слов: 1 (2 байта)
Циклов: 1
Команда CLI - oчистить флаг глобального прерывания в регистре статуса (SREG)
Описание:Очистка флага глобального прерывания (I) в регистре статуса (SREG).
Операция:
(i) | I <-- 0 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | CLI | None | PC <- PC + 1 | ||
16-разрядный код операции:
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | - | - | - | - | - | ||||
I: | 0 Флаг глобального прерывания очищен | |||||||||
Пример:
cli ; Запретить прерывания
in r11, $16 ; Считать Порт B
sei ; Разрешить прерывания
Слов: 1 (2 байта)
Циклов: 1
Команда CLN - oчистить флаг отрицательного значения в регистре статуса (SREG)
Описание:Очистка флага отрицательного значения (N) в регистре статуса (SREG).
Операция:
(i) | N <-- 0 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | CLN | None | PC <- PC + 1 | ||
16-разрядный код операции:
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | - | - | - | - | - | ||||
N: | 0 Флаг отрицательного значения очищен | |||||||||
Пример:
add r2, r3 ; Сложить r3 с r2
cln ; Очистить флаг отрицательного значения
Слов: 1 (2 байта)
Циклов: 1
Команда CLR - oчистить регистр
Описание:Очистка регистра. Команда выполняет Exclusive OR содержимого регистра с самим собой. Это приводит к очистке всех битов регистра.
Операция:
(i) | Rd <-- Rd ÅRd | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | CLR Rd | 0 < d < 31 | PC <- PC + 1 | ||
16-разрядный код операции:
01dd | dddd | dddd |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | - | - | |||||||
S: | 0 Oчищен | |||||||||
V: | 0 Oчищен | |||||||||
N: | 0 Oчищен | |||||||||
Z: | 1 Устанавливается | |||||||||
R: | (Результат) соответствует Rd после выполнения команды | |||||||||
Пример:
clr r18 ; Очистить r18
loop: inc r18 ; Увеличить на 1 r18
. . .
cpi r18, $50 ; Сравнить r18 с $50
brne loop
Слов: 1 (2 байта)
Циклов: 1
Команда CLS - oчистить флаг знака
Описание:Очистка флага знака (S) в регистре статуса (SREG).
Операция:
(i) | S <-- 0 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | CLS | None | PC <- PC + 1 | ||
16-разрядный код операции:
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | - | - | - | - | - | ||||
S: | 0 Oчищен | |||||||||
Пример:
add r2, r3 ; Сложить r3 с r2
cls ; Очистить флаг знака
Слов: 1 (2 байта)
Циклов: 1
Команда CLT - oчистить T флаг
Описание:Очистка флага пересылки (T) в регистре статуса (SREG).
Операция:
(i) | T <-- 0 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | CLT | None | PC <- PC + 1 | ||
16-разрядный код операции:
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | - | - | - | - | - | ||||
T: | 0 Oчищен | |||||||||
Пример:
clt ; Очистить T флаг
Слов: 1 (2 байта)
Циклов: 1
Команда CLV - oчистить флаг переполнения
Описание:Очистка флага переполнения (V) в регистре статуса (SREG).
Операция:
(i) | V <-- 0 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | CLV | None | PC <- PC + 1 | ||
16-разрядный код операции:
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | - | - | - | - | - | ||||
V: | 0 Oчищен | |||||||||
Пример:
add r2, r3 ; Сложить r3 с r2
clv ; Oчистить флаг переполнения
Слов: 1 (2 байта)
Циклов: 1
Команда CLZ - oчистить флаг нулевого значения
Описание:Очистка флага нулевого значения (Z) в регистре статуса (SREG).
Операция:
(i) | Z <-- 0 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | CLZ | None | PC <- PC + 1 | ||
16-разрядный код операции:
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | - | - | - | - | - | ||||
Z: | 0 Oчищен | |||||||||
Пример:
add r2, r3 ; Сложить r3 с r2
clz ; Очистить флаг нулевого значения
Слов: 1 (2 байта)
Циклов: 1
Команда COM - Выполнить дополнение до единицы
Описание:Команда выполняет дополнение до единицы (реализует обратный код) содержимого регистра Rd.
Операция:
(i) | Rd <-- $FF * Rd | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | COM Rd | 0 < d < 31 | PC <- PC + 1 | ||
16-разрядный код операции:
010d | dddd |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | - | Û | Û | Û | |||||
S: | NEV, Для проверок со знаком | |||||||||
V: | 0 Очищен | |||||||||
N: | R7 Устанавливается если в результате установлен MSB, в ином случае очищается | |||||||||
Z: | R7*R6*R5*R4*R3*R2*R1*R0 Устанавливается если результат $00, в ином случае очищается | |||||||||
C: | 1 Установлен | |||||||||
R: | (Результат) соответствует Rd после выполнения команды | |||||||||
Пример:
com r4 ; Выполнить дополнение до единицы r4
breq zero ; Перейти если ноль
. . .
zero: nop ; Перейти по назначению (пустая операция)
Слов: 1 (2 байта)
Циклов: 1
Команда CP - cравнить
Описание:Команда выполняет сравнение содержимого двух регистров Rd и Rr. Содержимое регистров не изменяется. После этой команды можно выполнять любые условные переходы.
Операция:
(i) | Rd = Rr | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | Cp Rd, Rr | 0 < d < 31,0 < r < 31 | PC <- PC + 1 | ||
16-разрядный код операции:
01rd | dddd | rrrr |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | Û | Û | Û | Û | Û | Û | |||
H: | Rd3*Rr3+Rr3*R3+R3*Rd3 Устанавливается если есть заем из бита 3, в ином случае очищается | |||||||||
S: | NEV, Для проверок со знаком | |||||||||
V: | Rd7*Rd7*R7+Rd7*Rr7*R7 Устанавливается если в результате операции образуется переполнение дополнения до двух, в ином случае очищается | |||||||||
N: | R7 Устанавливается если в результате установлен MSB, в ином случае очищается | |||||||||
Z: | Rd7*Rr7+Rr7*R7+R7*Rd7 Устанавливается если результат $00, в ином случае очищается | |||||||||
C: | Rd7*Rr7+Rr7*R7+R7*Rd7 Устанавливается если абсолютное значение Rr больше абсолютного значения Rd, в ином случае очищается | |||||||||
R: | (Результат) после выполнения команды | |||||||||
Пример:
cp r4, r19 ; Сравнить r4 с r19
brne noteq ; Перейти если r4 <> r19
. . .
noteq: nop ; Перейти по назначению (пустая операция)
Слов: 1 (2 байта)
Циклов: 1
Команда CPC - cравнить с учетом переноса
Описание:Команда выполняет сравнение содержимого двух регистров Rd и Rr и учитывает также предшествовавший перенос. Содержимое регистров не изменяется. После этой команды можно выполнять любые условные переходы.
Операция:
(i) | Rd = Rr = C | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | CPC Rd, Rr | 0 < d < 31,0 < r < 31 | PC <- PC + 1 | ||
16-разрядный код операции:
01rd | dddd | rrrr |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | Û | Û | Û | Û | Û | Û | |||
H: | Rd3*Rr3+Rr3*R3+R3*Rd3 Устанавливается если есть заем из бита 3, в ином случае очищается | |||||||||
S: | NEV, Для проверок со знаком | |||||||||
V: | Rd7*Rd7*R7+Rd7*Rr7*R7 Устанавливается если в результате операции образуется переполнение дополнения до двух, в ином случае очищается | |||||||||
N: | R7 Устанавливается если в результате установлен MSB, в ином случае очищается | |||||||||
Z: | R7*R6*R5*R4*R3*R2*R1*R0*Z Предшествующее значение остается неизменным если результатом является ноль, в ином случае очищается | |||||||||
C: | Rd7*Rr7+Rr7*R7+R7*Rd7 Устанавливается если абсолютное значение Rr плюс предшествовавший перенос больше абсолютного значения Rd, в ином случае очищается | |||||||||
R: | (Результат) после выполнения команды | |||||||||
Пример:
; Сравнить r3 : r2 с r1 : r0
cp r2, r0 ; Сравнить старший байт
cpc r3, r1 ; Сравнить младший байт
brne noteq ; Перейти если не равно
. . .
noteq: nop ; Перейти по назначению (пустая операция)
Слов: 1 (2 байта)
Циклов: 1
Команда CPI - cравнить c константой
Описание:Команда выполняет сравнение содержимого регистра Rd с константой. Содержимое регистра не изменяется. После этой команды можно выполнять любые условные переходы.
Операция:
(i) | Rd = K | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | CPI Rd, K | 0 < d < 31,0 < K <255 | PC <- PC + 1 | ||
16-разрядный код операции:
KKKK | dddd | KKKK |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | Û | Û | Û | Û | Û | Û | |||
H: | Rd3*K3+K3*R3+R3*Rd3 Устанавливается если есть заем из бита 3, в ином случае очищается | |||||||||
S: | NEV, Для проверок со знаком | |||||||||
V: | Rd7*K7*R7+ Rd7*K7*R7 Устанавливается если в результате операции образуется переполнение дополнения до двух, в ином случае очищается | |||||||||
N: | R7 Устанавливается если в результате установлен MSB, в ином случае очищается | |||||||||
Z: | R7*R6*R5*R4*R3*R2*R1*R0 Устанавливается если результат $00, в ином случае очищается | |||||||||
C: | Rd7*K7+K7*R7+R7*Rd7 Устанавливается если абсолютное значение K больше абсолютного значения Rd, в ином случае очищается | |||||||||
R: | (Результат) после выполнения команды | |||||||||
Пример:
cpi r19, 3 ; Сравнить r19 с 3
brne error ; Перейти если r4 <> 3
. . .
error: nop ; Перейти по назначению (пустая операция)
Слов: 1 (2 байта)
Циклов: 1
Команда CPSE - cравнить и пропустить если равно
Описание:Команда выполняет сравнение содержимого регистров Rd и Rr и пропускает следующую команду если Rd = Rr.
Операция:
(i) | If Rd = Rr then PC <-- PC + 2 (or 3), else PC <-- PC +1 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | CPSE Rd,Rr | 0 < d <31, 0 < r<31 | PC<-- PC + 1, если условия не соблюдены, то пропуска нет | ||
PC<-- PC + 2, пропуск одного слова команды | |||||
PC<-- PC + 3, пропуск двух слов команды | |||||
16-разрядный код операции:
00rd | dddd | rrrr |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
inc r4 ; Увеличить на 1 r4
cpse r4, r0 ; Сравнить r4 с r0
neg r4 ; Выполнить если r4 <> r0
nop ; Продолжать (пустая операция)
Слов: 1 (2 байта)
Циклов: 1
Команда DEC - декрементировать
Описание:Вычитание единицы - 1 - из содержимого регистра Rd и размещение результата в регистре назначения Rd. Флаг переноса регистра статуса данной командой не активируется, что позволяет использовать команду DEC использовать при реализации счетчика циклов для вычислений с повышенной точностью. При обработке чисел без знаков за командой могут выполняться переходы BREQ и BRNE. При обработке значений в форме дополнения до двух допустимы все учитывающие знак переходы.
Операция:
(i) | Rd<-- Rd - 1 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | DEC Rd | 0 < d < 31 | PC <- PC + 1 | ||
16-разрядный код операции:
010d | dddd |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | - | Û | Û | Û | Û | - | |||
S: | NÅV, Для проверок со знаком | |||||||||
V: | R7*R6*R5*R4*R3*R2*R1*R0 Устанавливается если в результате получено переполнение дополнения до двух, в ином случае очищается. Переполнение дополнения до двух будет если и только если перед операцией содержимое Rd было $80. | |||||||||
N: | R7 Устанавливается если в результате установлен MSB, в ином случае очищается | |||||||||
Z: | R7*R6*R5*R4*R3*R2*R1*R0 Устанавливается если результат $00, в ином случае очищается | |||||||||
R: | (Результат)соответствует Rd после выполнения команды | |||||||||
Пример:
ldi r17, $10 ; Загрузить константу в r17
loop: add r1, r2 ; Сложить r2 с r1
dec r17 ; Уменьшить на 1 r17
brne loop ; Перейти если r17 <> 0
nop ; Продолжать (пустая операция)
Слов: 1 (2 байта)
Циклов: 1
Команда EOR - выполнить исключающее OR
Описание:Выполнение логического исключающего OR между содержимым регистра Rd и регистром Rr и помещение результата в регистр назначения Rd.
Операция:
(i) | Rd<-- RdÅRr | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | EOR Rd,Rr | 0 < d < 31,0 < r < 31 | PC <- PC + 1 | ||
16-разрядный код операции:
01rd | dddd | rrrr |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | - | Û | Û | Û | - | ||||
S: | NÅV, Для проверок со знаком | |||||||||
V: | 0 Очищен | |||||||||
N: | R7 Устанавливается если в результате установлен MSB, в ином случае очищается | |||||||||
Z: | R7*R6*R5*R4*R3*R2*R1*R0 Устанавливается если результат $00, в ином случае очищается | |||||||||
R: | (Результат)соответствует Rd после выполнения команды | |||||||||
Пример:
eor r4, r4 ; Очистить r4
eor r0, r22 ; Поразрядно выполнить исключающее or между r0 и r22
Слов: 1 (2 байта)
Циклов: 1
Команда ICALL - вызвать подпрограмму косвенно
Описание:Косвенный вызов подпрограммы указанной регистром-указателем Z (16 разрядов) в регистровом файле. Регистр-указатель Z (16-разрядного формата) позволяет вызвать подпрограмму из текущей секции пространства памяти программ объемом 64К слов (128 Кбайт).
Операция:
(i) | PC(15-0)<-- Z(15-0) Приборы с 16-разрядным счетчиком программ, максимальный объем памяти программ 128К. | |||||
(i) | PC(15-0)<-- Z(15-0) Приборы с 22-разрядным счетчиком программ, максимальный объем памяти программ 8М. PC(21-16) не изменяются | |||||
Синтаксис | Операнды: | Счетчик программ: | Стек | |||
(i) | ICALL | None | См. Операция | STACK<-- PC + 1 SP<-- SP-2, (2 байта, 16 битов) | ||
(i) | ICALL | None | См. Операция | STACK<-- PC + 1 SP<-- SP-3, (3 байта, 22 битa) | ||
16-разрядный код операции:
XXXX |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
mov r30, r0 ; Установить смещение в таблицу вызовов
icall ; Вызвать подпрограмму указанную r31 : r30
Слов: 1 (2 байта)
Циклов: 3
Команда IJMP - перейти косвенно
Описание:Выполняется косвенный переход по адресу указанному регистром-указателем Z (16 разрядов) в регистровом файле. Регистр-указатель Z (16-разрядного формата) позволяет вызвать подпрограмму из текущей секции пространства памяти программ объемом 64К слов (128 Кбайт).
Операция:
(i) | PC<-- Z(15-0) Приборы с 16-разрядным счетчиком программ, максимальный объем памяти программ 128К. | |||||
(ii) | PC(15-0)<-- ZZ(15-0) Приборы с 22-разрядным счетчиком программ, максимальный объем памяти программ 8М. PC(21-16) не изменяются | |||||
Синтаксис | Операнды: | Счетчик программ: | Стек | |||
(ii) | IJMP | None | См. Операция | Не задействуется | ||
(iii) | ICALL | None | См. Операция | Не задействуется | ||
16-разрядный код операции:
XXXX |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
mov r30, r0 ; Установить смещение в таблицу переходов
ijmp ; Перейти к подпрограмме указанной r31 : r30
Слов: 1 (2 байта)
Циклов: 2
Команда IN - загрузить данные из порта I/O в регистр
Описание:Команда загружает данные из пространства входа/выхода (порты, таймеры, регистры конфигурации и т.п.) в регистр Rd регистрового файла.
Операция:
(i) | Pd<-- P | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | IN Rd,P | 0 < d < 31, 0 < P < 63 | PC<-- PC + 1 | ||
16-разрядный код операции:
0PPd | dddd | PPPP |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
in r25, $16 ; Считать Порт B
cpi r25, r4 ; Сравнить считанное значение с константой
breq exit ; Перейти если r25=4
. . .
exit: nop ; Перейти по назначению (пустая операция)
Слов: 1 (2 байта)
Циклов: 1
Команда INC - инкрементировать
Описание:Добавление единицы - 1 - к содержимому регистра Rd и размещение результата в регистре назначения Rd.Флаг переноса регистра статуса данной командой не активируется, что позволяет использовать команду DEC использовать при реализации счетчика циклов для вычислений с повышенной точностью. При обработке чисел без знаков за командой могут выполняться переходы BREQ и BRNE. При обработке значений в форме дополнения до двух допустимы все учитывающие знак переходы.
Операция:
(i) | Rd<-- Rd + 1 | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | INC Rd | 0 < d < 31 | PC <- PC + 1 | ||
16-разрядный код операции:
010d | dddd |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | - | Û | Û | Û | Û | - | |||
S: | NÅV, Для проверок со знаком | |||||||||
V: | R7*R6*R5*R4*R3*R2*R1*R0 Устанавливается если в результате получено переполнение дополнения до двух, в ином случае очищается. Переполнение дополнения до двух будет если и только если перед операцией содержимое Rd было $7F. | |||||||||
N: | R7 Устанавливается если в результате установлен MSB, в ином случае очищается | |||||||||
Z: | R7*R6*R5*R4*R3*R2*R1*R0 Устанавливается если результат $00, в ином случае очищается | |||||||||
R: | (Результат)соответствует Rd после выполнения команды | |||||||||
Пример:
clr r22 ; Очистить r22
loop: inc r22 ; Увеличить на 1 r22
. . .
cpi r22, $4F ; Сравнить r22 с $4F
brne loop ; Перейти если не равно
nop ; Продолжать (пустая операция)
Слов: 1 (2 байта)
Циклов: 1
Команда JMP - перейти
Описание:Выполняется переход по адресу внутри всего объема (4М слов) памяти программ. См. также команду RJMP.
Операция:
(i) | Pd<-- k | ||||||
Синтаксис | Операнды: | Счетчик программ: | Стек | ||||
(i) | JMP k | 0 < k < 4M | PC<-- k | Не изменяется | |||
32-разрядный код операции:
010k | kkkk | 110k | |
kkkk | kkkk | kkkk | kkkk |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
mov r1, r0 ; Копировать r0 в r1
jmp farplc ; Безусловный переход
. . .
farplc: nop ; Перейти по назначению (пустая операция)
Слов: 2 (4 байта)
Циклов: 4
Команда LD - загрузить косвенно из СОЗУ в регистр с использованием индекса X
Описание:Загружает косвенно один байт из СОЗУ в регистр. Положение байта в СОЗУ указывается 16-разрядным регистром-указателем X в регистровом файле. Обращение к памяти ограничено текущей страницей объемом 64 Кбайта. Для обращения к другой странице СОЗУ необходимо изменить регистр RAMPX в I/O области. Регистр-указатель X может остаться неизменным после выполнения команды, но может быть инкрементирован или декрементирован. Использование регистра-указателя X обеспечивает удобную возможность обращения к матрицам, таблицам, указателю стека.
Использование X-указателя:
Операция: | Комментарий: | ||
(i) | Rd <-- (X) | X: Неизменен | |
(ii) | Rd <-- (X) | X <-- X + 1 | X: Инкрементирован впоследствии |
(iii) | X <-- X - 1 | Rd <-- (X) | X: Предварительнo декрементирован |
Синтаксис | Операнды: | Счетчик программ: | |
(i) | LD Rd,X | 0 < d < 31 | PC<-- + 1 |
(ii) | LD Rd,X+ | 0 < d < 31 | PC<-- + 1 |
(iii) | LDD Rd,-X | 0 < d < 31 | PC<-- + 1 |
16-разрядный код операции:
(i) | 000d | dddd | ||
(ii) | 000d | dddd | ||
(iii) | 000d | dddd |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
clr r27 ;Очистить старший байт X
ldi r26, $20 ;Установить $20 в младший байт X
ld r0, X+ ;Загрузить в r0 содержимое SRAM по адресу $20 (X постинкрементируется)
ld r1, X ;Загрузить в r1 содержимое SRAM по адресу $21
ldi r26, $23 ;Установить $23 в младший байт X
ld r2, X ;Загрузить в r2 содержимое SRAM по адресу $23
ld r3, -X ;Загрузить в r3 содержимое SRAM по адресу $22 (X преддекрементируется)
Слов: 1 (2 байта)
Циклов: 2
Команда LD (LDD) - загрузить косвенно из СОЗУ в регистр с использованием индекса Y
Описание:Загружает косвенно, со смещением или без смещения, один байт из СОЗУ в регистр. Положение байта в СОЗУ указывается 16-разрядным регистром-указателем Y в регистровом файле. Обращение к памяти ограничено текущей страницей объемом 64 Кбайта. Для обращения к другой странице СОЗУ необходимо изменить регистр RAMPY в I/O области. Регистр-указатель Y может остаться неизменным после выполнения команды, но может быть инкрементирован или декрементирован. Использование регистра-указателя Y обеспечивает удобную возможность обращения к матрицам, таблицам, указателю стека.
Использование Y-указателя:
Операция: | Комментарий: | ||
(i) | Rd <-- (Y) | Y: Неизменен | |
(ii) | Rd <-- (Y) | Y <-- Y + 1 | Y: Инкрементирован впоследствии |
(iii) | Y <-- Y + 1 | Rd <-- (Y) | Y: Предварительнo декрементирован |
(iv) | Rd <-- (Y + q) | Y: Неизменен, q: смещение | |
Синтаксис | Операнды: | Счетчик программ: | |
(i) | LD Rd,Y | 0 < d < 31 | PC<-- + 1 |
(ii) | LD Rd,Y+ | 0 < d < 31 | PC<-- + 1 |
(iii) | LD Rd,-Y | 0 < d < 31 | PC<-- + 1 |
(iv) | LDD Rd, Y + q | 0 < d < 31 0 < q < 63 | PC<-- + 1 |
16-разрядный код операции:
(i) | 000d | dddd | ||
(ii) | 000d | dddd | ||
(iii) | 000d | dddd | ||
(iv) | 10q0 | qq0d | dddd | 1qqq |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
clr r29 ;Очистить старший байт Y
ldi r28, $20 ;Установить $20 в младший байт Y
ld r0, Y+ ;Загрузить в r0 содерж. SRAM по адресу $20 (Y постинкрементируется)
ld r1, Y ;Загрузить в r1 содержимое SRAM по адресу $21
ldi r28, $23 ;Установить $23 в младший байт Y
ld r2, Y ;Загрузить в r2 содержимое SRAM по адресу $23
ld r3, -Y ;Загрузить в r3 содерж. SRAM по адресу $22 (Y преддекрементируется)
ldd r4, Y+2 ;Загрузить в r4 содержимое SRAM по адресу $24
Слов: 1 (2 байта)
Циклов: 2
Команда LD (LDD) - загрузить косвенно из СОЗУ в регистр с использованием индекса Z
Описание:Загружает косвенно, со смещением или без смещения, один байт из СОЗУ в регистр. Положение байта в СОЗУ указывается 16-разрядным регистром-указателем Z в регистровом файле. Обращение к памяти ограничено текущей страницей объемом 64 Кбайта. Для обращения к другой странице СОЗУ необходимо изменить регистр RAMPZ в I/O области. Регистр-указатель Z может остаться неизменным после выполнения команды, но может быть инкрементирован или декрементирован. Эта особенность очень удобна при использовании регистра-указателя Z в качестве указателя стека, однако, поскольку регистр-указатель Z может быть использован для косвенного вызова подпрограмм, косвенных переходов и табличных преобразований, более удобно использовать в качестве указателя стека регистры-указатели X и Y. Об использовании указателя Z для просмотра таблиц в памяти программ см. команду LPM.
Использование Z-указателя:
Операция: | Комментарий: | ||
(i) | Rd <-- (Y) | Y: Неизменен | |
(ii) | Rd <-- (Y) | Y <-- Y + 1 | Y: Инкрементирован впоследствии |
(iii) | Y <-- Y + 1 | Rd <-- (Y) | Y: Предварительнo декрементирован |
(iv) | Rd <-- (Y + q) | Y: Неизменен, q: смещение | |
Синтаксис | Операнды: | Счетчик программ: | |
(i) | LD Rd,Y | 0 < d < 31 | PC<-- + 1 |
(ii) | LD Rd,Y+ | 0 < d < 31 | PC<-- + 1 |
(iii) | LD Rd,-Y | 0 < d < 31 | PC<-- + 1 |
(iv) | LDD Rd, Y + q | 0 < d < 31 0 < q < 63 | PC<-- + 1 |
16-разрядный код операции:
(i) | 000d | dddd | ||
(ii) | 000d | dddd | ||
(iii) | 000d | dddd | ||
(iv) | 10q0 | qq0d | dddd | 1qqq |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
clr r29 ;Очистить старший байт Y
ldi r28, $20 ;Установить $20 в младший байт Y
ld r0, Y+ ;Загрузить в r0 содерж. SRAM по адресу $20 (Y постинкрементируется)
ld r1, Y ;Загрузить в r1 содержимое SRAM по адресу $21
ldi r28, $23 ;Установить $23 в младший байт Y
ld r2, Y ;Загрузить в r2 содержимое SRAM по адресу $23
ld r3, -Y ;Загрузить в r3 содерж. SRAM по адресу $22 (Y преддекрементируется)
ldd r4, Y+2 ;Загрузить в r4 содержимое SRAM по адресу $24
Слов: 1 (2 байта)
Циклов: 2
Команда LDI - загрузить непосредственное значение
Описание:Загружается 8-разрядная константа в регистр от 16 по 31
Операция:
(i) | Rd <-- K | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | LDI Rd, K | 16 < d < 31, 0 < K < 255 | PC<-- + 1 | ||
16-разрядный код операции:
KKKK | dddd | KKKK |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
clr r31 ; Очистить старший байт Z
ldi r30, $F0 ; Установить $F0 в младший байт Z
lpm ; Загрузить константу из программы
; Память отмечена в Z
Слов: 1 (2 байта)
Циклов: 1
Команда LDS - загрузить непосредственно из СОЗУ
Описание:Выполняется загрузка одного байта из СОЗУ в регистр. Можно использовать 16-разрядный адрес. Обращение к памяти ограничено текущей страницей СОЗУ объемом 64 Кбайта. Команда LDS использует для обращения к памяти выше 64 Кбайт регистр RAMPZ.
Операция:
(i) | Rd <-- (k) | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | LDS Rd,k | 0 < d < 31,0 < k < 65535 | PC<-- + 2 | ||
32-разрядный код операции:
000d | dddd | ||
kkkk | kkkk | kkkk | kkkk |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
lds r2, $FF00 ; Загрузить r2 содержимым SRAM по адресу $FF00
add r2, r1 ; Сложить r1 с r2
sts $FF00, r2 ; Записать обратно
Слов: 2 (4 байта)
Циклов: 3
Команда LPM - загрузить байт памяти программ
Описание:Загружает один байт, адресованный регистром Z, в регистр 0 (R0). Команда обеспечивает эффективную загрузку констант или выборку постоянных данных. Память программ организована из 16-разрядных слов и младший значащий разряд (LSB) 16-разрядного указателя Z выбирает или младший (0) или старший (1) байт. Команда может адресовать первые 64 Кбайта (32 Кслов) памяти программ.
Операция: | Комментарий: | ||
(i) | R0<-- (Z) | Z указывает на память программ | |
Синтаксис | Операнды: | Счетчик программ: | |
(i) | LPM | None | PC<-- + 1 |
16-разрядный код операции:
110X |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
clr r31 ; Очистить старший байт Z
ldi r30, $F0 ; Установить младший байт Z
lpm ; Загрузить константу из памяти программ
отмеченную Z (r31 : r30)
Слов: 1 (2 байта)
Циклов: 3
Команда LSL - логически сдвинуть влево
Описание:Выполнение сдвига всех битов Rd на одно место влево. Бит 0 стирается. Бит 7 загружается во флаг переноса (С) регистра состояния (SREG). Эта команда эффективно умножает на два значение величины без знака.
Операция:
(i) | |||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | LSL Rd | 0 < d < 31 | PC <-- PC + 1 | ||
16-разрядный код операции:
11dd | dddd | dddd |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | Û | Û | Û | Û | Û | Û | |||
H: | Rd3 | |||||||||
S: | NÅV, Для проверок со знаком | |||||||||
V: | NÅC (Для N и C после сдвига) Устанавливается если (N устанавливается и C очищается) или (N очищается а C устанавливается). В ином случае очищается (при наличии значений N и C после сдвига) | |||||||||
N: | R7 Устанавливается если в результате установлен MSB, в ином случае очищается | |||||||||
Z: | R7*R6*R5*R4*R3*R2*R1*R0 Устанавливается если результат $00, в ином случае очищается | |||||||||
C: | Rd7 Устанавливается если перед сдвигом был установлен MSB регистра Rd в ином случае очищается | |||||||||
R: | (Результат)соответствует Rd после выполнения команды | |||||||||
Пример:
add r0, r4 ; Сложить r4 с r0
lsl r0 ; Умножить r0 на 2
Слов: 1 (2 байта)
Циклов: 1
Команда LSR - логически сдвинуть вправо
Описание:Сдвиг всех битов Rd на одно место вправо. Бит 7очищается. Бит 0 загружается во флаг переноса (С) регистра состояния (SREG). Эта команда эффективно делит на два величину без знака на два. Флаг переноса может быть использован для округления результата.
Операция:
(i) | |||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | LSR Rd | 0 < d < 31 | PC <- PC + 1 | ||
16-разрядный код операции:
010d | dddd |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | - | Û | Û | Û | Û | ||||
S: | NÅV, Для проверок со знаком | |||||||||
V: | NÅC (Для N и C после сдвига) Устанавливается если (N устанавливается и C очищается) или (N очищается а C устанавливается). В ином случае очищается (при наличии значений N и C после сдвига) | |||||||||
N: | ||||||||||
Z: | R7*R6*R5*R4*R3*R2*R1*R0 Устанавливается если результат $00, в ином случае очищается | |||||||||
C: | Rd0 Устанавливается если перед сдвигом был установлен LSB регистра Rd, в ином случае очищается | |||||||||
R: | (Результат)соответствует Rd после выполнения команды | |||||||||
Пример:
add r0, r4 ; Сложить r4 с r0
lsr r0 ; Разделить r0 на 2
Слов: 1 (2 байта)
Циклов: 1
Команда MOV - копировать регистр
Описание:Команда создает копию одного регистра в другом регистре. Исходный регистр Rr остается неизменным, в регистр назначения Rd загружается копия содержимого регистра Rr.
(i) | Rd <-- Rr | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | MOV Rd,Rr | 0 < d < 31, 0 < r <31 | PC<-- + 1 | ||
16-разрядный код операции:
11rd | dddd | rrrr |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
mov r16, r0 ; Копировать r0 в r16
call check ; Вызвать подпрограмму
. . .
check cpi r16, $11 ; Сравнить r16 с $11
. . .
ret ; Вернуться из подпрограммы
Слов: 1 (2 байта)
Циклов: 1
Команда MUL - перемножить
Описание:Команда перемножает две 8-разрядные величины без знаков с получением 16- разрядного результата без знака. Множимое и множитель - два регистра - Rr и Rd, соответственно. 16-разрядное произведение размещается в регистрах R1 (старший байт ) и R0 (младший байт). Отметим, что если в качестве множимого и множителя выбрать R0 или R1, то результат заместит прежние значения сразу после выполнения операции.
Операция:
(i) | R1,R0 <-- Rr x Rd | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | MUL Rd,Rr | 0 < d < 31,0 < r < 31 | PC <- PC + 1 | ||
16-разрядный код операции:
11rd | dddd | rrrr |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | - | - | - | - | - | Û | |||
C: | R15 Устанавливается если установлен бит 15 результата, в ином случае очищается | |||||||||
R: | (Результат)соответствует R1,R0 после выполнения команды | |||||||||
Пример:
mul r6, r5 ; Перемножить r6 и r5
mov r6, r1 ; Вернуть результат обратно в r6:r5
mov r5, r1 ; Вернуть результат обратно в r6:r5
Слов: 1 (2 байта)
Циклов: 2
В системе команд базовых микроконтроллеров семейства команда отсутствует.
Команда NEG - выполнить дополнение до двух
Описание:Заменяет содержимое регистра Rd его дополнением до двух. Значение $80 остается неизменным.
Операция:
(i) | Rd <-- $00 - Rd | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | NEG Rd | 0 < d < 31 | PC <- PC + 1 | ||
16-разрядный код операции:
010d | dddd |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | Û | Û | Û | Û | Û | Û | |||
H: | R3*Rd3 Устанавливается если есть заем из бита 3, в ином случае очищается | |||||||||
S: | NÅV, Для проверок со знаком | |||||||||
V: | R7*R6*R5*R4*R3*R2*R1*R0 Устанавливается при переполнении дополнения до двух от подразумеваемого вычитания из нуля, в ином случае очищается. Переполнение дополнения до двух произойдет если и только если содержимое регистра после операции (результат) будет $80. | |||||||||
N: | R7 Устанавливается если в результате установлен MSB, в ином случае очищается | |||||||||
Z: | Rd7*R6*R5*R4*R3*R2*R1*R0 Устанавливается если результат $00, в ином случае очищается | |||||||||
C: | R7+R6+R5+R4+R3+R2+R1+R0 Устанавливается если есть заем в подразумеваемом вычитании из нуля, в ином случае очищается. Флаг C будет устанавливаться во всех случаях, за исключением случая, когда содержимое регистра после выполнения операции будет $80. | |||||||||
R: | (Результат)соответствует Rd после выполнения команды | |||||||||
Пример:
sub r11, r0 ; Вычесть r0 из r11
brpl positive ; Перейти если результат положительный
neg r11 ; Выполнить дополнение до двух r11
positive: nop ; Перейти по назначению (пустая операция)
Слов: 1 (2 байта)
Циклов: 1
Команда NOP - выполнить холостую команду
Описание:Команда выполняется за один цикл без выполнения операции.
(i) | No | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | NOP | None | PC<-- + 1 | ||
16-разрядный код операции:
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
clr r16 ; Очистить r16
ser r17 ; Установить r17
out $18, r16 ; Записать ноль в Порт B
nop ; Ожидать (пустая операция)
out $18, r17 ; Записать 1 в Порт B
Слов: 1 (2 байта)
Циклов: 1
Команда OR - выполнить логическое OR
Описание:Команда выполняет логическое OR содержимого регистров Rd и Rr и размещает результат в регистре назначения Rd.
Операция:
(i) | Rd <-- Rd v Rr | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | OR Rd,Rr | 0 < d < 31,0 < r <31 | PC <- PC + 1 | ||
16-разрядный код операции:
10rd | dddd | rrrr |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | - | Û | Û | Û | - | ||||
S: | NÅV, Для проверок со знаком | |||||||||
V: | 0 Очищен | |||||||||
N: | R7 Устанавливается если в результате установлен MSB, в ином случае очищается | |||||||||
Z: | Rd7*R6*R5*R4*R3*R2*R1*R0 Устанавливается если результат $00, в ином случае очищается | |||||||||
R: | (Результат)соответствует Rd после выполнения команды | |||||||||
Пример:
or r15, r16 ; Выполнить поразрядное or между регистрами
bst r15, 6 ; Сохранить бит 6 регистра 15 во флаге T
brst ok ; Перейти если флаг T установлен
. . .
ok: nop ; Перейти по назначению (пустая операция)
Слов: 1 (2 байта)
Циклов: 1
Команда ORI - выполнить логическое OR с непосредственным значением
Описание:Команда выполняет логическое OR между содержимым регистра Rd и константой и размещает результат в регистре назначения Rd.
Операция:
(i) | Rd <-- Rd v K | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | ORI Rd,K | 16 < d < 31,0 < K <255 | PC <- PC + 1 | ||
16-разрядный код операции:
KKKK | dddd | KKKK |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | - | Û | Û | Û | - | ||||
S: | NÅV, Для проверок со знаком | |||||||||
V: | 0 Очищен | |||||||||
N: | R7 Устанавливается если в результате установлен MSB, в ином случае очищается | |||||||||
Z: | Rd7*R6*R5*R4*R3*R2*R1*R0 Устанавливается если результат $00, в ином случае очищается | |||||||||
R: | (Результат)соответствует Rd после выполнения команды | |||||||||
Пример:
ori r16, $F0 ; Установить старший ниббл r16
ori r17, 1 ; Установить бит 0 регистра r17
Слов: 1 (2 байта)
Циклов: 1
Команда OUT - записать данные из регистра в порт I/O
Описание:Команда сохраняет данные регистра Rr в регистровом файле пространства I/O (порты, таймеры, регистры конфигурации и т.п.).
– Конец работы –
Используемые теги: система, команд, 8-разрядных, RISC, микроконтроллеров, семейства, AVR0.109
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Система команд 8-разрядных RISC микроконтроллеров семейства AVR
Если этот материал оказался полезным для Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов