为什么即使添加5FH和33H也会设置符号标志?

时间:2017-03-15 13:50:50

标签: flags microprocessors 8085

我正在研究8085微处理器,我遇到了一条指令--ADC。

在这个例子中,它们给出累加器[A] = 57H和寄存器[D] = 33H并且初始进位被设置,所以[CY] = 01H

说明:ADC D. 他们增加了57H,33H和01H

0 1 0 1 1 1 1 1

0 0 1 1 0 0 1 1

0 0 0 0 0 0 0 1

答案:1 0 0 1 0 0 1 1。

他们说现在设置了sign标志,因为MSB包含更高的位。我不明白为什么答案被认为是否定的,即使进行了加法操作。

1 个答案:

答案 0 :(得分:0)

根据定义,它是否定的。在2的补码下,设置最高位的任何数字都是负数。 57 + 33 + 1 = 8B,其顶部位设置。因此它是一个负数。

在你的情况下,遗憾的是寄存器不足以保持真实的结果。如果它是一个16位寄存器,你已经计算出0057 + 0033 + 0001 = 008B,它没有设置最高位。如果您打算保留已签名的号码,那么您已经丢失了信息 - 您无法再确定这是否真的是十进制139或-117。但是,如果你纯粹以无符号数字工作,那么你可以忽略符号标志。你知道它不适用。

您还可以使用溢出标志来检查结果是否有错误的符号。如果两个阳性似乎产生负面或两个负面看似产生正面,则设置溢出。

在你的情况下,应该设置sign和overflow。