我似乎无法区分装配中的进位标志,辅助标志和溢出标志。我目前正在学校学习,老师没有详细说明。请帮助我理解,我将需要它进行考试。我将非常感激!!从我现在似乎知道的是,当你尝试使用进位标志时,比方说,当你只有8位数据时,使用255 + 9,辅助标志是相同的,但只有最后4位?如果二进制数有7位且符号使用8(最左边),则使用溢出???
答案 0 :(得分:29)
在二进制/整数数学中打开进位标志的规则是两个:
如果添加两个数字导致进位,则设置进位标志 超出最重要(最左边)的位。 1111 + 0001 = 0000(进位标志已打开)
如果减去两个数字,也会设置进位(借位)标志 需要借用减去最重要(最左边)的位。 0000 - 0001 = 1111(进位标志已打开) 否则,进位标志关闭(零)。
在无符号算术中,观察进位标志以检测错误。
在签名算术中,进位标志告诉您没什么有趣的。
在二进制/整数数学中打开溢出标志的规则是两个:
如果符号位关闭的两个数字之和产生结果数 符号位打开时,“溢出”标志打开。 0100 + 0100 = 1000(溢出标志打开)
如果符号位打开的两个数字之和产生结果数 符号位关闭后,“溢出”标志打开。 1000 + 1000 = 0000(溢出标志已打开)
否则“溢出”标志关闭
请注意,您只需要查看三者的符号位(最左侧) 确定溢出标志是打开还是关闭的数字。
如果您正在进行二进制补码(带符号)算术,则会打开溢出标志 意味着答案是错误的 - 你添加了两个正数并得到了一个 否定,或者您添加了两个负数并获得了肯定。
如果您正在执行无符号算术,则溢出标志表示无效 应该被忽略。
如需更多说明,请参阅:http://teaching.idallen.com/dat2343/10f/notes/040_overflow.txt
答案 1 :(得分:21)
Carry Flag是在以下情况下设置的标志:
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位的进位时,辅助标志被置位,即从较低的半字节进入较高的半字节。 (Wiki link)
溢出标志用作CF,但是当我们处理带符号的数字时。例如,我们想要添加两个8位有符号数:127 + 2.结果为129但是对于8位有符号数来说太多了,所以OF将被设置。类似的结果太小,如-128 - 1 = -129,这超出了8位有符号数的范围。
您可以阅读有关维基百科上的标志的更多信息
答案 2 :(得分:-3)
溢出标志(OF):指示有符号算术运算后数据的高阶位(最左位)的溢出。
方向标记(DF):确定用于移动或比较字符串数据的左或右方向。 DF值为0时,字符串操作沿从左到右的方向;当DF值设置为1时,字符串操作沿从右到左的方向。
中断标志(IF):确定是否忽略或处理外部中断(如键盘输入等)。值为0时,它将禁用外部中断;设置为1时,将启用中断。
陷阱标志(TF):允许在单步模式下设置处理器的操作。我们使用的DEBUG程序设置了陷阱标志,因此我们可以一次逐步执行一条指令。
符号标志(SF):显示算术运算结果的符号。根据算术运算后数据项的符号设置此标志。该符号由最左位的高位指示。阳性结果将SF的值清除为0,阴性结果将SF的值设置为1。
零标志(ZF):指示算术或比较运算的结果。非零结果将零标志清除为0,零结果将其标志设置为1。
辅助进位标志(AF):包含算术运算后从位3到位4的进位;用于专业算术。当1字节算术运算引起从第3位到第4位的进位时,将设置AF。
奇偶校验标志(PF):指示从算术运算获得的结果中的1位总数。偶数个1位将奇偶校验标志清为0,奇数个1位将奇偶校验标志清为1。
进位标志(CF):包含算术运算后高位(最左边)的0或1进位。它还存储移位或旋转操作的最后一位的内容。