6502存储指令(STA,STX等)和存储器地址

时间:2017-07-31 06:37:36

标签: emulation opcode 6502

在编写我的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

此外,是否还有其他任何行为异常的说明'喜欢商店的说明吗?

1 个答案:

答案 0 :(得分:3)

我认为您可能对使用寻址模式感到困惑。绝对寻址模式只是意味着用于操作的存储器地址紧跟在操作码之后。

在您提及的两个案例中,ANDSTA都属于这种情况。

但是,如何使用内存地址取决于操作码本身。 AND将使用它作为存储累加器的位置。 STA #$2A78 将使用它来加载一个字节,然后使用该字节来修改累加器。尽管存在差异,它们都是绝对寻址模式。

出现的要说的是你希望商店直接使用内存地址来使用以下内容:

AND

我可以看到你为什么认为逻辑更一致,但这不是CPU汇编语言的设计方式,而且现在不太可能有人去修复它: - )

请注意,{{1}}直接使用16位地址值的8位累加器毫无意义。