2017-07-31 55 views
0

写我的6502/NES模拟器时,这真的让我...6502存储指令(STA,STX等)和内存地址

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

你是什么意思,“正常情况下”?你是什​​么意思,“因此”?你的论点不清楚,所以我们可以解决你的误解,你使用什么参考? – philipxy

回答

3

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

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

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

出现什么是说的是,你希望一个存储到内存地址直接使用类似:

STA #$2A78 

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

请注意,AND是一个8位累加器,它直接具有16位地址值,这是毫无意义的。

+0

Ohhhh,这解释了一切!我所指的这张图(https:// drive。 google.com/file/d/0B6OHeG0FVYP8ZFNVd1p5emVfNnM/view?usp=sharing)很容易理解商店说明 - 现在它很有意义:) –