移位指令分为逻辑移位指令和算术移位指令
- shl 与 shr 属于逻辑移位指令
shl逻辑左移指令
- 将寄存器或内存单元的数据左移
- 最低位用 0 补充
- 最高位进入 CF
例子:
mov ax,8fh ;mov ax,1000 1111b
shl ax,1 ;将ax左移一位
执行后 (ax) = 0001 1110b ;1eh
CF = 1
如果我们需要移动的位数大于1时,需要将移动位数存入 cl
例子:
比如说我们要移动 4 位
mov cl,4
mov ax,9fh ;mov ax,1000 1111b
shl ax,cl ;左移位数为 cl 里的数据
执行后 (ax) = 1111 0000b ;f0h
CF = 1
shr逻辑右移指令
- 将寄存器或内存单元的数据右移
- 最低位用 0 补充
- 最低位进入 CF
- sal 与 sar 属于算术移位指令
sal 算术左移指令
- 功能与shl相同
sar 算术右移指令
- 基本与shr相同
- 与shr补 0 不同,sar补位时最高位不变