我似乎无法区分装配中的进位标志、辅助标志和溢出标志。我目前正在学校学习,老师没有详细说明。请帮助我理解,我将需要它进行考试。我会很感激的!!从我现在似乎知道的是,当您尝试时使用进位标志,例如,当您只有 8 位数据时使用 255+9,辅助标志是相同的,但仅用于最后 4 位?当二进制数有 7 位并且符号使用 8(最左边)时使用溢出???
2 回答
携带标志
在二进制/整数数学中打开进位标志的规则有两个:
如果两个数字相加导致添加的最高有效(最左边)位进位,则设置进位标志。1111 + 0001 = 0000(进位标志打开)
如果两个数字的减法需要借位到减去的最高有效位(最左边),则也设置进位(借位)标志。0000 - 0001 = 1111(进位标志打开)否则,进位标志关闭(零)。
- 0111 + 0001 = 1000(进位标志关闭[零])
- 1000 - 0001 = 0111(进位标志关闭 [零])
在无符号算术中,观察进位标志以检测错误。
在有符号算术中,进位标志告诉你什么有趣的东西。
溢出标志
在二进制/整数数学中打开溢出标志的规则有两个:
如果符号位关闭的两个数字之和产生符号位打开的结果数,则打开“溢出”标志。0100 + 0100 = 1000(溢出标志开启)
如果符号位打开的两个数字之和产生符号位关闭的结果数,则打开“溢出”标志。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 位有符号数字的范围。
您可以在 wikipedia 上阅读有关标志的更多信息