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