6502指令操作码排序[更新2009-06-06]
FC技术书籍 2008-11-09 19:50:50 阅读260 评论0 字号:大中小| 指令 | 功能 |
| ADC | 累加器,存储器,进位标志C相加,结果送累加器A? A+M+C→A |
| AND | 寄存器与累加器相与,结果送累加器
|
| 指令 | 功能 |
| ADC | 累加器,存储器,进位标志C相加,结果送累加器A? A+M+C→A |
| AND | 寄存器与累加器相与,结果送累加器
|
| 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 | 清除进位标志 |
| CLD | 清除十进制运算标志D
|
| CLI | 清除中断禁止指令I |
| CLV | 清除溢出标志V |
| CMP | 累加器和存储器比较 |
| CPX | 寄存器X的内容和存储器比较 |
| CPY | 寄存器Y的内容和存储器比较 |
| DEC | A存储器单元内容减1
|
| DEX | X存储器单元内容减1
|
| DEY | Y存储器单元内容减1
|
| EOR | 寄存器与累加器相异或,结果送累加器
|
| INC | A存储器单元内容增1
|
| INT | 中断指令 |
| INX | X存储器单元内容增1
|
| INY | Y存储器单元内容增1
|
| JMP | 无条件转移指令 |
| JSR | 转移到子程序指令 |
| LDA | 由存储器取数送入累加器 M→A |
| LDX | 由存储器取数送入累加器 M→X |
| LDY | 由存储器取数送入累加器 M→Y |
| LSR | 逻辑右移指令,将字节内各位依次向右移1位,最低位移进标志位C,最高位补0.对于无符号数和正数相当于乘1/2 |
| ORA | 寄存器与累加器相或,结果送累加器
|
| PHA | 累加器进栈指令 |
| PHP | 标志寄存器P进栈指令 |
| PLA | 累加器出栈指令 |
| PLP | 标志寄存器P出栈指令 |
| ROL | 循环左移指令,将字节内容连同进位C一起依次向左移1位 |
| ROR | 循环右移指令,将字节内容连同进位C一起依次向右移1位 |
| RTS | 从主程序返回指令 |
| SBC | 从累加器减去存储器和进位标志C,结果送累加器
|
| SEC | 置进位标志C |
| SED | 置十进制运算标志D |
| SEI | 置位中断禁止标志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 |
绝对寻址 |
| 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 | 零标志. |
1 |
| I | 中断标志.此位置 0 表示允许中断,置 1 表示禁止中断,但非屏蔽中断不受次约 | 2 |
| V | 溢出标志.指令执行后若产生溢出,则次标志位被置 1 | 6 |
| N | 负数标志.指令执行完毕后,若结果最高位 为1,则该位置 1 | 7 |