Rotate instructions are unparalleled instructions compared to any high level languages. A rotate operation shifts the bits within a cell without discarding. For example, a rotate right shifts bits to the right. Instead of throwing away the rightmost bit (LSB), it is placed in the leftmost position of the rotated cell.
There are two types of rotate instructions:
Rotate Without Carry instructions
ROL (ROtate Left)
ROR (ROtate Right)
ROtate through carry instructions
RCL (Rotate through Carry Left)
RCR (Rotate through Carry Right)
General syntax format
There are two different formats:
ROL/ROR/RCL/RCR r/m, count
ROL/ROR/RCL/RCR r/m, CL
First format directly specifies the count value
Count is an immediate expression between 0 and 31.
If a greater value is specified, Pentium takes only the least significant 5 bits as the count value (MODULUS 32).
Second format specifies count indirectly through CL
Only CL register can be used.
CL contents are not changed.
Useful if count value is known only at the run time as opposed at assembly time.
ROL (Rotate Left) Instruction
a rotate left shifts bits to the left. Instead of throwing away the leftmost bit, it is placed in the righmost position of the rotated cell. In addition, at the same time the leftmost bit is copied into the carry flag.
Fig. m07570.1 The ROL AL, 2 instruction
ROR (Rotate Right) Instruction
a rotate right shifts bits to the right. Instead of throwing away the rightmost bit, it is placed in the leftmost position of the rotated cell. In addition, at the same time the rightmost bit is copied into the carry flag.
Fig. m07570.2 The ROR AL, 2 instruction
RCL (Rotate through Carry Left) Instruction
the rotates through carry are just like the other rotates except that a rotate through carry to the left copies the original contents of the Carry Flag into the rightmost bit of the operand.
Fig. m07570.3 The RCL AL, 2 instruction
RCR (Rotate through Carry right) Instruction
A rotate through carry to the right copies the original contents of the Carry Flag into the rightmost bit of the operand.
Fig. m07570.4 The RCR AL, 2 instruction
Rotates through carry instructions are frequently used in applications that call for moving a field of bits from one operand to another. Accomplishing this feat is simply a matter of repeatedly shifting a bit from the first operand into the Carry flag and rotating that bit out of the carry Flag and into the second operand.
Example: Shifting 64-bit number in EDX:EAX
mov CX, N ;N bit shift
@1: shl EAX, 1 ;moves leftmost bit of EAX to CF
rcl EDX, 1 ;CF goes to rightmost bit of EDX
; The above can be done using SHLD instruction
shld EDX, EAX, N
shl EAX, N
Example: Code fragment to reverse the contents of AL
The main idea is:
We shift left the bits of AL, once at a time, and put them in BL such that we end up with:
AL = 0 0 0 0 0 0 0 0
BL = a0 a1 a2 a3 a4 a5 a6 a7
We then copy BL to AL
mov CX, 8
@1: shl AL, 1
rcr BL, 1
Initially, the contents of AL is as folows:
Write a code fragment to set the contents of AL as