Intel 8080测试ROM(TST8080.ASM)中ADI指令奇偶标志异常咨询
问题分析与解答
首先明确Intel 8080奇偶标志的核心规则:
- 指令执行后,统计累加器(或结果字节)中二进制位为1的数量
- 若1的数量为偶数,奇偶标志位P置1
- 若1的数量为奇数,奇偶标志位P置0
针对你遇到的问题:
1. ADI 010H指令的正确结果
执行ADI 010H后累加器值为99H,二进制是10011001,其中1的数量为4(偶数),按照手册规则,此时P标志必须置1。
测试代码中CPE CPEI是当P=1时跳转到CPEI,但你的模拟器没有触发跳转,反而继续执行后续代码并最终调用CPUER,说明你的模拟器计算出的P=0,这是错误的。
2. 后续ADI 002H的验证
假设前一步A确实是99H,执行ADI 002H后得到9BH(二进制10011011),1的数量为5(奇数),此时P应置0。测试代码中的RPO是当P=0时跳转,但你的模拟器执行了CALL CPUER,说明实际P=1,进一步证明奇偶标志的计算逻辑颠倒。
3. 可能的错误原因与修复
- 奇偶计算逻辑颠倒:你的模拟器可能错误地将偶数个1时设为P=0,奇数时设为P=1,需修正计算逻辑。
- 1的数量统计错误:检查代码中统计二进制位1的个数的逻辑,确保对
99H这类值的计数正确。 - 指令执行错误:确认
ADI指令正确更新了累加器的值,没有出现计算错误(比如进位异常,但此处89H+10H无进位,C=0符合注释)。
内容的提问来源于stack exchange,提问作者Noah Lewis
相关产品推荐
相关产品推荐

