汇编指令:SAL SAR SHL SHR ROL ROR RCL RCR

tetsai
原创声明
本文由tetsai原创,转载请注明来源
命令记忆方法(对应颜色进行记忆):
非循环算术移位 | 非循环逻辑移位 | 循环不进位移位 | 循环带进位移位 | |
左 | SAL | SHL | ROL | RCL |
右 | SAR | SHR | ROR | RCR |
值得注意的是,SAL和SHL在运算结果上是完全一样的。
非循环
意味着二进制位移之后,移出的位不再参与补位,分两种情况
算术
保留最高位,而且右位移的时候用最高位补
例如 110001001
右移为->111000100->111100010->111110001...
如果左移就用0补,和下面的是一样的
逻辑
单纯左移,和右移,与C语言的<< 和>>效果一样
例如 110001001
右移为->011000100->110001000->100010000...
左移为->100010010->000100100->001001000...
循环
移出的一位影响或将要影响接下来要替补的位,我们称这个是循环
不进位
意味着单纯的只是把移出的一位丢到缺的那一位
如果是左移,就把最左边位扔到最右边
如果是右移,就把最右边位扔到最左边
进位
引入标志寄存器CF,移出的一位时,缺的空由CF补,然后把移出的一位赋给CF
例如 110001001 ,设CF=0
右移为->01000100(因为一开始CF=0,所以最高位变成了0,因为最低位为1,所以然后CF=1了)->10100010(CF=0)->01010001(CF=0)->00101000(CF=1)...