我正在研究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包含更高的位。我不明白为什么答案被认为是否定的,即使进行了加法操作。
答案 0 :(得分:0)
根据定义,它是否定的。在2的补码下,设置最高位的任何数字都是负数。 57 + 33 + 1 = 8B,其顶部位设置。因此它是一个负数。
在你的情况下,遗憾的是寄存器不足以保持真实的结果。如果它是一个16位寄存器,你已经计算出0057 + 0033 + 0001 = 008B,它没有设置最高位。如果您打算保留已签名的号码,那么您已经丢失了信息 - 您无法再确定这是否真的是十进制139或-117。但是,如果你纯粹以无符号数字工作,那么你可以忽略符号标志。你知道它不适用。
您还可以使用溢出标志来检查结果是否有错误的符号。如果两个阳性似乎产生负面或两个负面看似产生正面,则设置溢出。
在你的情况下,应该设置sign和overflow。