Материал: 1755

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Команда 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