汇编快速除以2
在汇编中是否有比下面示例中的方法更快的带符号除以 2 的方法?
...
mov ecx, 2
idiv ecx
push eax #push the result
...
Is there a faster way of dividing by 2, with sign, in assembly than the one in the example below?
...
mov ecx, 2
idiv ecx
push eax #push the result
...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
当然:
sar
操作码与shr
的不同之处在于,最高有效(符号)位保留在sar
中,并且在shr
。维基百科上的算术移位页面在一般上下文中显示了有关此操作的更多详细信息。请注意,在 2 的补码机器(即 x86)上,这实际上计算的是
floor(eax / 2)
。特别是,这意味着对于整数x:后一个结果给出的结果可能是意外的。例如,-3 sar 1 结果为 -2,而不是 -1。另一方面,3 sar 1 结果为 1。
Sure:
The
sar
opcode differs fromshr
in that the most significant (sign) bit is preserved insar
, and it is set to 0 inshr
. The Arithmetic shift page on Wikipedia shows much more detail about this operation in a general context.Note that on a 2's complement machine (which the x86 is) this actually calculates
floor(eax / 2)
. In particular, that means that for an integer x:The latter result gives results that may be unexpected. For example, -3 sar 1 results in -2, not -1. On the other hand, 3 sar 1 results in 1.