当我们比较两个数字并且一个数字小于另一个数字时,设置标志CF
:
mov eax,1
cmp eax,2
jb truWay
以二进制形式:
1=00000001
2=00000010=11111101+1(add. code)=11111110и
00000001+11111110=11111111(no carry)
为什么指令cmp eax,2
设置CF
标志?没有携带,或者我错了。
答案 0 :(得分:1)
确实有借用。如果借出,CF
指令会设置cmp
。
您的指示cmp
执行以下减法:
1 = 0001
- 2 = 0010
--------------
1111
对于第一个最右边的列,没有什么特别的:1 - 0 = 1
。
对于第二个最右边的列,有一个借用(即:1
&#34;借用&#34;来自下一列之一)。需要借用,因为0 < 1
。然后,此列的结果为10 - 1 = 1
。
但请注意,对于第一个操作数,左侧没有一个列可以借用1
,因此会出现借出:借用即将发布最重要的位,实际设置CF
。
您的减法操作实际上就像设置CF
(即:&#34;借用&#34;或&#34;获取&#34; a 1
作为第一个操作数的MSB)并执行以下减法:
10001
- 0010
-------
1111
请注意,第一个操作数在其真实MSB的左侧有一个1
。之前没有1
,它代表借用。