这章节学习前需要回顾之前的标志寄存器的内容:
汇编学习之《标志寄存器》
算数移位指令
SAL (Shift Arithmetic Left)算数移位指令 :
左移一次,最低位用0补位,最高位放入EFL标志寄存器的CF位(进位标志)
OllyDbg查看执行查看
通过上面我可以看到,我们设置MOV EAX, 80000001后, 其实32位最高位就是1,最低位也是1,
当我们执行SAL EAX 1语句后, 最高位放入二零EFL标志寄存器的CF位,通过OD也可以看到C位是1,同时最低位1向左移动1位后,十六进制的结果就是2;
我们输入的SAL 算数左移,但是OD里面变成了SHL,这里是因为算数左移和逻辑左移是一样的。
SAR((Shift Arithmetic Left))算数右移指令
右移一次,最高位不变,然后向右移动,最低位移入EFL 标志寄存器的CF位中
备注: 无论左移还是右移,是将对应的最高或最低位放入到CF中,也就是说放入前是0,CF是1,放入后CF就是0,反之亦然。
逻辑移位指令
SHL(shift left)逻辑左移
shl 逻辑左移和 sal 算数左移指令是一样的,这里就不重复说明了。
SHR(shift right)逻辑右移
右移一次, 最高位补0,最低位送入CF标志位, 如图:
上面SAR,SHR的图中可以清晰看到两个的区别就是最高位要不要保持不变。 移动方式都是对的。
上一篇:汇编学习之《运算和逻辑指令》
下一篇: 汇编学习之《test, cmp 指令》