96. ROR – Rotate Right through Carry
96.1. Description
Shifts all bits in Rd one place to the right. The C Flag is shifted into bit 7 of Rd. Bit 0 is shifted into the C
Flag. This operation, combined with ASR, effectively divides multi-byte signed values by two. Combined
with LSR it effectively divides multi-byte unsigned values by two. The Carry Flag can be used to round the
result.
Operation:
→
C
→
b7 - - - - - - - - - - - - - - - - - - b0
→
C
Syntax: Operands: Program Counter:
(i) ROR Rd 0 ≤ d ≤ 31 PC ← PC + 1
16-bit Opcode:
1001 010d dddd 0111
96.2. Status Register (SREG) and Boolean Formula
I T H S V N Z C
– – – ⇔ ⇔ ⇔ ⇔ ⇔
S N ⊕ V, for signed tests.
V N ⊕ C, for N and C after the shift.
N R7
Set if MSB of the result is set; cleared otherwise.
Z R7 • R6 • R5 • R4 • R3 • R2 • R1 • R0
Set if the result is $00; cleared otherwise.
C Rd0
Set if, before the shift, the LSB of Rd was set; cleared otherwise.
R (Result) equals Rd after the operation.
Example:
lsr r19 ; Divide r19:r18 by two
ror r18 ; r19:r18 is an unsigned two-byte integer
brcc zeroenc1 ; Branch if carry cleared
asr r17 ; Divide r17:r16 by two
ror r16 ; r17:r16 is a signed two-byte integer
brcc zeroenc2 ; Branch if carry cleared
...
Atmel AVR Instruction Set Manual [OTHER]
Atmel-0856L-AVR-Instruction-Set-Manual_Other-11/2016
145