在编写我的6502 / NES仿真器时,这真让我烦恼......
6502的商店说明如下:
STA $2A78 - Store the value of the accumulator into memory address $2A78.
但是,该指令使用绝对寻址模式,该模式应返回存储在存储器$2A78
中的8位值。 AND
指令确实遵循以下规则:
(If $6A is stored in $2A78)
AND $2A78 - Perform a logical AND between the accumulator and the value stored in $2A78 (which is $6A)
因此,在正常情况下,STA
绝对指令应将累加器值存储在存储在$2A78
中的8位零页面地址中。
如果要将值真正存储在$2A78
中,那么寻址模式是不是应该立即进行? - 例如STA #2A78
此外,是否还有其他任何行为异常的说明'喜欢商店的说明吗?
答案 0 :(得分:3)
我认为您可能对使用寻址模式感到困惑。绝对寻址模式只是意味着用于操作的存储器地址紧跟在操作码之后。
在您提及的两个案例中,AND
和STA
都属于这种情况。
但是,如何使用内存地址取决于操作码本身。 AND
将使用它作为存储累加器的位置。 STA #$2A78
将使用它来加载一个字节,然后使用该字节来修改累加器。尽管存在差异,它们都是绝对寻址模式。
你出现的要说的是你希望商店直接使用内存地址来使用以下内容:
AND
我可以看到你为什么认为逻辑更一致,但这不是CPU汇编语言的设计方式,而且现在不太可能有人去修复它: - )
请注意,{{1}}直接使用16位地址值的8位累加器毫无意义。