2017-07-31 59 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)很容易理解商店說明 - 現在它很有意義:) –