为什么这里设置了进位标志?

时间:2014-09-17 05:24:47

标签: assembly cmp carryflag

我想知道是否有人可以通过这些标志给我一些有很多练习的网站,特别是进位和溢出标志。

无论如何我的问题是这个。

我正在看讲义,我看到了5位比较

Cmp $ 12,$ 6变为

00110 - 01100,可以改为

 00110
+10100
-------
 11010

进位标志CF = 1且溢出标志OF = 0

Cmp $ -6,$ -12是10100 - 11010,后者变为

 10100
+00110
-------
 11010

CF = 1,溢出标志OF = 0

我相信我理解溢出标志被设置为0,因为这些小数减法(或添加,取决于你如何看待它)导致小数字从未超过2 ^ 5数字范围。

携带怎么样?我认为这意味着最后一位从最后一列/位继承了1,然后这是一个进位标志对吗?

我的意思是它是否像

  1 (carried over from last column) 
  1100......(random binary for the rest ...) 
+ 0100......
-------------

如何设置进位标志? 1来自左列第2位的1 + 1。

在我的两个例子中,这些不在最左边一列的顶部。

发生了什么?

感谢。

1 个答案:

答案 0 :(得分:0)

如何在内部执行减法并不重要,但请注意,某些处理器包含实际的减法硬件。问题是减法意味着,减去,而不是否定第二个数字并添加。对于X86,进位标志是"借用"指标,将数字视为无符号数字,因此6 - 12会导致"借用"。溢出标志将数字视为已签名,并且6 - 12 = -6,因此没有溢出。

相关问题