6502 存储指令(STA、STX等)和内存地址

6502 store instructions (STA, STX, etc.) and memory addresses

在编写我的 6502/NES 模拟器时,这确实困扰着我...

6502的存储指令是这样操作的:

STA A78 - Store the value of the accumulator into memory address A78.

但是,该指令使用绝对寻址方式,应该return内存中存储的8位值A78AND 指令确实遵循以下规则:

(If A is stored in A78)
AND A78 - Perform a logical AND between the accumulator and the value stored in A78 (which is A)

因此在正常情况下,STA绝对指令应该将累加器值存储在A78中存储的8位零页地址中。 如果真的把值存入A78,寻址方式不应该是立即的吗? - 例如STA #2A78

此外,是否还有任何其他指令的行为 'abnormally' 类似于存储指令?

我想您可能对寻址模式的使用感到困惑。绝对寻址模式简单的说就是用于操作的内存地址紧跟在操作码之后。

你说的STAAND两种情况都是这样。

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

似乎要说的是您希望直接存储到内存地址以使用类似的东西:

STA #A78

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

注意直接AND一个16位地址值的8位累加器意义不大