gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:49:59 26 4
gpt4 key购买 nike

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

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

最佳答案

如果您将这些值解释为无符号数,则只有没有溢出 - 如果您将 0x84 解释为按照签名,肯定有溢出:

  • 0x84 解释为有符号的 8 位值是 -124
  • 0x30 解释为有符号的 8 位值是 48
  • -124 - 48 = -172

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

    来自 Intel 64 and IA-32 Architectures Software Developer’s Manual , CMP 第 2 卷:

    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.



    对于 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.

    关于x86 - 为什么 cmp 0x84,0x30 会触发溢出标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7261535/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com