RRA[.W] |
Арифметическая ротация вправо |
RRA.B |
Арифметическая ротация вправо |
Синтаксис |
RRA dst или RRA.W dst RRA.B dst |
Операция |
MSB -> MSB, MSB -> MSB-1, … LSB+1 >- LSB, LSB -> С |
Описание |
Операнд получателя сдвигается вправо на одну позицию, как показано на рис.3.16. Старший бит MSB сдвигается сам в себя и в бит MSB-1, бит LSB+1 сдвигается в младший бит LSB. |
Рис.3-16 Операнд получателя – арифметический сдвиг вправо
|
Биты статуса |
N: |
Устанавливается, если результат отрицательный; сбрасывается, если положительный |
Z: |
Устанавливается, если результат «0», в противном случае сбрасывается |
C: |
Загружается из LSB |
V: |
Сбрасывается |
Биты режима |
Биты OSCOFF, CPUOFF и GIE не изменяются |
Пример |
Содержимое регистра R5 сдвигается вправо на одну позицию. Старший бит MSB сохраняет старое значение. Эта операция эквивалентна арифметическому делению на 2.
RRA R5 ; R5/2 -> R5
;
;Содержимое R5 умножается на 0.75 (0.5 + 0.25).
PUSH R5 ; Временное сохранение R5 с помощью стека
RRA R5 ; R5х0.5 -> R5
ADD @SP+,R5 ; R5х0.5 + R5 = 1.5хR5 -> R5
RRA R5 ; (1.5хR5)х0.5 = 0.75хR5 -> R5
…
|
Пример |
Содержимое младшего байта регистра R5 сдвигается вправо на одну позицию. Старший бит MSB сохраняет старое значение. Эта операция эквивалентна арифметическому делению на 2.
RRA.B R5 ; R5/2 -> R5: операция производится только с
; младшим байтом, старший байт R5 сброшен
RRA.B R5 ; R5?0.5 -> R5
PUSH.B R5 ; R5?0.5 -> TOS
RRA.B @SP ; TOS?0.5 = 0.5?R5?0.5 = 0.25?R5 -> TOS
ADD.B @SP+,R5 ; R5?0.5 + R5?0.25 = 0.75?R5 -> R5
…
|