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

我想知道是否有人可以给我一些这些标志的练习,特别是携带和溢出标志。

无论如何,我的问题是这样的。

我正在看讲义,我看到了一个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来自左列第二位的1 + 1。

在我的两个例子中,这些在最左边的列上不是1。

这是怎么回事?

谢谢。


内部执行减法操作无关紧要,但请注意,某些处理器包含实际减法硬件。 问题是减法意味着,减去,而不是否定第二个数字并添加。 对于X86来说,进位标志是一个“借位”指示符,将这些数字视为无符号数字,因此6-12会产生“借位”。 溢出标志将数字视为有符号数,并且6 - 12 = -6,所以没有溢出。

链接地址: http://www.djcxy.com/p/72553.html

上一篇: Why was the carry flag set here?

下一篇: Are there small registers in ARM assembly?