Assembly 携带旗帜问题!
假设AX=FFFE和BX=1234Assembly 携带旗帜问题!,assembly,assemblyinfo,Assembly,Assemblyinfo,假设AX=FFFE和BX=1234 现在如果我们写cmpax,bx (bx将从ax中减去,相应的鞭毛将更新) 现在,ax和bx中数字的二进制表示形式为 AX = 1111 1111 1111 1110 BX= 0001 0010 0011 0100 因为bx将从ax中减去,所以我们必须对bx求反(结果=ax+(-bx)) 所以被否定的bx(bx的2的补码)由给出。 BX= 1110 1101 1100 1
现在如果我们写
cmpax,bx
(bx将从ax中减去,相应的鞭毛将更新) 现在,ax和bx中数字的二进制表示形式为
AX = 1111 1111 1111 1110
BX= 0001 0010 0011 0100
因为bx将从ax中减去,所以我们必须对bx求反(结果=ax+(-bx)) 所以被否定的bx(bx的2的补码)由给出。
BX= 1110 1101 1100 1100
现在我们将ax和bx相加(因为减法是通过计算机中的加法实现的)现在您可以看到结果是17位,现在第17位应该进入进位flage,但是当我检查它时,进位标志是0,这是CF=0为什么?在执行减法时,将进位标志视为借用位。它被初始化为1,因此操作是
a−B−C
,即a+not(b)+C
而不是您所描述的a+not(b)+1
。换言之,进位在减法中是反向的,因此它可以用来进行多精度减法。在这里找到一个链接:
如我所料。只有在需要“借用”时才设置进位标志。在执行减法运算时,在执行“减法运算”之前设置进位标志,新的进位标志会告诉您是否必须借用。您的示例省略了在第17位中为预设进位标志添加1,这将导致结果中没有进位
AX= 1111 1111 1111 1110
BX= 1110 1101 1100 1100
------------------------------------
1 1110 1101 1100 1010