跳转到内容

超级任天堂编程/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 字节, 字节
[编辑 | 编辑源代码]
华夏公益教科书