2

假设现在 AX =FFFE 和 BX=1234
如果我们写cmp ax,bx
(bx 将从 ax 中减去并且适当的标志将被更新)现在 ax 和 bx 中数字的二进制表示由下式给出

    AX =    1111    1111    1111    1110
   BX=     0001    0010    0011    0100


因为 bx 将从 ax 中减去,所以我们必须否定 bx (因为 Result= ax+(-bx))所以否定的 bx (bx 的 2 的补码)由下式给出。

BX=    1110    1101    1100    1100

现在我们将 ax 和 bx 都相加(因为减法是通过计算机中的加法实现的)

    AX=   1111    1111    1111    1110
   BX=   1110    1101    1100    1100
    ------------------------------------
      1  1110    1101    1100    1010 

现在您可以看到结果是 17 位,现在第 17 位应该进入进位标志,但是当我检查它时,进位标志是 0,即 CF=0,为什么?

4

2 回答 2

1

执行减法时,将进位标志视为借位。它被初始化为 1 所以操作是a−b−C,即,a + not(b) + C而不是a + not(b) + 1你描述的。换句话说,对于减法,进位是反转的,所以它可以用来做多精度减法。

于 2010-05-24T19:18:39.077 回答
1

在这里找到一个链接:http: //oopweb.com/Assembly/Documents/ArtOfAssembly/Volume/Chapter_6/CH06-2.html

正如我所料。只有在需要“借位”时才设置进位标志。做减法时,你在做“减法”之前设置进位标志,新的进位标志告诉你是否必须借用。您的示例省略了为第 17 位中的预设进位标志添加 1,这将导致结果中没有进位。

于 2010-05-24T19:21:21.290 回答