汇编语言中SAR和SHR指令的区别
1、方向不同
通过gdb动态调试得到每次循环的值进行比对,才发现出现错误的具体原因。sar在符号位为1时,右移时填充1,符号位为0时填充0。而python默认的右移运算为逻辑右移运算,右移时默认填充0,与符号位无关。
2、作用不同
汇编语言中SAR和SHR指令都是右移指令,SAR是算数右移指令(shift arithmetic right),而SHR是逻辑右移指令(shift logical right)。SAR右移时保留操作数的符号,即用符号位来补足,而SHR右移时总是用0来补足。例如10000000算数右移一位是11000000,而逻辑右移一位是01000000。
3、顺序不同
SAR是算术右移,比较特殊。他的最高位一直是不变的。如1000 0000算术右移7位后就成了1111 1111。SAR右移的时候,最高位不变,最低位移入CF。
参考资料来源:百度百科—汇编语言
1、相同点:汇编语言中SAR和SHR指令都是右移指令,SAR是算数右移指令(shift arithmetic right),而SHR是逻辑右移指令(shift logical right)。
2、两者的在于SAR右移时保留操作数的符号,即用符号位来补足,而SHR右移时总是用0来补足。
例如10000000算数右移一位是11000000,而逻辑右移一位是01000000。
3、用法不同:
SAR功能是将操作数右移,符号位保持不变,可用于有符号数除法;
SHR功能是将操作数右移,原最低位移入进位标志CF,原最高位补0;可用于无符号数除法.
例如,AL=1110 1110,BL=0110 1100,CL=2
SHR AL,CL后
AL=0011 1011 SHR最高位用0填补
SAR AL,CL
AL=1111 1011 SAR最高位不变
SAR BL,CL
BL=0011 1011 SAR最高位不变
扩展资料:
逻辑右移SHR
SHR指令影响标志位CF和OF。如果移位次数为1,且移位后符号位的值发生变化,则OF=1,否则OF=0.如果移位次数不为1,则OF不确定。
【格式】:SHR OPR.CNT。其中OPR用除立即数外的任何寻址方式。移位次数由CNT决定,在8086中可以是1或CL,CNT为1时只移一位。
如:MOV AX,62H
SHR AX,1
当移位数大于1时,需要先将移位数放进CL中然后再进行移位操作。可以使用8位立即数指定范围从1到31的移位次数。
如MOV AL,62H
MOV CL,4
SHR AL,CL
所执行简易理解如下:
01100010B因为是右移操作,也称为右移补0操作,将二进制位逐次在右边去掉一位然后在左边添个0,移多少位重复上述操作多少次。4次移位后结果为00000110B,即06H.
【应用】逻辑右移一位的操作,相当于将寄存器或存储器的无符号数除以2,因此同样可以用SHR指令完成除以某些常数的运算。而且移位指令通常比除法指令时运行速度要快得多。
参考资料:
例如,SAR AL,1 ;; 作用是将DX中的数右移1位,相当于除以2;
------------------------------
SHR是逻辑右移指令,功能是将操作数右移,原最低位移入进位标志CF,原最高位补0;
可用于无符号数除法.