移位指令

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  

作用:

  1. 逻辑左移/右移指令只是它们的移位方向不同
  2. 移位后空出的位都补0
  3. 受影响的标志位: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

作用:

  1. SAL把目的操作数的低位向高位移,空出的低位补0

    • 效果和 shl一样,可能被阉割
  2. SAR把目的操作数的高位向低位移,空出的高位用最高位(符号位)填补
  3. 受影响的标志位: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  

作用:

  1. 循环左移/右移指令只是移位方向不同
  2. 它们移出的位不仅要进入CF,而且还要填补空出的位
  3. 受影响的标志位: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
作用:

  1. 带进位的循环左移/右移指令只有移位的方向不同
  2. 它们都用原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
Last modification:December 17, 2018
如果觉得我的文章对你有用,请随意赞赏