我一直在制作GameBoy模拟器,我目前正在通过位于here的测试ROM中运行它。
cpu_instrs.zip
中的一项测试如下:
set_test 5,"POP AF"
ld bc,$1200
.loop:
push bc
pop af
push af
pop de
ld a,c
and $F0
cp e
jp nz,test_failed
inc b
inc c
jr nz,.loop
据我了解,似乎这个测试总会失败。在第一个循环中,零标志不会从inc c
设置,然后代码最终将跳转到test_failed
,因为在第二个循环中,e
将等于1并且{{1}将是0.
我在这里缺少什么?
答案 0 :(得分:5)
事实证明,标志寄存器上的最低有效半字节始终为零,并且向其写入非零值不应更改它。