为什么在添加 5FH 和 33H 时也会设置符号标志?
Why is the sign flag set even on addition of 5FH and 33H?
我正在研究 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.
他们说符号标志现在设置为 MSB 包含较高位。我不明白为什么答案被认为是否定的,即使进行了加法运算。
根据定义,它是负面的。在二进制补码下,设置最高位的任何数字都是负数。 57 + 33 + 1 = 8B,最高位已设置。所以是负数。
在您的情况下,不幸的是寄存器不够大,无法保存真实结果。如果它是一个 16 位寄存器,你会计算出 0057 + 0033 + 0001 = 008B,它没有设置最高位。如果你打算保留带符号的数字,你就丢失了信息——你无法再判断这到底是十进制的 139 还是 -117。但是,如果您纯粹使用无符号数,那么您可以忽略符号标志。你知道它不适用。
您也可以使用溢出标志来检查结果是否有错误的符号。如果两个正数看似产生负数或两个负数看似产生正数,则设置溢出以进行加法。
在您的情况下,应同时设置符号和溢出。
我正在研究 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.
他们说符号标志现在设置为 MSB 包含较高位。我不明白为什么答案被认为是否定的,即使进行了加法运算。
根据定义,它是负面的。在二进制补码下,设置最高位的任何数字都是负数。 57 + 33 + 1 = 8B,最高位已设置。所以是负数。
在您的情况下,不幸的是寄存器不够大,无法保存真实结果。如果它是一个 16 位寄存器,你会计算出 0057 + 0033 + 0001 = 008B,它没有设置最高位。如果你打算保留带符号的数字,你就丢失了信息——你无法再判断这到底是十进制的 139 还是 -117。但是,如果您纯粹使用无符号数,那么您可以忽略符号标志。你知道它不适用。
您也可以使用溢出标志来检查结果是否有错误的符号。如果两个正数看似产生负数或两个负数看似产生正数,则设置溢出以进行加法。
在您的情况下,应同时设置符号和溢出。