Operation
(* count is an unsigned integer corresponding
to the last operand of the instruction, either an
immediate byte or the byte in register CL *)
ShiftAmt count MOD 32;
inBits register; (* Allow overlapped operands *)
IF ShiftAmt = 0
THEN no operation
ELSE
IF ShiftAmt ≥ OperandSize
THEN (* Bad parameters *)
r/m UNDEFINED;
CF, OF, SF, ZF, AF, PF UNDEFINED;
ELSE (* Perform the shift *)
CF BIT[Base, OperandSize - ShiftAmt];
(* Last bit shifted out on exit *)
FOR i OperandSize - 1 DOWNTO ShiftAmt
DO
BIT[Base, i] BIT[Base, i - ShiftAmt];
OF;
FOR i ShiftAmt - 1 DOWNTO 0
DO
BIT[Base, i] BIT[inBits, i - ShiftAmt + OperandSize];
OD;
Set SF, ZF, PF (r/m);
(* SF, ZF, PF are set according to the value of the result *)
AF UNDEFINED;
FI;
FI;
[Back: Description]
[Next: Flags Affected]