SAL instruction shifts the bits in the operand specified by op1 to its left by the count specified in op2. As a bit is shifted out of LSB position a 0 is kept in LSB position. CF will contain MSB bit.
Syntax – SAL/AHL destination, count
;CF = 0, BX = 11100101 11010011
SAL BX, 1 ;Shift BX register contents by 1 bit position towards left
;CF = 1, BX = 11001011 1010011
SHR Instruction – Shift operand bits right, put zero in MSB
SHR instruction shifts the bits in op1 to right by the number of times specified by op2 .
Example:( 1 )
SHR BP, 1 ; Shift word in BP by 1 bit position to right and 0 is kept to MSB
Example:( 2 )
MOV CL, 03H ;Load desired number of shifts into CL
SHR BYTE PYR[BX] ;Shift bytes in DS at offset BX and rotate 3 bits to right and keep 3 0’s in MSB
Example:( 3 )
;SI = 10010011 10101101 , CF = 0
SHR SI, 1 ; Result: SI = 01001001 11010110 and CF = 1, OF = 1, SF = 0, ZF = 0
SAR Instruction – Shift operand bits right, new MAB = old MSB
SAR instruction shifts the bits in the operand specified by op1 towards right by count specified in op2.As bit is shifted out a copy of old MSB is taken in MSB. MSB position and LSB is shifted to CF.
Syntax – SAR destination, count.
Example: ( 1 )
; AL = 00011101 = +29 decimal, CF = 0
SAR AL, 1 ;Shift signed byte in AL towards right ( divide by 2 )
;AL = 00001110 = + 14 decimal, CF = 1
Example: ( 2 )
;BH = 11110011 = – 13 decimal, CF = 1
SAR BH, 1 ;Shifted signed byte in BH to right and BH = 11111001 = – 7 decimal, CF = 1.