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位值A78
。 AND
指令确实遵循以下规则:
(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' 类似于存储指令?
我想您可能对寻址模式的使用感到困惑。绝对寻址模式简单的说就是用于操作的内存地址紧跟在操作码之后。
你说的STA
和AND
两种情况都是这样。
但是,如何使用该内存地址取决于操作码本身。 STA
将使用它作为一个位置存储累加器。 AND
将使用它加载一个字节,然后使用该字节修改累加器。尽管存在差异,它们都是绝对寻址模式。
您似乎要说的是您希望直接存储到内存地址以使用类似的东西:
STA #A78
我明白为什么你会认为这在逻辑上更一致,但这不是 CPU 汇编语言的设计方式,现在不太可能有人去修复它:-)
注意直接AND
一个16位地址值的8位累加器意义不大
在编写我的 6502/NES 模拟器时,这确实困扰着我...
6502的存储指令是这样操作的:
STA A78 - Store the value of the accumulator into memory address A78.
但是,该指令使用绝对寻址方式,应该return内存中存储的8位值A78
。 AND
指令确实遵循以下规则:
(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' 类似于存储指令?
我想您可能对寻址模式的使用感到困惑。绝对寻址模式简单的说就是用于操作的内存地址紧跟在操作码之后。
你说的STA
和AND
两种情况都是这样。
但是,如何使用该内存地址取决于操作码本身。 STA
将使用它作为一个位置存储累加器。 AND
将使用它加载一个字节,然后使用该字节修改累加器。尽管存在差异,它们都是绝对寻址模式。
您似乎要说的是您希望直接存储到内存地址以使用类似的东西:
STA #A78
我明白为什么你会认为这在逻辑上更一致,但这不是 CPU 汇编语言的设计方式,现在不太可能有人去修复它:-)
注意直接AND
一个16位地址值的8位累加器意义不大