随身标志问题!

时间:2010-05-24 19:04:53

标签: assembly assemblyinfo

假设AX = FFFE且BX = 1234
现在,如果我们写cmp ax,bx
(bx将从ax减去,approprite flages将更新) 现在,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为什么?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

在此处找到链接: http://oopweb.com/Assembly/Documents/ArtOfAssembly/Volume/Chapter_6/CH06-2.html

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