超級任天堂程式設計/彙編入門
外觀
如果這本華夏公益教科書可以假設你已經學習了其他形式的組合語言,那將很方便。本教程將嘗試向你介紹在儘可能低的級別上對 SNES 進行程式設計的實踐。
暫存器是任何處理器的核心,本質上是記憶體中的位置,用於特殊目的。所有指令都會對這些暫存器中的一個或多個產生影響。即使是nop指令,它什麼也不做,也會增加程式計數器暫存器。
| 通用暫存器 | |
|---|---|
| 累加器 (A) | 處理所有算術和邏輯運算。65816 的核心。 |
| 索引 (X & Y) | 具有有限功能的索引暫存器 |
| 特殊用途暫存器 | |
| 處理器狀態 (P) | 處理器標誌,儲存測試結果和 65816 處理狀態。 |
| 堆疊 (S) | 堆疊指標 |
| 直接頁面 (DP) | 允許 65816 以直接定址模式訪問記憶體 |
| 程式庫 (PB) | 儲存當前 CPU 指令的記憶體庫地址 |
| 程式計數器 (PC) | 儲存當前 CPU 指令的記憶體地址 |
| 資料庫 (DB) | 儲存 CPU 正在訪問的資料的記憶體庫地址 |
所有 SNES 暫存器都是 8 位或 16 位。暫存器 A、X、Y 可以設定為 8 位或 16 位。
在低階程式設計中,程式設計師通常以十六進位制表示法鍵入數字。這意味著值可以有 16 為基數。換句話說,每個數字可以有 16 種可能的值:0-9、A、B、C、D、E、F。這樣就可以方便地表示和操作單個位。
在 SNES 彙編中,十六進位制值用 $ 字首指定。
| 示例 | ||
|---|---|---|
| 十進位制 | 十六進位制 | 二進位制 |
| 18 | $12 | %00010010 |
| 122 | $7A | %01111010 |
指令是機器程式碼的分解。對於 SNES,它們由一個 1 位元組的操作碼加上 0-3 位元組的運算元組成。完整的指令可以被稱為字。例如,指令“ADC $3a”在記憶體中佔用 2 個位元組,如果彙編,它將被儲存為“E6 3A”。
大多數至少包含 2 個位元組的指令都具有不止一個定址模式。定址模式被置於其中,以便基本的指令可以被解釋為給定各種運算元的正確方式。SNES 定址模式可以在 65c816_reference 的末尾找到。
大多數算術指令對 A(累加器)和另一個值執行算術運算,並將結果儲存回 A。例如,加法由“ADC”表示。
ADC、SBC(減法)、AND、ORA(按位或)、EOR(按位異或)是最基本的算術指令。這些指令最常見的定址模式是
| 立即定址 | ADC #$01ff | 將 $01ff 加到 A。 |
| 絕對定址 | SBC $80fb | 減去 DB 指定的庫中的地址 80fb 處的值 |
| 絕對索引定址 | AND $a0c0, X | 與絕對定址相同,但將 X 加到地址中 |
| 等等! |
另請參閱 65c816 參考:定址模式