assembly 有符号数和无符号数的标志

2skhul33  于 2022-12-04  发布在  其他
关注(0)|答案(1)|浏览(131)

我的讲师说,对于有符号的数字,进位标志是不相关的。现在我明白了,进位标志并不意味着任何东西,但它可以设置或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。这里我们有一个进位,那么进位位也会被设置吗?

p1iqtdky

p1iqtdky1#

计算机不知道你如何解释这些数字,你作为程序员,要把这些数字解释成有符号还是无符号。
当算术运算产生的结果超过寄存器的位数时,进位标志被置位。这表示如果您将值解释为无符号,则输出结果是错误的,您应该采取一些措施来修复它。

溢出标志被设置为进入MSB进位和从MSB出来的进位的**“异或”运算。这意味着在运算期间,如果进位进入MSB但没有从MSB出来,则溢出标志将被设置,或者如果进位没有进入MSB**(MSB之前的位不产生进位),但MSB产生进位,则溢出标志也将被设置。这表明如果您将数字解释为有符号,则不能接受所产生的结果为正确的,而应该进行测量以产生正确的值。

在某些情况下,两者都可能成立。例如:0111111111111111110 + 0111111111111111110将设置溢出标志,但不设置进位标志。对于1111111111111111110 + 1111111111111111110,即使值超过寄存器,也不会设置溢出标志,仅设置进位标志。101111111111111110 + 101111111111111110将同时设置溢出进位标志。我希望这将帮助您了解何时同时设置进位标志和溢出标志,而不是在将来。
PS:我是新来回答关于堆栈溢出的问题的。如果我犯了任何错误,请让我知道。

相关问题