假设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为什么?
答案 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,这将导致结果中没有进位。