跳轉到內容

NES程式設計/簡介

來自Wikibooks,開放世界的開放書籍

NES程式設計教程1:歡迎來到機器

[編輯 | 編輯原始碼]

推薦用於NES程式設計的語言是組合語言,因為緩慢的8位處理器需要它。處理器類似於早期的英特爾晶片,但缺少某些功能。

6502處理器最多可以定址64千位元組的記憶體。可以將其視為一個具有65536個“單元格”的連續空間。每個“單元格”或位元組可以儲存0到255之間的數字。這個空間的前256個位元組稱為零頁,6502可以稍微更快地訪問它,並且只需一個位元組。接下來的256個位元組是堆疊。6502包含3個通用暫存器

A累加器 - 所有資料移動、數學和邏輯運算都透過這裡進行。

X索引暫存器 - 用於通用計數和前索引記憶體偏移。

Y索引暫存器 - 用於通用計數和後索引記憶體偏移。

所有這些通用暫存器都可以用於任何目的,但上述原因是它們通常被用於的目的。

這些是特殊功能暫存器。

S堆疊指標 - 跟蹤堆疊。

P處理器標誌/狀態 - 儲存包含先前指令結果資訊的標誌。

P程式C計數器 - 跟蹤程式正在執行的位置。


有幾種方法可以訪問記憶體

  • 立即數定址

在這裡,8位數字的精確值寫入指令中。不會發生記憶體訪問。要表示立即數,在數字前放置一個#,例如

        LDA #$15        ; load the value 0x15 into the accumulator
                        
                        ; $ - denotes a hexadecimal address
                        ; % - denotes a binary address
                        ; # - denotes an immediate value
                        ; #$ - denotes an immediate hex value
                        ; #% - denotes an immediate binary value
  • 直接定址

16位地址儲存在指令中。指定記憶體地址中的任何內容都將是數字。例如,

        LDA #$C4        ; load the value decimal 196 into the accumulator
        STA $2001       ; store the accumulator at memory address hex 0x2001
  • 零頁定址

與直接定址類似,此方法訪問絕對地址。但是,此方法透過僅在指令中寫入低位元組來節省一個位元組。高位元組假定為零。因此,此方法只能用於零頁。以下示例顯示了使用直接定址和零頁定址的相同指令。

        LDA $00F8       ; Absolute, works but wastes space
        LDA $F8         ; Zero Page, saves a byte


還有更多定址模式,但現在先堅持使用這些。如果您想知道LDASTA是什麼,它們只是指令的名稱。接下來介紹指令!


指令是告訴處理器執行某些操作的特定命令。這可能是將某些內容移動到記憶體中,新增一些數字,跳轉到不同的位置等。總共有56條指令。接下來將描述最常用的指令。


您將學習的第一條指令是LDA。它代表LoaD A,它將資料複製到暫存器A中。資料可以是數字、地址或索引地址(有關此定址模式的更多資訊,請參見下一教程)。看看您是否能理解這個:LDX。如果您猜到是LoaD X,那麼您是對的。我想我不需要解釋LDY是什麼了。


STA,第二常見的指令,代表STore A,它將A的值儲存到記憶體中。STA $2000會將A的當前值儲存到記憶體地址$2000中。它的對應指令包括STYSTX

另請參閱

[編輯 | 編輯原始碼]

6502彙編

華夏公益教科書