0

在编写我的 6502/NES 仿真器时,这真的很困扰我……

6502的存储指令操作如下:

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

但是,该指令使用绝对寻址模式,它应该返回存储在内存中的 8 位值$2A78。该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绝对指令应该将累加器的值存储在 8 位零页地址中,该地址存储在$2A78. 如果要真正将值存储在 中$2A78,寻址模式不应该是即时的吗?- 例如STA #2A78

此外,是否有任何其他指令表现得像商店指令一样“异常”?

4

1 回答 1

3

我想你可能对寻址模式的使用感到困惑。绝对寻址模式仅仅意味着用于操作的内存地址紧跟在操作码之后。

在您提到的两种情况下,STAAND,都是这种情况。

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

似乎在说的是,您希望存储到内存地址直接使用以下内容:

STA #$2A78

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

请注意,AND直接使用 16 位地址值的 8 位累加器几乎没有意义。

于 2017-07-31T07:07:26.117 回答