這章節學習前需要回顧之前的標志寄存器的內容:
匯編學習之《標志寄存器》
算數移位指令
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 指令》