我的讲师说,对于有符号的数字,进位标志是不相关的。现在我明白了,进位标志并不意味着任何东西,但它可以设置或1,对吗?
对于无符号的数字也是这样说的,溢出标志是不相关的。现在我明白了,它是不相关的,但它可以设置正确?
LDI R16,0x84
LDI R17,0x85
ADD R16,R17
对于有符号数字:
当我把10000100(-124)和10000100(-123)相加时,结果是+9,这是不对的,因此溢出标志被设置为两个负数之和不能是负数。因为我在解100001001时得到了一个进位。1被丢弃,显示为00001001,但进位标志将在右边?
对于无符号数字:
当我执行相同的计算时:也就是将10000100加到10000100上,十进制表示无符号数分别为133和132,和为100001001,我们知道1是进位,得到00001001。这里我们有一个进位,那么进位位也会被设置吗?
1条答案
按热度按时间p1iqtdky1#
计算机不知道你如何解释这些数字,你作为程序员,要把这些数字解释成有符号还是无符号。
当算术运算产生的结果超过寄存器的位数时,进位标志被置位。这表示如果您将值解释为无符号,则输出结果是错误的,您应该采取一些措施来修复它。
溢出标志被设置为进入MSB的进位和从MSB出来的进位的**“异或”运算。这意味着在运算期间,如果进位进入MSB但没有从MSB出来,则溢出标志将被设置,或者如果进位没有进入MSB**(MSB之前的位不产生进位),但MSB产生进位,则溢出标志也将被设置。这表明如果您将数字解释为有符号,则不能接受所产生的结果为正确的,而应该进行测量以产生正确的值。
在某些情况下,两者都可能成立。例如:0111111111111111110 + 0111111111111111110将设置溢出标志,但不设置进位标志。对于1111111111111111110 + 1111111111111111110,即使值超过寄存器,也不会设置溢出标志,仅设置进位标志。101111111111111110 + 101111111111111110将同时设置溢出和进位标志。我希望这将帮助您了解何时同时设置进位标志和溢出标志,而不是在将来。
PS:我是新来回答关于堆栈溢出的问题的。如果我犯了任何错误,请让我知道。