在装配中携带标志、辅助标志和溢出标志



我似乎无法区分程序集中的携带标志、辅助标志和溢出标志。我目前正在学校学习它,老师没有详细说明。请帮助我理解,我将需要它进行考试。我将不胜感激!!从我现在似乎知道的是,当你尝试时会使用 Carry Flag,比如说,当你只有 8 位数据时,使用 255+9,辅助标志是相同的,但只用于最后 4 位??当您有 7 位用于二进制数并且 8(最左边(用于符号时,将使用溢出???

携带标志

在二进制/整数数学中打开进位标志的规则有两个:

  1. 如果两个数字的相加导致进位,则设置进位标志在添加的最重要(最左边(位中。1111 + 0001 = 0000(进位标志已打开(

  2. 如果两个数字的减法,也设置进位(借用(标志需要借用减去的最有效(最左边(位。0000 - 0001 = 1111(进位标志已打开(否则,携带标志将关闭(零(。

    • 0111 + 0001 = 1000(进位标志关闭 [零](
    • 1000 - 0001 = 0111(进位标志关闭 [零](

在无符号算术中,观察进位标志以检测错误。

在有符号算术中,进位标志不会告诉您任何有趣的信息。

溢出标志

二进制/整数数学中打开溢出标志的规则有两个:

  1. 如果两个带符号的数字之和位关闭,则产生一个结果编号打开符号位后,"溢出"标志处于打开状态。0100 + 0100 = 1000(溢出标志已打开(

  2. 如果两个带有符号位的数字之和产生一个结果编号当符号位关闭时,"溢出"标志被打开。1000 + 1000 = 0000(溢出标志已打开(

否则,"溢出"标志将关闭

  • 0100 + 0001 = 0101(溢出标志已关闭(
  • 0110 + 1001 = 1111(溢出标志关闭(
  • 1000 + 0001 = 1001(溢出标志关闭(
  • 1100 + 1100 = 1000(溢出标志已关闭(

请注意,您只需要查看三个符号位(最左边(数字来决定是打开还是关闭溢出标志。

如果您正在执行二进制补码(有符号(算术,请在意味着答案是错误的 - 您添加了两个正数并得到了一个负数,或者您添加了两个负数并得到了一个正数。

如果您正在执行无符号算术,则溢出标志没有任何意义并且应该被忽略。

有关更多说明,请参阅:http://teaching.idallen.com/dat2343/10f/notes/040_overflow.txt

携带标志是在以下情况下设置的标志:

a( 添加了两个无符号数字,结果大于保存它的寄存器的"容量"。例如:我们要添加两个 8 位数字并将结果保存在 8 位寄存器中。在您的示例中:255 + 9 = 264,这比 8 位寄存器可以存储的更多。因此,值"8"将保存在那里(264和255 = 8(,并将设置CF标志。

b( 减去两个无符号数字,我们从较小的数字中减去较大的数字。例如:1-2 将给你 255 的结果,并将设置 CF 标志。

辅助标志用作 CF,但在使用 BCD 时。因此,当我们在 BCD 计算中打开溢出或下溢时,将设置 AF。 例如:考虑 8 位 ALU 单元,当有从第 3 位到第 4 位的进位时,即从较低的半字节到较高的半字节进位时,将设置辅助标志。(维基链接(

溢出标志用作 CF,但当我们处理有符号数字时。例如,我们要添加两个 8 位有符号数字:127 + 2。结果是 129,但对于 8 位有符号数字来说太多了,所以将设置 OF。当结果太小时类似,例如 -128 - 1 = -129,这超出了 8 位有符号数字的范围。

您可以在维基百科上阅读有关标志的更多信息

最新更新