6502机器码手册
(2011-09-09 14:03:43)
6502指令操作码排序[更新2009-06-06]
FC技术书籍 2008-11-09 19:50:50
阅读260
评论0 字号:大中小
指令 |
功能 |
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 |
喜欢
0
赠金笔
加载中,请稍候......