装配快速划分2

时间:2010-01-10 10:17:34

标签: assembly division

在汇编中是否有更快的方式除以2,带符号,而不是下例中的符号?

...
mov ecx, 2
idiv ecx
push eax #push the result
...

1 个答案:

答案 0 :(得分:21)

不确定

sar eax, 1

sar操作码与shr的不同之处在于,最重要(符号)位保留在sar中,并且在shr中设置为0。维基百科上的Arithmetic shift页面在一般情况下显示了有关此操作的更多详细信息。

请注意,在2的补码机器(x86是)上,这实际上计算floor(eax / 2)。特别是,这意味着对于整数 x

  • 对于 x = 0 ,结果为0
  • 代表 x> 0 ,结果为 floor(x / 2)
  • 代表 x< 0 ,结果也是 floor(x / 2) -ceil(-x / 2)

后一种结果给出了可能出乎意料的结果。例如,-3 sar 1导致-2,而不是-1。另一方面,3 sar 1导致1。