我已经“完成”了对 6502 处理器的仿真,现在正处于测试阶段。作为我的初学者,我已经在这个问题上停留了几个小时。我正在关注一个 NES 测试,它基本上只是一个自制 ROM 和某人制作的日志,它说明了在内存中一步之后每个寄存器中应该有什么值。我被困在日志显示溢出标志在立即 SBC 指令之后被清除的部分,即使累加器的值是 0x40,并且第一个参数(内存 pc + 1)等于 0x41。这意味着0x40 - 0x41应该是0xFF,即-1,这意味着有溢出,对吧?我读了一些关于溢出标志的文章,它指出当一个值太大或太小而无法保存在有符号字节中时会产生溢出,因此溢出到另一侧(即 2 个 8 位正数变为 8 位负数,反之亦然)。那我是不是想错了?这是日志行:
CBC6 E9 41 SBC #$41 A:40 X:AA Y:73 P:E5
之后的行表明 P 寄存器已变为 0xA4,这意味着进位和溢出标志都被清除。我得到了进位部分,但没有溢出部分。这是下一行,如果关心的话:
CBC8 20 62 F9 JSR $F962 A:FF X:AA Y:73 P:A4
顺便一提; 第二行证明了我的观点:A 寄存器确实变成了 0xFF,而有符号字节中的 0xFF 将等于 256 - 255 = -1........