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

X86 为什么cmp 0x84,0x30会触发溢出标志?,x86,assembly,X86,Assembly,我玩汇编已经有一段时间了,我在看一些代码。 其中,AL首先设置为0x84,然后使用cmp AL,0x30。 然后,此指令触发溢出标志 从我读到的内容来看,CMP应该从第一个数字中减去第二个数字,然后设置标志,在这种情况下,它应该是0x84-0x30,结果是0x54,并且没有溢出。如果您将这些值解释为无符号数字,则没有溢出-如果您将0x84解释为有符号,肯定有溢出: 解释为有符号8位值的0x84为-124 解释为有符号8位值的0x30为48 -124-48=-172 -172超出有符号8位值(-1

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


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

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

  • 解释为有符号8位值的0x84为-124
  • 解释为有符号8位值的0x30为48
  • -124-48=-172
  • -172超出有符号8位值(-128到+127)的范围,这就是设置
    of
    标志的原因。您应该选中表示无符号溢出的
    CF

    从CMP的第2卷:

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

    以及

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


    卡尔是对的。x86溢出标志实际上意味着有符号溢出。