在汇编中是否有比下面示例中的更快的除以 2 的方法(带符号)?
...
mov ecx, 2
idiv ecx
push eax #push the result
...
当然:
sar eax, 1
操作码的sar
不同之处在于shr
最高有效(符号)位保留在 中sar
,并且在 中设置为 0 shr
。Wikipedia 上的Arithmetic shift页面在一般情况下显示了有关此操作的更多详细信息。
请注意,在 2 的补码机器(x86 是)上,这实际上计算floor(eax / 2)
. 特别是,这意味着对于整数x:
后一个结果给出了可能出乎意料的结果。例如,-3 sar 1 的结果是 -2,而不是 -1。另一方面,3 sar 1 结果为 1。