NES程式設計/簡介
| 一位讀者請求擴充套件此頁面以包含更多內容。 您可以透過新增新內容(瞭解如何操作)或在閱覽室尋求幫助。 |
推薦用於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
還有更多定址模式,但現在先堅持使用這些。如果您想知道LDA和STA是什麼,它們只是指令的名稱。接下來介紹指令!
指令是告訴處理器執行某些操作的特定命令。這可能是將某些內容移動到記憶體中,新增一些數字,跳轉到不同的位置等。總共有56條指令。接下來將描述最常用的指令。
您將學習的第一條指令是LDA。它代表LoaD A,它將資料複製到暫存器A中。資料可以是數字、地址或索引地址(有關此定址模式的更多資訊,請參見下一教程)。看看您是否能理解這個:LDX。如果您猜到是LoaD X,那麼您是對的。我想我不需要解釋LDY是什麼了。
STA,第二常見的指令,代表STore A,它將A的值儲存到記憶體中。STA $2000會將A的當前值儲存到記憶體地址$2000中。它的對應指令包括STY和STX。