sal
and shl
are synonymous, they have identical opcodes.
As sar
does signed division by 2 rounding numbers towards negative infinity (-Inf), and shr
does unsigned division by 2, probably engineers at Intel have decided to incorporate also both sal
and shl
even if they are synonymous.
Here's an example what shr
and sar
do:
mov al,0b10001000 ; 0b10001000 = 136d = -120d (2's complement)
shr al,1 ; 0b01000100 = 68d = 68d (2's complement)
mov al,0b10001000 ; 0b10001000 = 136d = -120d (2's complement)
sar al,1 ; 0b11000100 = 196d = -60d (2's complement)
So shr
fills with zeroes, and sar
fills with the sign bit.
shr
is for unsigned divisions or bit shifts in general, and sar
for signed divisions.