为什么cmp 0x84,0x30会触发溢出标志?

发布于 2024-12-02 03:14:35 字数 159 浏览 3 评论 0原文

我已经玩了一段时间的汇编并查看了一些代码。 其中 AL 首先设置为 0x84,然后使用 cmp AL, 0x30。 该指令然后触发溢出标志。

根据我的阅读,CMP 应该从第一个数字中减去第二个数字,然后设置标志,在这种情况下,它应该是 0x84-0x30,结果是 0x54 并且没有溢出。

I've been playing with assembly for a while and looking at some code.
in which AL is first set to 0x84 then cmp AL, 0x30 is used.
This instruction then triggers the Overflow flag.

From what I read CMP is supposed to subtract the second number from the first then set the flags, in that case it should be 0x84-0x30 the result is 0x54 and there is no overflow.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(1

暖风昔人 2024-12-09 03:14:35

只有当您将这些值解释为无符号数字时,才不会发生溢出 - 如果您将 0x84 解释为有符号数字,则肯定会发生溢出:

  1. 0x84 解释为有符号 8 位值是 -124
  2. 0x30 解释为有符号 8 位值是 48
  3. -124 - 48 = -172

-172 超出了有符号 8 位值的范围(-128 到+127) 这就是设置 OF 标志的原因。您应该检查CF,它指示无符号溢出。

来自 Intel 64 和 IA-32 CMP 架构软件开发人员手册,第 2 卷:

比较的方法是从第一个操作数中减去第二个操作数,然后以与 SUB 指令相同的方式设置状态标志。

对于SUB:

SUB 指令执行整数减法。它评估有符号和无符号整数操作数的结果,并设置 OF 和 CF 标志以分别指示有符号或无符号结果中的溢出。 SF标志表示签名结果的符号。

There's only no overflow if you're interpret those values as unsigned numbers - if you interpret your 0x84 as signed, there's definitely overflow:

  1. 0x84 interpreted as a signed 8-bit value is -124
  2. 0x30 interpreted as a signed 8-bit value is 48
  3. -124 - 48 = -172

-172 is outside of the range of a signed 8-bit value (-128 to +127) and that's why the OF flag gets set. You should check CF which indicates unsigned overflow.

From the Intel 64 and IA-32 Architectures Software Developer’s Manual, Volume 2 for CMP:

The comparison is performed by subtracting the second operand from the first operand and then setting the status flags in the same manner as the SUB instruction.

and for SUB:

The SUB instruction performs integer subtraction. It evaluates the result for both signed and unsigned integer operands and sets the OF and CF flags to indicate an overflow in the signed or unsigned result, respectively. The SF flag indicates the sign of the signed result.

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