0%

X86指令体系下的移位指令

前言:学习X86指令体系下的移位指令

移位指令

移位指令都有两种操作数,OPD是指定的被移位的操作数,可以是寄存器或存储单元。OPS数表示移位位数,该操作数为1时,表示移动1位;当移位位数大于1时,则OPS为CL寄存器值

一般移位指令

移位指令是将操作数向左或向右移动一位或者多位,分成逻辑移位和算数移位

  1. SAL/SHL OPD,OPS ;算数/逻辑左移,操作数左移,最低位补0,最高位进CF
  2. SAR OPD,OPS ;算数右移,操作数右移,最高位不变,最低位进CF
  3. SHR OPD,OPS ;逻辑右移,操作数右移,最高位补0,最低位进CF

对标志位的影响:对AF无定义。CF为移位后的值确定,并根据移位后的结果设置SF、ZF、PF;当移动1位时,移位后如果符号位发生改变,则OF = 1,符号位不发生变化,则OF = 0,当移位次数大于1时,OF不确定。左移做倍增运算,右移倍减运算。

image-20240421194620811

循环移位指令

循环移位指令时将操作数从一端移出的位返回到另一端形成循环,分成不带进位或带进位,以及左移或者右移操作。

指令格式:

  1. ROL OPD,OPS ;不带进位循环左移
  2. ROR OPD,OPS ;不带进位循环右移
  3. RCL OPD,OPS ;带进位循环左移
  4. RCR OPD,OPS ;带进位循环右移

image-20240421194628787