前言:学习X86指令体系下的移位指令
移位指令
移位指令都有两种操作数,OPD是指定的被移位的操作数,可以是寄存器或存储单元。OPS数表示移位位数,该操作数为1时,表示移动1位;当移位位数大于1时,则OPS为CL寄存器值
一般移位指令
移位指令是将操作数向左或向右移动一位或者多位,分成逻辑移位和算数移位
- SAL/SHL OPD,OPS ;算数/逻辑左移,操作数左移,最低位补0,最高位进CF
- SAR OPD,OPS ;算数右移,操作数右移,最高位不变,最低位进CF
- SHR OPD,OPS ;逻辑右移,操作数右移,最高位补0,最低位进CF
对标志位的影响:对AF无定义。CF为移位后的值确定,并根据移位后的结果设置SF、ZF、PF;当移动1位时,移位后如果符号位发生改变,则OF = 1,符号位不发生变化,则OF = 0,当移位次数大于1时,OF不确定。左移做倍增运算,右移倍减运算。
循环移位指令
循环移位指令时将操作数从一端移出的位返回到另一端形成循环,分成不带进位或带进位,以及左移或者右移操作。
指令格式:
- ROL OPD,OPS ;不带进位循环左移
- ROR OPD,OPS ;不带进位循环右移
- RCL OPD,OPS ;带进位循环左移
- RCR OPD,OPS ;带进位循环右移