27 Mar 2020

6502汇编

6502指令

指令

指令 功能
ADC 累加器,存储器,进位标志C相加,结果送累加器A? A+M+C→A
AND 寄存器与累加器相与,结果送累加器 A∧M→A
ASL 算术左移指令,移位功能是将字节内各位依次向左移1位,最高位移进标志位C中,最底位补0,执行结果相当于把移位前的数乘2
BCC 如果标志位C=0则转移,否则继续
BCS 如果标志位C=1则转移,否则继续
BEQ 如果标志位Z=1则转移,否则继续
BIT 位测试指令
BMI 如果标志位N=1则转移,否则继续
BNE 如果标志位Z=0则转移,否则继续
BPL 如果标志位N=0则转移,否则继续
BVC 如果标志位V=0则转移,否则继续
BVS 如果标志位V=1则转移,否则继续
CLC 清除进位标志 0→C
CLD 清除十进制运算标志D 0→D
CLI 清除中断禁止指令I 0→I
CLV 清除溢出标志V 0→V
CMP 累加器和存储器比较
CPX 寄存器X的内容和存储器比较
CPY 寄存器Y的内容和存储器比较
DEC A存储器单元内容减1 M-1→M
DEX X存储器单元内容减1 M-1→M
DEY Y存储器单元内容减1 M-1→M
EOR 寄存器与累加器相异或,结果送累加器 A≮M→A
INC A存储器单元内容增1 M+1→M
INT 中断指令
INX X存储器单元内容增1 M+1→M
INY Y存储器单元内容增1 M+1→M
JMP 无条件转移指令
JSR 转移到子程序指令
LDA 由存储器取数送入累加器 M→A
LDX 由存储器取数送入累加器 M→X
LDY 由存储器取数送入累加器 M→Y
LSR 逻辑右移指令,将字节内各位依次向右移1位,最低位移进标志位C,最高位补0.对于无符号数和正数相当于乘1/2
ORA 寄存器与累加器相或,结果送累加器 A∨M→A
PHA 累加器进栈指令
PHP 标志寄存器P进栈指令
PLA 累加器出栈指令
PLP 标志寄存器P出栈指令
ROL 循环左移指令,将字节内容连同进位C一起依次向左移1位
ROR 循环右移指令,将字节内容连同进位C一起依次向右移1位
RTS 从主程序返回指令
SBC 从累加器减去存储器和进位标志C,结果送累加器 A-M-C→A
SEC 置进位标志C 1→C
SED 置十进制运算标志D 1→D
SEI 置位中断禁止标志I 1→I
STA 将累加器的内容送入存储器 A–M
STX 将寄存器X的内容送入存储器 X–M
STY 将寄存器Y的内容送入存储器 Y–M
TAX 将累加器A的内容送入变址寄存器X
TAY 将累加器A的内容送入变址寄存器Y
TSX 将堆栈指针S的内容送入变址寄存器X
TXA 将变址寄存器X的内容送入累加器A
TXS 将变址寄存器X的内容送入堆栈指针S
TYA 将变址寄存器Y的内容送入累加器A

指令操作码

指令操作码 符号码格式 寻址方式
00 INT  
00 BRK  
01 ORA ($addr,X) 先变址X后间址
05 ORA $addr 零页寻址
06 ASL $data 零页寻址
08 PHP  
09 ORA #$data 立即寻址
0A ASL 累加器寻址
0D ORA $addr16 绝对寻址
0E ASL $addr16 绝对寻址
10 BPL $data16 相对寻址
11 ORA ($addr),Y 后变址Y间址
15 ORA $addr,X 零页X变址
16 ASL $addr,X 零页X变址
18 CLC  
19 ORA $addr16,Y 绝对Y变址
1D ORA $addr16,X 绝对X变址
1E ASL $addr16,X 绝对X变址
20 JSR $addr16 绝对寻址
21 AND ($addr,X) 先变址X后间址
24 BIT $addr 零页寻址
25 AND $addr 零页寻址
26 ROL $data 零页寻址
28 PLP  
29 AND #$data 立即寻址
2A ROL 累加器寻址
2C BIT $addr16 绝对寻址
2D AND $addr16 绝对寻址
2E ROL $addr16 绝对寻址
30 BMI $data16 相对寻址
31 AND ($addr),Y 后变址Y间址
35 AND $addr,X 零页X变址
36 ROL $addr,X 零页X变址
38 SEC  
39 AND $addr16,Y 绝对Y变址
3D AND $addr16,X 绝对X变址
3E ROL $addr16,X 绝对X变址
40 rti  
41 EOR ($addr,X) 先变址X后间址
45 EOR $addr 零页寻址
46 LSR $data 零页寻址
48 PHA  
49 EOR #$data 立即寻址
4A LSR 累加器寻址
4C JMP $addr16 绝对寻址
4D EOR $addr16 绝对寻址
4E LSR $addr16 绝对寻址
50 BVC $data16 相对寻址
51 EOR ($addr),Y 后变址Y间址
55 EOR $addr,X 零页X变址
56 LSR $addr,X 零页X变址
58 CLI  
59 EOR $addr16,Y 绝对Y变址
5D EOR $addr16,X 绝对X变址
5E LSR $addr16,X 绝对X变址
60 RTS  
61 ADC ($addr,X) 先变址X后间址
65 ADC $addr 零页寻址
66 ROR $data 零页寻址
68 PLA  
69 ADC #$data 立即寻址
6A ROR 累加器寻址
6C JMP ($data16) 间接寻址
6D ADC $addr16 绝对寻址
6E ROR $addr16 绝对寻址
70 BVS $data16 相对寻址
71 ADC ($addr),Y 后变址Y间址
75 ADC $addr,X 零页X变址
76 ROR $addr,X 零页X变址
78 SEI  
79 ADC $addr16,Y 绝对Y变址
7D ADC $addr16,X 绝对X变址
7E ROR $addr16,X 绝对X变址
81 STA ($addr,X) 先变址X后间址
84 STY $addr 零页寻址
85 STA $addr 零页寻址
86 STX $addr 零页寻址
88 DEY 隐含寻址
8A TXA 寄存器寻址
8C STY $addr16 绝对寻址
8D STA $addr16 绝对寻址
8E STX $addr16 绝对寻址
90 BCC $data16 相对寻址
91 STA ($addr),Y 后变址Y间址
94 STY $addr,X 零页X变址
95 STA $addr,X 零页X变址
96 STX $addr,Y 零页Y变址
98 TYA 寄存器寻址
99 STA $addr16,Y 绝对Y变址
9A TXS 寄存器寻址
9D STA $addr16,X 绝对X变址
A0 LDY #$data 立即寻址
A1 LDA ($addr,X) 先变址X后间址
A2 LDX #$data 立即寻址
A4 LDY $addr 零页寻址
A5 LDA $addr 零页寻址
A6 LDX $addr 零页寻址
A8 TAY 寄存器寻址
A9 LDA #$data 立即寻址
AA TAX 寄存器寻址
AC LDY $addr16 绝对寻址
AD LDA $addr16 绝对寻址
AE LDX $addr16 绝对寻址
B0 BCS $data16 相对寻址
B1 LDA ($addr),Y 后变址Y间址
B4 LDY $addr,X 零页X变址
B5 LDA $addr,X 零页X变址
B6 LDX $addr,Y 零页Y变址
B8 CLV  
B9 LDA $addr16,Y 绝对Y变址
BA TSX 寄存器寻址
BC LDY $addr16,X 绝对X变址
BD LDA $addr16,X 绝对X变址
BE LDX $addr16,Y 绝对Y变址
C0 CPY #$data 立即寻址
C1 CMP ($addr,X) 先变址X后间址
C4 CPY $addr 零页寻址
C5 CMP $addr 零页寻址
C6 DEC $addr 零页寻址
C8 INY 隐含寻址
C9 CMP #$data 立即寻址
CA DEX 隐含寻址
CC CPY $addr16 绝对寻址
CD CMP $addr16 绝对寻址
CE DEC $addr16 绝对寻址
D0 BNE $data16 相对寻址
D1 CMP ($addr),Y 后变址Y间址
D5 CMP $addr,X 零页X变址
D6 DEC $addr,X 零页X变址
D8 CLD  
D9 CMP $addr16,Y 绝对Y变址
DD CMP $addr16,X 绝对X变址
DE DEC $addr16,X 绝对X变址
E0 CPX #$data 立即寻址
E1 SBC ($addr,X) 先变址X后间址
E4 CPX $addr 零页寻址
E5 SBC $addr 零页寻址
E6 INC $addr 零页寻址
E8 INX 隐含寻址
E9 SBC #$data 立即寻址
EA NOP  
EC CPX $addr16 绝对寻址
ED SBC $addr16 绝对寻址
EE INC $addr16 绝对寻址
F0 BEQ $data16 相对寻址
F1 SBC ($addr),Y 后变址Y间址
F5 SBC $addr,X 零页X变址
F6 INC $addr,X 零页X变址
F8 SED  
F9 SBC $addr16,Y 绝对Y变址
FD SBC $addr16,X 绝对X变址
FE INC $addr16,X 绝对X变址

寄存器

寄存器 功能
A 8位寄存器,只能存储一个(00-FF)之间的立即数
X 8位寄存器,它在编程中常被当作一个计数器来使用.它可以由指令控制而被置成一个常数
Y 8位寄存器,它在编程中常被当作一个计数器来使用.它可以由指令控制而被置成一个常数
PC 程序计数器,16位寄存器,存放指令地址码
S 堆栈指针,6502规定堆栈设在 第 1 页存储器中,所以堆栈指针 S 也是8位寄存器
P 标志寄存器,8位的寄存器,但是只用了其中的 7 位,第 5 位空着不用.
标志位 功能 在P中的位置
C 进位标志.指令执行完毕后的最高进位状态,若最高位有进位则使 C = 1,若最高位无进位则使 C = 0 0
Z 零标志. 指令执行完毕后结果为0,那么 Z = 1;否则 Z = 0. 1
I 中断标志.此位置 0 表示允许中断,置 1 表示禁止中断,但非屏蔽中断不受次约 2
V 溢出标志.指令执行后若产生溢出,则次标志位被置 1 6
N 负数标志.指令执行完毕后,若结果最高位 为1,则该位置 1 7

Tags:
0 comments



本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议CC BY-NC-ND 4.0)进行许可。

This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License (CC BY-NC-ND 4.0).