汇编指令中的移位操作分为算术移位和逻辑移位
一般在进行左移操作的时候,算术移位和逻辑移位的处理过程都比较简单:移除左边的最高位,最低位补零
但是在进行右移操作的时候,算术移位移除右边的数字然后左边的最高位进行符号扩展,不过逻辑移位就是补零,则个需要注意一点。
对于需要进行左移和右移的操作,一般都是需要指定移动位数M,如果M=1则可以直接以立即数给出,如果移位超过1则需要把移位放在CL中。
移位操作主要分为如下几个指令:
SAL OPRD,M 算术左移
SHL OPRD,M 逻辑左移
SAR OPRD,M 算术右移
SHR OPRD,M 逻辑右移
循环移位没有符号位的扩展等性质
ROL OPRD,M 循环左移<如果操作数为Nbit位,则移动N次后可以还原>
ROR OPRD,M 循环右移
RCL OPRD,M 带进位的循环左移<CF作为循环移动的一部分,需要移动N+1次才可以复位>
RCR OPRD,M 带进位的循环右移
一般移位操作都是和逻辑运算结合进行操作数的结合与分解运算
右移操作一般是把最高位移动到CF中
带进位的循环移位操作也是对CF进行了操作,对其他标志位的影响根据相关性质来决定。