题
假设ax = fffe和bx = 1234
现在,如果我们写 cmp ax,bx
(BX将从AX中减去BX,并且将更新适当的平板)现在,AX和BX中的数字二进制表示
AX = 1111 1111 1111 1110
BX= 0001 0010 0011 0100
由于BX将从AX中减去BX,因此我们必须否定BX(结果= AX+(-bx)),因此否定的BX(2的BX补充)由。
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为什么?
解决方案
在这里找到一个链接:http://oopweb.com/assembly/documents/artofassembly/volume/chapter_6/ch06-2.html
正如我所期望的。仅当需要“借用”时,设置了进位标志。减法时,您在执行“减去”之前设置了随身携带的标志,而新的随身携带标志告诉您是否必须借用。您的示例省略了位于位17中预设携带标志的1添加1,这将在结果中不会携带。
其他提示
当按下减法时,将随身携带的标志视为借用位。它是初始化为1的,因此操作是 a−b−C
, , IE, a + not(b) + C
代替 a + not(b) + 1
如您所描述的。换句话说,该进位是倒数的,因此可以用于进行多精确的减法。
不隶属于 StackOverflow