【问题标题】:x86 how the hardware detects and set overflow register flagx86 硬件如何检测和设置溢出寄存器标志
【发布时间】:2017-08-24 05:04:10
【问题描述】:

我目前正在按照“x86 处理器第 7 版的汇编语言”一书学习汇编编程。

在书中,作者试图解释overflow register flag是如何设置的

本段中有两句话我不确定。

  1. 执行最高位位置的值与结果的高位进位异或

  2. 1 XOR 0 产生 OF = 1

关于第 2 点的附加问题:我知道XOR 的工作原理,但我不确定1 XOR 0 中的10 指的是哪一位。

这实际上是如何工作的?我对作者使用的措辞感到非常困惑。

【问题讨论】:

标签: assembly x86 masm


【解决方案1】:

它说最高位的进位与最高位的进位进行异或,进位已经给出(1,在它自己的框中),并且进位很明显为零。更明显的是,最高位的进位是低 7 位的进位:

由于第一个加数为零,很明显不能有进位。在原始问题中,这意味着最高位没有进位。

【讨论】:

    【解决方案2】:

    两个操作数是
    第一个操作数:10000000 和
    第二个操作数:11111110
    -->第一个操作数的最高位是1(最左边)
    -->第二个操作数的最高位为1(最左边)

    现在,如果我们添加这两个位
    1+1 = 0 进位 1(二进制加法)
    因此,我们得到 0 作为总和,1 作为进位(从最高位进位)。

    现在,让我们找到“进位到最高位(第 8 位)”。

    “进位”是从所有先前位的总和生成的(最后 7 位,因为操作数有 8 位)。如果我们继续将两个操作数的前 7 位相加,则第 8 位没有进位,所以它是 0。

    最后,
    执行最高位 = 1
    进位最高位 = 0
    1 异或 0 = 1

    【讨论】:

      猜你喜欢
      • 2018-01-31
      • 1970-01-01
      • 2014-07-20
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多