Assembly 装配快速除以2
在汇编中,有没有比下面示例中的方法更快的带符号除以2的方法Assembly 装配快速除以2,assembly,division,Assembly,Division,在汇编中,有没有比下面示例中的方法更快的带符号除以2的方法 ... mov ecx, 2 idiv ecx push eax #push the result ... 当然可以: sar操作码与shr的不同之处在于,最高有效位(符号)保留在sar中,并在shr中设置为0。Wikipedia上的页面在一般上下文中显示了有关此操作的更多详细信息 请注意,在2的补码机(x86)上,这实际上计算下限(eax/2)。特别是,这意味着对于整数x: 对于x=0,结果为0 对于x>0,结果是地板(x/2)
...
mov ecx, 2
idiv ecx
push eax #push the result
...
当然可以:
sar
操作码与shr
的不同之处在于,最高有效位(符号)保留在sar
中,并在shr
中设置为0。Wikipedia上的页面在一般上下文中显示了有关此操作的更多详细信息
请注意,在2的补码机(x86)上,这实际上计算下限(eax/2)
。特别是,这意味着对于整数x:
- 对于x=0,结果为0
- 对于x>0,结果是地板(x/2)
- 对于x<0,结果也是floor(x/2)或-ceil(-x/2)
后一个结果给出的结果可能出乎意料。例如,-3SAR 1导致-2,而不是-1。另一方面,3 sar 1的结果是1。准确地说。正如格雷格指出的,向右移动1等于除以2:-)
sar eax, 1