Команда ASR - Арифметически сдвинуть вправо
Описание:
Выполнение сдвига всех битов Rd на одно место вправо. Состояние бита 7 не изменяется. Бит 0 загружается во флаг переноса (С) регистра состояния (SREG). Эта команда эффективно делит значение дополнения до двух на два, без изменения знака. Флаг переноса может быть использован для округления результата.
Операция:
(i) |
|
|
|
Синтаксис |
Операнды: |
Счетчик программ: |
(i) |
ASR Rd |
0 < d <31 |
PC <- PC + 1 |
16-разрядный код операции:
Булевы выражения регистра статуса (SREG)
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
|