在cmp时设置CF.

时间:2017-08-11 09:04:39

标签: assembly x86

当我们比较两个数字并且一个数字小于另一个数字时,设置标志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标志?没有携带,或者我错了。

1 个答案:

答案 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,它代表借用