指令 | 功能 |
---|---|
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 |
本作品采用知识共享署名-非商业性使用-禁止演绎 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).