汇编快速除以2

发布于 2024-08-17 05:10:04 字数 118 浏览 4 评论 0原文

在汇编中是否有比下面示例中的方法更快的带符号除以 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

鹿! 2024-08-24 05:10:04

当然:

sar eax, 1

sar 操作码与 shr​​ 的不同之处在于,最高有效(符号)位保留在 sar 中,并且在shr​​。维基百科上的算术移位页面在一般上下文中显示了有关此操作的更多详细信息。

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

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

后一个结果给出的结果可能是意外的。例如,-3 sar 1 结果为 -2,而不是 -1。另一方面,3 sar 1 结果为 1。

Sure:

sar eax, 1

The sar opcode differs from shr in that the most significant (sign) bit is preserved in sar, and it is set to 0 in shr. 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:

  • for x = 0, the result is 0
  • for x > 0, the result is floor(x / 2)
  • for x < 0, the result is also floor(x / 2), or -ceil(-x / 2)

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文