Команда RETI – вернуться из прерывания
Описание:
Команда возвращает из прерывания. Адрес возврата выгружается из стека
и устанавливается флаг глобального прерывания. |
|
|||
Операция: PC(15-0) <-- STACK |
|
|
||
Синтаксис: |
Операнды: |
Счетчик программ: |
Стек: |
|
RETI |
нет |
См. операцию |
SP <-- SP+2 |
|
I = 1. Флаг регистра статуса SREG установлен. |
(2 байта, 16 бит) |
|||
|
||||
Пример: |
. . . |
|
|
|
extint: |
|
|
|
|
push r0 ; Сохранить r0 в стеке. |
||||
|
. . . |
r0 ; Восстановить r0. |
|
|
|
pop |
|
||
|
reti |
; Вернуться и разрешить прерывания. |
||
Слов: 1 (2 байта). Циклов: 4.
Команда RJMP – перейти относительно
Описание:
Команда выполняет относительный переход по адресу в пределах +2 Кслов (4 Кбайт) текущего состояния счетчика команд. В Ассемблере вместо относительных операндов используются метки. Для МК AVR с памятью программ, не превышающей 4 Кслов (8 Кбайт), данная команда может адресовать всю память программ.
Операция: PC <-- PC + k + 1 |
|
|
||
|
Синтаксис: |
Операнды: |
Счетчик программ: |
|
|
RJMP k |
-2K < k < 2K |
PC <-- PC + k + 1 |
|
I=1. Флаг регистра статуса (SREG) установлен. |
||||
Пример: |
cpi |
r16, $42 ; Сравнить r16 с $42. |
||
|
||||
|
brne |
error |
; Перейти, если r16 <> $42. |
|
error: |
rjmp |
ok |
; Безусловный переход. |
|
add |
r16, r17 ; Сложить r17 с r16. |
|||
ok: |
inc |
r16 |
; Увеличить на 1 r16. |
|
nop |
|
; Назначение для rjmp. |
||
Слов: 1 (2 байта). Циклов: 2
Команда ROL – сдвинуть влево через перенос
Описание:
Сдвиг всех битов Rd на одно место влево. Флаг переноса (С) регистра состояния (SREG) смещается на место бита 0 регистра Rd. Бит 7 смещается во флаг переноса (C).
95
Операция:
c
b7…………………..b0
с
Синтаксис: |
Операнды: |
Счетчик программ: |
ROL Rd |
0 < d < 31 |
PC <- PC + 1 |
H Устанавливается, если есть 1 в бите 3, в ином случае очищается.
S N V, для проверок со знаком.
VN C (для N и C после сдвига). Устанавливается, если (N устанавливается и C очищается) или (N очищается, а C устанавливается). В ином случае очищается (при наличии значений N и C после сдвига).
NУстанавливается, если в результате установлен MSB, в ином случае очищается.
Z Устанавливается, если результат $00, в ином случае очищается.
CУстанавливается, если перед сдвигом был установлен MSB регистра Rd, в ином случае очищается.
Пример: |
r15 |
; Сдвигать влево. |
rol |
||
brcs |
oneenc ; Перейти, если установлен |
|
. . . |
|
;перенос. |
|
; Пустая операция. |
|
oneenc: nop |
|
|
Слов: 1 (2 байта). Циклов: 1. |
|
|
Команда ROR – сдвинуть вправо через перенос
Описание:
Сдвиг всех битов Rd на одно место вправо. Флаг переноса (С) регистра состояния (SREG) смещается на место бита 7 регистра Rd. Бит 0 смещается во флаг переноса (C).
Операция: |
с |
|
c |
|
b7…………………..b0 |
||||
|
||||
Синтаксис |
Операнды: |
Счетчик программ: |
||
ROR Rd |
0 < d < 31 |
PC <- PC + 1 |
||
S N V, для проверок со знаком.
VN C (для N и C после сдвига). Устанавливается, если (N устанавливается и C очищается) или (N очищается, а C устанавливается). В ином случае очищается (при наличии значений N и C после сдвига).
96
NУстанавливается, если в результате установлен MSB, в ином случае очищается.
Z Устанавливается, если результат $00, в ином случае очищается.
CУстанавливается, если перед сдвигом был установлен LSB регистра Rd, в ином случае очищается.
Пример:
ror r15 ; Сдвигать вправо.
brcc zeroenc ; Перейти, если перенос очищен.
. . . |
; Пустая операция. |
zeroenc: nop |
|
Слов: 1 (2 байта). Циклов: 1. |
|
Команда SBC – вычесть с переносом
Описание:
Вычитание содержимого регистра-источника и содержимого флага переноса (С) из регистра Rd, размещение результата в регистре назначения Rd.
Операция: Rd <-- Rd - Rr – C
Синтаксис: |
Операнды: |
Счетчик программ: |
SBC Rd,Rr |
0 < d < 31, 0 < r < 31 |
PC <- PC + 1 |
H Устанавливается, если есть заем из бита 3, в ином случае очищается.
S N V, для проверок со знаком.
VУстанавливается, если в результате операции образуется переполнение дополнения до двух, в ином случае очищается.
NУстанавливается, если в результате установлен MSB, в ином случае очищается.
ZПредшествовавшее значение остается неизменным, если результат равен нулю, в ином случае очищается.
CУстанавливается, если абсолютное значение содержимого Rr плюс предшествовавший перенос больше, чем абсолютное значение Rd, в ином случае очищается.
Пример: |
|
|
; Вычесть r1 : r0 |
из r3 |
: r2. |
|||
sub |
r2, |
r0 |
||||||
; |
Вычесть |
младший |
байт. |
|
||||
sbc |
r3, |
r1 |
; |
Вычесть |
старший |
байт с переносом. |
||
Слов: 1 (2 байта). Циклов: 1.
97
Команда SBCI – вычесть непосредственное значение с переносом
Описание:
Вычитание константы и содержимого флага переноса (С) из содержимого регистра, размещение результата в регистре назначения Rd.
Операция: Rd <-- Rd - K – C
Синтаксис: |
Операнды: |
Счетчик программ: |
SBCI Rd,K |
0 < d < 31, 0 < K < 255 |
PC <- PC + 1 |
H Устанавливается, если есть заем из бита 3, в ином случае очищается.
S N V, для проверок со знаком.
VУстанавливается, если в результате операции образуется переполнение дополнения до двух, в ином случае очищается.
NУстанавливается, если в результате установлен MSB, в ином случае очищается.
ZПредшествовавшее значение остается неизменным, если результат равен нулю, в ином случае очищается.
CУстанавливается, если абсолютное значение константы плюс предшествовавший перенос больше, чем абсолютное значение Rd, в ином случае очищается.
Пример:
; Вычесть $4F23 из r17 : r16. subi r16, r23 ; Вычесть младший байт.
sbci r17, $4F ; Вычесть старший байт с переносом.
Слов: 1 (2 байта). Циклов: 1.
Команда SBIS – пропустить, если бит в регистре ввода/вывода установлен
Описание:
Команда проверяет состояние бита в регистре ввода/вывода и, если этот бит установлен, пропускает следующую команду. Данная команда работает с младшими 32 регистрами ввода/вывода (адреса с 0 по 31).
Операция If I/O(P,b) = 1 then PC <-- PC + 2 (or 3) else PC <-- PC + 1
Синтаксис: |
Операнды: |
Счетчик программ: |
SBIS P,b |
0 < P <31, 0 < b < 7 |
PC <-- PC + 1, если условия не |
|
|
соблюдены, нет пропуска. |
|
|
PC<-- PC + 2, если следующая |
|
|
команда длиной в 1слово. |
|
|
PC <-- PC + 3, пропускает |
|
|
команды JMP или CALL |
98
Пример: |
; Пропустить следующую команду, |
|
waitset: sbis$10,0 |
||
|
;если установлен бит 0 в порте D. |
|
rjmp waitset ; |
Бит не установлен. |
|
nop |
; |
Продолжать (пустая операция). |
Слов: 1 (2 байта). Циклов: 1, если условия не соблюдены, нет пропуска, 2, если условия соблюдены, выполняется пропуск.
Команда SBIW – вычесть непосредственное значение из слова
Описание:
Вычитание непосредственного значения (0 – 63) из пары регистров и размещение результата в паре регистров. Команда работает с четырьмя верхними парами регистров, удобна для работы с регистрами указателями.
Операция: Rdh:Rdl <-- Rdh:Rdl – K
Синтаксис: |
Операнды: |
Счетчик программ: |
SBIW Rdl,K |
dl {24,26,28,30}, 0 < K <63 |
PC <- PC + 1 |
S N V, для проверок со знаком.
VУстанавливается, если в результате операции образуется переполнение дополнения до двух, в ином случае очищается.
NУстанавливается, если в результате установлен MSB, в ином случае очищается.
Z Устанавливается, если результат $0000, в ином случае очищается.
CУстанавливается, если абсолютное значение константы K больше абсолютного значения содержимого регистра Rd, в ином случае очищается.
Пример:
sbiw r24, 1 ; Вычесть 1 из r25:r24.
sbiw r28, 63 ; Вычесть 63 из Y указателя (r29 : r28).
Слов: 1 (2 байта). Циклов: 2.
Команда SBR – установить биты в регистре
Описание:
Команда выполняет установку определенных битов в регистре Rd. Команда выполняет логическое ORI между содержимым регистра Rd и маской-константой K и размещает результат в регистре назначения Rd.
Операция: Rd <-- Rd v K
99