Description:

Shifts all bits in Rd one place to the left. The C flag is shifted into bit 0 of Rd. Bit 7 is shifted into the C flag. This operation, combined with LSL, effectively multiplies multi-byte signed and unsigned values by two.

Operation:

C

¨

b7------------------b0

C

Syntax: Operands: Program Counter:

(i)ROL Rd 0 ≤ d ≤ 31 PC ← PC + 1

16-bit Opcode: (see ADC Rd,Rd)

0001

11dd

dddd

dddd

Status Register (SREG) and Boolean Formula:

I

T

H

S

V

N

Z

C

-

-

H: Rd3

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:

Set if the result is $00; cleared otherwise.

C:Rd7

Set if, before the shift, the MSB of Rd was set; cleared otherwise.

R (Result) equals Rd after the operation.

Example:

lsl r18 ; Multiply r19:r18 by two
rol r19 ; r19:r18 is a signed or unsigned two-byte integer
 brcsoneenc ; Branch if carry set
...
oneenc:nop ; Branch destination (do nothing)

Words: 1 (2 bytes)

Cycles: 1