2

我在理解进位标志 (CF) 和溢出标志 (OF) 时遇到了一些麻烦。

以下是我正在处理的一些示例问题:

1.  1011 1111    2.  1111 0111    3.  0111 1110  -->   0111 1110
  + 1011 0111      + 1101 1101      - 1011 0000  --> + 0100 1111
  ___________      ___________      ___________      +         1
    0111 0110        1101 0100                       ___________
                                                       1100 1110
  1. 符号位的进位为 1,符号位的进位为 0,所以 OF = 1?
  2. 符号位的进位为 1,符号位的进位为 1,所以 OF = 0?
  3. 符号位的进位为0,符号位的进位为1,所以OF = 1?

我想我无法理解无符号溢出和适当的 CF 值。

4

1 回答 1

2

免责声明:我不是专家(甚至不是此级别代码的用户:))。

我相信进位标志对无符号数据有意义,溢出标志对有符号数据有意义。

两者都将始终生成,但由您决定是否考虑无符号值或二进制补码,因此取决于您注意哪个标志。

来自:http ://en.wikipedia.org/wiki/Overflow_flag

在内部,溢出标志通常由内部进出符号位的异或产生。由于符号位与被认为是无符号数的最高有效位相同,因此溢出标志是“无意义的”并且通常在添加或减去此类数字时被忽略。

符号位是最高有效位(最左边的一位)。

异或(XOR)是:

  • 如果两者都不是:0
  • 如果有: 1
  • 如果两者:0

对符号位的进位是当第 2 个最高有效位相加时,会产生一个要结转到下一列的值。

进位是在将最高有效位(符号位,如果数字是二进制补码)加在一起时是否必须进行进位。

对这两个值进行异或运算,在给定加法之后,您应该得到溢出标志的值。

于 2011-09-22T04:40:18.390 回答