移位指令
1. SHL r/m ,1/cl 2. SHR r/m ,1/cl
3. SAL r/m ,1/cl 4. SAR r/m ,1/cl
5. ROL reg/mem,1/cl 6. ROR reg/mem,1/cl
7. RCL reg/mem,1/cl 8. RCR reg/mem,1/cl
- 如果
位移次数
是立即数
那么只能是1
- 位移次数可以放在
cl
中,不能放在其他寄存器中
逻辑移位指令
格式:
SHL/SHR Reg/Mem, CL/Imm
作用:
- 逻辑左移/右移指令只是它们的移位方向不同
- 移位后空出的位都补0
- 受影响的标志位:CF、OF、PF、SF和ZF(AF无定义)
运行:
mov ax,1
mov cx,2
shl ax,cl
结果:
AX=0004=(0000 0000 0000 0100)b
算术移位指令
格式:
SAL/SAR Reg/Mem, CL/Imm
作用:
SAL把目的操作数的低位向高位移,空出的低位补0
- 效果和
shl
一样,可能被阉割
- 效果和
- SAR把目的操作数的高位向低位移,空出的高位用最高位(符号位)填补
- 受影响的标志位:CF、OF、PF、SF和ZF(AF无定义)
mov ax,8000
mov cx,2
sar ax,cl
结果:
AX=E000=(1110 0000 0000 0000)b
循环移位指令
格式:
ROL/ROR Reg/Mem, CL/Imm
作用:
- 循环左移/右移指令只是移位方向不同
- 它们移出的位不仅要进入CF,而且还要填补空出的位
- 受影响的标志位:CF和OF
mov ax,fffe
mov cx,1
rol ax,cl
此时:
ax=1111 1111 1111 1110
cf=0
结果:
ax=FFFD=1111 1111 1111 1101
cf=1
带进位的循环移位指令
RCL/RCR Reg/Mem, CL/Imm
作用:
- 带进位的循环左移/右移指令只有移位的方向不同
- 它们都用原CF的值填补空出的位,移出的位再进入CF
1.受影响的标志位:CF和OF
mov ax,ffff
mov cx,1
rcr ax,cl
此时:
ax=111 1111 1111 1111
cf=0
结果:
ax=7FFF=0111 1111 1111 1111
cf=1