x86硬件如何检测并设置溢出寄存器标志

时间:2017-08-24 05:04:11

标签: assembly x86 masm

我正在学习汇编编程,请阅读“x86处理器第7版的汇编语言”一书。

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

enter image description here

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

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

  2. 1 XOR 0产生OF = 1

  3. 关于第2点的其他问题:我知道XOR的工作原理,但我不确定1中的01 XOR 0指的是哪一位。

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

2 个答案:

答案 0 :(得分:2)

它表示通过执行最高位来进位到最高位,执行已经给出(1,在它自己的方框中),并且进位显然为零。为了使它更加明显,最高位的进位是底部7位的执行:

carry7

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

答案 1 :(得分:1)

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

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

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

"随身携带"从所有先前位的总和生成(最后7位,因为操作数具有8位)。如果我们继续添加两个操作数的前七位,则第8位没有输入进位,因此其为0
最后,
执行最高位= 1
进入最高位= 0
1 XOR 0 = 1