跳轉到內容

超級任天堂程式設計/65c816參考

來自華夏公益教科書,開放的書籍,開放的世界

內部暫存器

[編輯 | 編輯原始碼]
暫存器 描述
8 或 16 A 累加器。這是數學暫存器。它儲存兩個運算元之一或大多數算術和邏輯運算的結果。
8 或 16 X, Y 索引暫存器。這些可以用來引用記憶體,將資料傳遞到記憶體,或者作為迴圈的計數器。
16 S 堆疊指標,指向堆疊上下一個可用(未使用的)位置。
8 DBR 資料庫暫存器,儲存記憶體傳輸的預設庫。
16 D 直接頁面暫存器,用於直接頁面定址模式。
8 PBR 程式庫,儲存所有指令獲取的庫地址。
8 P 處理器狀態,儲存各種重要的標誌,見下文。
16 PC 程式計數器
儲存在 P 暫存器中的標誌
[編輯 | 編輯原始碼]
助記符 二進位制值 描述
N #$80 10000000 負數 用於分支指令的條件程式碼。
V #$40 01000000 溢位
Z #$02 00000010
C #$01 00000001 進位
D #$08 00001000 十進位制
I #$04 00000100 IRQ 停用
X #$10 00010000 索引暫存器大小(僅限本機模式)

(0 = 16 位,1 = 8 位)

M #$20 00100000 累加器暫存器大小(僅限本機模式)

(0 = 16 位,1 = 8 位)

E 不在 P 中 6502 模擬模式
B #$10 00010000 斷點(僅限模擬模式)

算術和邏輯指令

[編輯 | 編輯原始碼]
指令 描述 引數 設定標誌
ADC 將 A 與某值和進位位相加。結果放入 A 中。 立即值或地址 n,v,z,c 算術指令
SBC 從某值和進位位中減去。 n,v,z,c
AND 將 A 與記憶體進行 AND 運算,並將結果儲存在 A 中。 立即值或地址 n,z 邏輯指令
EOR 異或 n,z
ORA 將 A 與記憶體進行 OR 運算,並將結果儲存在 A 中。 立即值或地址 n,z
TSB 測試並設定位 z
TRB 測試並復位位 z
ASL 算術左移 A 或地址 n,z,c 移位指令
LSR 邏輯右移 A 或地址 n,z,c
ROL 左旋 A 或地址 n,z,c
ROR 右旋 A 或地址 n,z,c
BIT 測試位,設定 立即值或地址 n,v,z(僅限立即模式下的 z) 測試指令
CMP 將累加器與記憶體進行比較 n,z,c
CPX 將暫存器 X 與記憶體進行比較 n,z,c
CPY 將暫存器 Y 與記憶體進行比較 n,z,c
DEA 遞減累加器 n,z
DEC 遞減,參見 INC n,z
DEX 遞減 X 暫存器 n,z
DEY 遞減 Y 暫存器 n,z
INA 遞增累加器 n,z
INC 遞增,參見 DEC n,z
INX 遞增 X 暫存器 n,z
INY 遞增 Y 暫存器 n,z
NOP 無操作
XBA 交換累加器的位元組 n,z

載入/儲存指令

[編輯 | 編輯原始碼]
指令 描述
LDA 從記憶體載入累加器
LDX 從記憶體載入暫存器 X
LDY 從記憶體載入暫存器 Y
STA 將累加器儲存到記憶體中
STX 將暫存器 X 儲存到記憶體中
STY 將暫存器 Y 儲存到記憶體中
STZ 將零儲存到記憶體中

轉移指令

[編輯 | 編輯原始碼]
指令 描述 受影響的標誌
TAX 將累加器傳輸到索引暫存器 X n,z
TAY 將累加器傳輸到索引暫存器 Y n,z
TCD 將 16 位累加器傳輸到直接頁面暫存器 n,z
TCS 將 16 位累加器傳輸到堆疊指標
TDC 將直接頁面暫存器傳輸到 16 位累加器 n,z
TSC 將堆疊指標傳輸到 16 位累加器 n,z
TSX 將堆疊指標傳輸到索引暫存器 X n,z
TXA 將索引暫存器 X 傳輸到累加器 n,z
TXS 將索引暫存器 X 傳輸到堆疊指標
TXY 將索引暫存器 X 傳輸到索引暫存器 Y n,z
TYA 將索引暫存器 Y 傳輸到累加器 n,z
TYX 將索引暫存器 Y 傳輸到索引暫存器 X n,z

分支指令

[編輯 | 編輯原始碼]
指令 描述
BCC 如果進位標誌為清除 (C=0) 則分支
BCS 如果進位標誌為設定 (C=1) 則分支
BNE 如果不等於 (Z=0) 則分支
BEQ 如果等於 (Z=1) 則分支
BPL 如果為正 (N=0) 則分支
BMI 如果為負 (N=1) 則分支
BVC 如果溢位標誌為清除 (V=0) 則分支
BVS 如果溢位標誌為設定 (V=1) 則分支
BRA 始終分支(無條件)
BRL 始終長分支(無條件)

跳轉和呼叫指令

[編輯 | 編輯原始碼]
指令 描述
JMP 跳轉
JML 長跳轉
JSR 跳轉並儲存返回地址
JSL 長跳轉並儲存返回地址
RTS 從子程式返回
RTL 從長子程式返回

中斷指令

[編輯 | 編輯原始碼]
指令 描述
BRK 生成軟體中斷
COP 生成協處理器中斷
RTI 從中斷返回
STP 停止處理器直到重置
WAI 等待硬體中斷

P 標誌指令

[編輯 | 編輯原始碼]
指令 描述
CLC 清除進位標誌
CLD 清除十進位制標誌(二進位制算術)
CLI 啟用中斷請求
CLV 清除溢位標誌
REP 復位狀態位(例如,REP #%00100000 清除 M 標誌)
SEC 設定進位標誌
SED 設定十進位制標誌(十進位制算術)
SEP 設定狀態位(例如,SEP #%00010000 設定 X 標誌)
SEI 停用中斷請求
XCE 將進位標誌與模擬標誌交換

堆疊指令

[編輯 | 編輯原始碼]
指令 描述
PHA 壓入累加器 壓入指令
PHX 壓入索引暫存器 X
PHY 壓入索引暫存器 Y
PHD 壓入直接頁暫存器
PHB 壓入資料庫暫存器
PHK 壓入程式庫暫存器
PHP 壓入處理器狀態
PEA 壓入有效地址
PEI 壓入有效間接地址
PER 壓入有效相對地址
PLA 取出累加器 取出指令
PLX 取出索引暫存器 X
PLY 取出索引暫存器 Y
PLP 取出處理器狀態
PLD 取出直接頁暫存器
PLB 取出資料庫暫存器

定址模式

[編輯 | 編輯原始碼]
模式 示例
隱式 PHB
立即[記憶體標誌] AND #1 或 2 位元組
立即[索引標誌] LDX #1 或 2 位元組
立即[8 位] SEP #位元組
相對 BEQ 位元組 (有符號)
相對長 BRL 2 位元組 (有符號)
直接 AND 位元組
直接索引(帶 X) AND 位元組, x
直接索引(帶 Y) AND 位元組, y
直接間接 AND (位元組)
直接索引間接 AND (位元組, x)
直接間接索引 AND (位元組), y
直接間接長 AND [位元組]
直接間接索引長 AND [位元組], y
絕對 AND 2 位元組
絕對索引(帶 X) AND 2 位元組, x
絕對索引(帶 Y) AND 2 位元組, y
絕對長 AND 3 位元組
絕對索引長 AND 3 位元組, x
堆疊相對 AND 位元組, s
堆疊相對間接索引 AND (位元組, s), y
絕對間接 JMP (2 位元組)
絕對間接長 JML [2 位元組]
絕對索引間接 JMP/JSR (2 位元組, x)
隱式累加器 INC
塊移動 MVN/MVP 位元組, 位元組
[編輯 | 編輯原始碼]
華夏公益教科書