CDQ和SAR指令
CDQ 是一个让很多初学者感到困惑的指令。它大多出现在除法运算之前。它实际的作用只是把EDX的所有位都设成EAX最高位的值。也就是说,当EAX < 0x80000000,EDX为0x00000000;当EAX >= 0x80000000, EDX 则为0xFFFFFFFF。
SAR,算术右移指令,将操作数右移指定的位数,但左边的符号位保持不变,移出的最低位(最后一个位)进入CF标志位。
例如0000 0110用这个指令移动2位后结果为:0000 0001,最高2位为原来的最高位的0并且CF=1。
例如1000 0101用这个指令移动2位后结果为:1110 0001,最高2位为原来的最高位的1且CF=0。
SAR,算术右移指令,将操作数右移指定的位数,但左边的符号位保持不变,移出的最低位(最后一个位)进入CF标志位。
例如0000 0110用这个指令移动2位后结果为:0000 0001,最高2位为原来的最高位的0并且CF=1。
例如1000 0101用这个指令移动2位后结果为:1110 0001,最高2位为原来的最高位的1且CF=0。