加载中…
个人资料
fdgd
fdgd
  • 博客等级:
  • 博客积分:0
  • 博客访问:12,323
  • 关注人气:1
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有