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
赠金笔
加载中,请稍候......