Reference
MOS 6502
56 mnemonics, 151 encoded forms, operands little-endian. Generated from crates/isa/src/mos6502.rs.
Cycle counts show the base cost; +p is an extra cycle when an
indexed access crosses a page boundary, +t when a branch is taken.
LDA
Load accumulator
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| immediate | A9 |
imm8 | 2 | 2 | NZ |
| zeropage | A5 |
addr8 | 2 | 3 | NZ |
| zeropage,x | B5 |
addr8 | 2 | 4 | NZ |
| absolute | AD |
addr16 | 3 | 4 | NZ |
| absolute,x | BD |
addr16 | 3 | 4 +p | NZ |
| absolute,y | B9 |
addr16 | 3 | 4 +p | NZ |
| (indirect,x) | A1 |
addr8 | 2 | 6 | NZ |
| (indirect),y | B1 |
addr8 | 2 | 5 +p | NZ |
LDX
Load X register
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| immediate | A2 |
imm8 | 2 | 2 | NZ |
| zeropage | A6 |
addr8 | 2 | 3 | NZ |
| zeropage,y | B6 |
addr8 | 2 | 4 | NZ |
| absolute | AE |
addr16 | 3 | 4 | NZ |
| absolute,y | BE |
addr16 | 3 | 4 +p | NZ |
LDY
Load Y register
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| immediate | A0 |
imm8 | 2 | 2 | NZ |
| zeropage | A4 |
addr8 | 2 | 3 | NZ |
| zeropage,x | B4 |
addr8 | 2 | 4 | NZ |
| absolute | AC |
addr16 | 3 | 4 | NZ |
| absolute,x | BC |
addr16 | 3 | 4 +p | NZ |
STA
Store accumulator
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| zeropage | 85 |
addr8 | 2 | 3 | — |
| zeropage,x | 95 |
addr8 | 2 | 4 | — |
| absolute | 8D |
addr16 | 3 | 4 | — |
| absolute,x | 9D |
addr16 | 3 | 5 | — |
| absolute,y | 99 |
addr16 | 3 | 5 | — |
| (indirect,x) | 81 |
addr8 | 2 | 6 | — |
| (indirect),y | 91 |
addr8 | 2 | 6 | — |
STX
Store X register
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| zeropage | 86 |
addr8 | 2 | 3 | — |
| zeropage,y | 96 |
addr8 | 2 | 4 | — |
| absolute | 8E |
addr16 | 3 | 4 | — |
STY
Store Y register
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| zeropage | 84 |
addr8 | 2 | 3 | — |
| zeropage,x | 94 |
addr8 | 2 | 4 | — |
| absolute | 8C |
addr16 | 3 | 4 | — |
TAX
Transfer accumulator to X
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| implied | AA |
— | 1 | 2 | NZ |
TAY
Transfer accumulator to Y
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| implied | A8 |
— | 1 | 2 | NZ |
TXA
Transfer X to accumulator
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| implied | 8A |
— | 1 | 2 | NZ |
TYA
Transfer Y to accumulator
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| implied | 98 |
— | 1 | 2 | NZ |
TSX
Transfer stack pointer to X
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| implied | BA |
— | 1 | 2 | NZ |
TXS
Transfer X to stack pointer
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| implied | 9A |
— | 1 | 2 | — |
PHA
Push accumulator
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| implied | 48 |
— | 1 | 3 | — |
PLA
Pull accumulator
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| implied | 68 |
— | 1 | 4 | NZ |
PHP
Push processor status
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| implied | 08 |
— | 1 | 3 | — |
PLP
Pull processor status
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| implied | 28 |
— | 1 | 4 | NVDIZC |
INX
Increment X
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| implied | E8 |
— | 1 | 2 | NZ |
INY
Increment Y
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| implied | C8 |
— | 1 | 2 | NZ |
DEX
Decrement X
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| implied | CA |
— | 1 | 2 | NZ |
DEY
Decrement Y
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| implied | 88 |
— | 1 | 2 | NZ |
INC
Increment memory
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| zeropage | E6 |
addr8 | 2 | 5 | NZ |
| zeropage,x | F6 |
addr8 | 2 | 6 | NZ |
| absolute | EE |
addr16 | 3 | 6 | NZ |
| absolute,x | FE |
addr16 | 3 | 7 | NZ |
DEC
Decrement memory
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| zeropage | C6 |
addr8 | 2 | 5 | NZ |
| zeropage,x | D6 |
addr8 | 2 | 6 | NZ |
| absolute | CE |
addr16 | 3 | 6 | NZ |
| absolute,x | DE |
addr16 | 3 | 7 | NZ |
ADC
Add with carry
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| immediate | 69 |
imm8 | 2 | 2 | NZCV |
| zeropage | 65 |
addr8 | 2 | 3 | NZCV |
| zeropage,x | 75 |
addr8 | 2 | 4 | NZCV |
| absolute | 6D |
addr16 | 3 | 4 | NZCV |
| absolute,x | 7D |
addr16 | 3 | 4 +p | NZCV |
| absolute,y | 79 |
addr16 | 3 | 4 +p | NZCV |
| (indirect,x) | 61 |
addr8 | 2 | 6 | NZCV |
| (indirect),y | 71 |
addr8 | 2 | 5 +p | NZCV |
SBC
Subtract with carry
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| immediate | E9 |
imm8 | 2 | 2 | NZCV |
| zeropage | E5 |
addr8 | 2 | 3 | NZCV |
| zeropage,x | F5 |
addr8 | 2 | 4 | NZCV |
| absolute | ED |
addr16 | 3 | 4 | NZCV |
| absolute,x | FD |
addr16 | 3 | 4 +p | NZCV |
| absolute,y | F9 |
addr16 | 3 | 4 +p | NZCV |
| (indirect,x) | E1 |
addr8 | 2 | 6 | NZCV |
| (indirect),y | F1 |
addr8 | 2 | 5 +p | NZCV |
AND
Logical AND
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| immediate | 29 |
imm8 | 2 | 2 | NZ |
| zeropage | 25 |
addr8 | 2 | 3 | NZ |
| zeropage,x | 35 |
addr8 | 2 | 4 | NZ |
| absolute | 2D |
addr16 | 3 | 4 | NZ |
| absolute,x | 3D |
addr16 | 3 | 4 +p | NZ |
| absolute,y | 39 |
addr16 | 3 | 4 +p | NZ |
| (indirect,x) | 21 |
addr8 | 2 | 6 | NZ |
| (indirect),y | 31 |
addr8 | 2 | 5 +p | NZ |
ORA
Logical inclusive OR
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| immediate | 09 |
imm8 | 2 | 2 | NZ |
| zeropage | 05 |
addr8 | 2 | 3 | NZ |
| zeropage,x | 15 |
addr8 | 2 | 4 | NZ |
| absolute | 0D |
addr16 | 3 | 4 | NZ |
| absolute,x | 1D |
addr16 | 3 | 4 +p | NZ |
| absolute,y | 19 |
addr16 | 3 | 4 +p | NZ |
| (indirect,x) | 01 |
addr8 | 2 | 6 | NZ |
| (indirect),y | 11 |
addr8 | 2 | 5 +p | NZ |
EOR
Exclusive OR
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| immediate | 49 |
imm8 | 2 | 2 | NZ |
| zeropage | 45 |
addr8 | 2 | 3 | NZ |
| zeropage,x | 55 |
addr8 | 2 | 4 | NZ |
| absolute | 4D |
addr16 | 3 | 4 | NZ |
| absolute,x | 5D |
addr16 | 3 | 4 +p | NZ |
| absolute,y | 59 |
addr16 | 3 | 4 +p | NZ |
| (indirect,x) | 41 |
addr8 | 2 | 6 | NZ |
| (indirect),y | 51 |
addr8 | 2 | 5 +p | NZ |
CMP
Compare accumulator
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| immediate | C9 |
imm8 | 2 | 2 | NZC |
| zeropage | C5 |
addr8 | 2 | 3 | NZC |
| zeropage,x | D5 |
addr8 | 2 | 4 | NZC |
| absolute | CD |
addr16 | 3 | 4 | NZC |
| absolute,x | DD |
addr16 | 3 | 4 +p | NZC |
| absolute,y | D9 |
addr16 | 3 | 4 +p | NZC |
| (indirect,x) | C1 |
addr8 | 2 | 6 | NZC |
| (indirect),y | D1 |
addr8 | 2 | 5 +p | NZC |
CPX
Compare X register
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| immediate | E0 |
imm8 | 2 | 2 | NZC |
| zeropage | E4 |
addr8 | 2 | 3 | NZC |
| absolute | EC |
addr16 | 3 | 4 | NZC |
CPY
Compare Y register
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| immediate | C0 |
imm8 | 2 | 2 | NZC |
| zeropage | C4 |
addr8 | 2 | 3 | NZC |
| absolute | CC |
addr16 | 3 | 4 | NZC |
BIT
Bit test
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| zeropage | 24 |
addr8 | 2 | 3 | NZV |
| absolute | 2C |
addr16 | 3 | 4 | NZV |
ASL
Arithmetic shift left
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| accumulator | 0A |
— | 1 | 2 | NZC |
| zeropage | 06 |
addr8 | 2 | 5 | NZC |
| zeropage,x | 16 |
addr8 | 2 | 6 | NZC |
| absolute | 0E |
addr16 | 3 | 6 | NZC |
| absolute,x | 1E |
addr16 | 3 | 7 | NZC |
LSR
Logical shift right
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| accumulator | 4A |
— | 1 | 2 | NZC |
| zeropage | 46 |
addr8 | 2 | 5 | NZC |
| zeropage,x | 56 |
addr8 | 2 | 6 | NZC |
| absolute | 4E |
addr16 | 3 | 6 | NZC |
| absolute,x | 5E |
addr16 | 3 | 7 | NZC |
ROL
Rotate left
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| accumulator | 2A |
— | 1 | 2 | NZC |
| zeropage | 26 |
addr8 | 2 | 5 | NZC |
| zeropage,x | 36 |
addr8 | 2 | 6 | NZC |
| absolute | 2E |
addr16 | 3 | 6 | NZC |
| absolute,x | 3E |
addr16 | 3 | 7 | NZC |
ROR
Rotate right
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| accumulator | 6A |
— | 1 | 2 | NZC |
| zeropage | 66 |
addr8 | 2 | 5 | NZC |
| zeropage,x | 76 |
addr8 | 2 | 6 | NZC |
| absolute | 6E |
addr16 | 3 | 6 | NZC |
| absolute,x | 7E |
addr16 | 3 | 7 | NZC |
JMP
Jump
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| absolute | 4C |
addr16 | 3 | 3 | — |
| indirect | 6C |
addr16 | 3 | 5 | — |
JSR
Jump to subroutine
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| absolute | 20 |
addr16 | 3 | 6 | — |
RTS
Return from subroutine
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| implied | 60 |
— | 1 | 6 | — |
RTI
Return from interrupt
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| implied | 40 |
— | 1 | 6 | NVDIZC |
BRK
Force interrupt
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| implied | 00 |
— | 1 | 7 | I |
NOP
No operation
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| implied | EA |
— | 1 | 2 | — |
BCC
Branch if carry clear
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| relative | 90 |
rel8 | 2 | 2 +t +p | — |
BCS
Branch if carry set
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| relative | B0 |
rel8 | 2 | 2 +t +p | — |
BEQ
Branch if equal
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| relative | F0 |
rel8 | 2 | 2 +t +p | — |
BMI
Branch if minus
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| relative | 30 |
rel8 | 2 | 2 +t +p | — |
BNE
Branch if not equal
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| relative | D0 |
rel8 | 2 | 2 +t +p | — |
BPL
Branch if positive
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| relative | 10 |
rel8 | 2 | 2 +t +p | — |
BVC
Branch if overflow clear
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| relative | 50 |
rel8 | 2 | 2 +t +p | — |
BVS
Branch if overflow set
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| relative | 70 |
rel8 | 2 | 2 +t +p | — |
CLC
Clear carry
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| implied | 18 |
— | 1 | 2 | C |
SEC
Set carry
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| implied | 38 |
— | 1 | 2 | C |
CLI
Clear interrupt disable
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| implied | 58 |
— | 1 | 2 | I |
SEI
Set interrupt disable
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| implied | 78 |
— | 1 | 2 | I |
CLD
Clear decimal
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| implied | D8 |
— | 1 | 2 | D |
SED
Set decimal
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| implied | F8 |
— | 1 | 2 | D |
CLV
Clear overflow
| Mode | Opcode | Operands | Bytes | Cycles | Flags |
|---|---|---|---|---|---|
| implied | B8 |
— | 1 | 2 | V |
Machines
Nintendo Entertainment System, Apple II, Atari 8-bit, BBC Micro, Commodore VIC-20, Commodore PET, MOS KIM-1, Oric Atmos, Commodore 64, Commodore 128
Sources
Encodings on this page were taken from:
- 6502 User’s Manual — MOS Technology, 1984
- Programming the 6502 — Rodnay Zaks, 1983