Liste der 6502 OP-Codes

Mnemonicübersicht

* = zusätzlich ein Taktzyklus wenn die Grenze einer Seite überschritten wird (z.B. $00ff -> $0100)
+ = zusätzlich 1 Taktzyklus wenn Branch ausgeführt wird

MnemonicOP-CodeLänge in BytesTaktzyklenFlags         
ADCAdd with Carry
Addiert Akkumulator und Operand inkl. Carry. Falls das Ergebnis größer als 255 ist, wird der Übertrag im Carryflag vermerkt.
NV----ZC
ADC #$xx$6922 
ADC $xx$6523 
ADC $xx,X$7524 
ADC $xxxx$6D34 
ADC $xxxx,X$7D34* 
ADC $xxxx,Y$7934* 
ADC ($xx,X)$6126 
ADC ($xx),Y$7125* 
ANDLogical AND
Logisches UND der einzelnen Bits zwischen Akkumulator und Operand
N-----Z-
AND #$xx$2922 
AND $xx$2523 
AND $xx,X$3524 
AND $xxxx$2D34 
AND $xxxx,X$3D34* 
AND $xxxx,Y$3934* 
AND ($xx,X)$2126 
AND ($xx),Y$3125 
ASLArithmetic Shift Left
Arithmetisches Verschieben nach Links. Bit 7 das dabei wegfällt wird in das Carry geschoben.
N-----ZC
ASL $0A12 
ASL $xx$0625 
ASL $xx,X$1626 
ASL $xxxx$0E36 
ASL $xxxx,X$1E37 
BCCBranch on Carry Clear
Verzweige wenn das Carry nicht gesetzt ist.
--------
BCC $xxxx$9022*+ 
BCSBranch on Carry Set
Verzweige wenn das Carry gesetzt ist.
--------
BCS $xxxx$B022*+ 
BEQBranch on Equal
Verzweige wenn das Zero Flag gesetzt ist.
--------
BEQ $xxxx$F022*+ 
BITTest Bits
NV----Z-
BIT $xx$2423 
BIT $xxxx$2C34 
BMIBranch on Minus
Verzweige wenn das N-Flag gesetzt ist.
--------
BMI $xxxx$3022*+ 
BNEBranch on Not Equal
Verzweige wenn das Zero-Flag gelöscht ist.
--------
BNE $xxxx$D022*+ 
BPLBranch on Plus
Verzweige wenn das N-Flag gelöscht ist.
--------
BPL $xxxx$1022*+ 
BRKBreak
CPU springt NMI Vektor als Breakpoint an
---B----
BRK $0017 
BVCBranch on Overflow Clear
Verzweige wenn das V-Flag geköscht ist.
--------
BVC $xxxx$5022*+ 
BVSBranch on Overflow Set
Verzweige wenn das V-Flag gesetzt ist.
--------
BVS $xxxx$7022*+ 
CLCClear Carry Flag
Lösche das Carry
-------C
CLC $1812 
CLDClear Decimal Flag
Lösche das Dezimal Flag, der Prozessor geht zurück in den Hexadezimalmodus.
----D---
CLD $D812 
CLIClear Interrupt Flag
Lösche das Interrupt Flag, Interrupts werden ab hier wieder zugelassen (nicht NMI)
-----I--
CLI $5812 
CLVClear Overflow Flag
Lösche das Overflow Flag
-V------
CLV $B812 
CMPCompare with Accumulator
Vergleicht den Inhalt des Akkumulators mit dem Operanden (im Endeffekt eine einfache Substraktion, nur daß das Ergebnis nicht in den Akkumulator übertragen wird) Dabei werden folgende Flags beeinflußt: Negative, Overflow, Carry, Zero
N-----ZC
CMP #$xx$C922 
CMP $xx$C523 
CMP $xx,X$D524 
CMP $xxxx$CD34 
CMP $xxxx,X$DD34* 
CMP $xxxx,Y$D934* 
CMP ($xx,X)$C126 
CMP ($xx),Y$D125* 
CPXCompare with X-Register
Wie CMP, nur mit X-Register anstatt Akkumulator
N-----ZC
CPX #$xx$E022 
CPX $xx$E423 
CPX $xxxx$EC34 
CPYCompare with Y-Register
Wie CMP, nur mit Y-Register anstatt Akkumulator
N-----ZC
CPY #$xx$C022 
CPY $xx$C423 
CPY $xxxx$CC34 
DECDecrement Memory
Erniedrigt den Wert einer Speicherzelle um 1, wenn 0 erniedirgt wird, dann wird wieder bei 255 begonnen. Beeinflußt die gleichen Flags wie CMP
N-----Z-
DEC $xx$C625 
DEC $xx,X$D626 
DEC $xxxx$CE36 
DEC $xxxx,X$DE37 
DEXDecrement X-Register
Erniedrigt den Wert des X-Registers um 1
N-----Z-
DEX $CA12 
DEYDecrement Y-Register
Erniedrigt den Wert des Y-Registers um 1
N-----Z-
DEY $8812 
EORLogical EOR
Logisches EOR der einzelnen Bits von Akkumulator und Operand.
N-----Z-
EOR #$xx$4922 
EOR $xx$4523 
EOR $xx,X$5524 
EOR $xxxx$4D34 
EOR $xxxx,X$5D34* 
EOR $xxxx,Y$5934* 
EOR ($xx,X)$4126 
EOR ($xx),Y$5125* 
INCIncrement Memory
Wie DEC nur daß hier der Wert um 1 erhöht wird.
N-----Z-
INC $xx$E625 
INC $xx,X$F626 
INC $xxxx$EE36 
INC $xxxx,X$FE37 
INXIncrement X-Register
Erhöht den Wert des X-Registers um 1
N-----Z-
INX $E812 
INYIncrement Y-Register
Erhöht den Wert des Y-Registers um 1
N-----Z-
INY $C812 
JMPJump
Springt an die angegebene 16 Bit Adresse
--------
JMP $xxxx$4C33 
JMP ($xxxx)$6C35 
JSRJump to Subroutine
Verzweigt an die angegebene 16 Bit Adresse, nachdem der Prgrammcounter auf dem Stack gescihert wurde. Ein RTS lässt den Prozessor wieder am nachfolgenden Befehl weiterarbeiten (PC wird wieder vom Stack geholt).
--------
JSR $xxxx$2036 
LDALoad Accumulator
Lädt den Akkumulator mit dem Wert des Operanden
N-----Z-
LDA #$xx$A922 
LDA $xx$A523 
LDA $xx,X$B524 
LDA $xxxx$AD34 
LDA $xxxx,X$BD34* 
LDA $xxxx,Y$B934* 
LDA ($xx,X)$A126 
LDA ($xx),Y$B125* 
LDXLoad X-Register
Lädt das X-Register mit dem Wert des Operanden
N-----Z-
LDX #$xx$A222 
LDX $xx$A623 
LDX $xx,Y$B624 
LDX $xxxx$AE34 
LDX $xxxx,Y$BE34* 
LDYLoad Y-Register
Lädt das Y-Register mit dem Wert des Operanden
N-----Z-
LDY #$xx$A022 
LDY $xx$A423 
LDY $xx,X$B424 
LDY $xxxx$AC34 
LDY $xxxx,X$BC34* 
LSRLogical Shift Right
Schiebt alle Bits um 1 nach Rechts. Bit 0 wird in das Carry geschoben.
N-----ZC
LSR $4A12 
LSR $xx$4625 
LSR $xx,X$5626 
LSR $xxxx$4E36 
LSR $xxxx,X$5E37 
NOPNo Operation
2 Taktzyklen aussetzten
--------
NOP $EA12 
ORALogical OR
Logisches OR der einzelnen Bits von Akkumulator und Operand.
N-----Z-
ORA #$xx$0922 
ORA $xx$0523 
ORA $xx,X$1524 
ORA $xxxx$0D34 
ORA $xxxx,X$1D34* 
ORA $xxxx,Y$1934* 
ORA ($xx,X)$0126 
ORA ($xx),Y$1125* 
PHAPush Accumulator on Stack
Schiebt den Inhalt des Akkumulators auf das Stack
--------
PHA $4813 
PHPPush Processorstatus on Stack
Schiebt den Prozessorstatus auf das Stack
--------
PHP $0813 
PLAPull Accumulator from Stack
Holt den letzten Wert vom Stack und lädt den Akkumulator damit
N-----Z-
PLA $6814 
PLPPull Processorstatus from Stack
Holt den letzten Wert vom Stack und setzt den Prozessorstatus damit
NV-BDIZC
PLP $2814 
ROLRotate Left
Rotiert alle 8 Bits nach Links. Bit 0 erhält den Wert des Carry. Danach nimmt das Carry den Wert von Bit 7 an.
N-----ZC
ROL $2A12 
ROL $xx$2625 
ROL $xx,X$3626 
ROL $xxxx$2E36 
ROL $xxxx,X$3E37 
RORRotate Right
Wie ROL nur andere Richtung
N-----ZC
ROR $6A12 
ROR $xx$6625 
ROR $xx,X$7626 
ROR $xxxx$6E36 
ROR $xxxx,X$7E37 
RTIReturn from Interrupt
Wie RTS, nur daß hier an die Stelle zurückgesprungen wird, an der ein Interrupt ausgelöst wurde.
NV-BDIZC
RTI $4016 
RTSReturn from Subroutine
Kehrt an den Punkt der letzten Verzweigung mittels JSR zurück.
--------
RTS $6016 
SBCSubstract with Carry
Subtrahiert den Operanden vom Akkumulator. Ist das Carry gesetzt wird nur der Operand subtrahiert, ist es nicht gesetzt, wird der Operand + 1 subtrahiert. Der Übertrag wird im Carry vermerkt.
NV----ZC
SBC #$xx$E922 
SBC $xx$E523 
SBC $xx,X$F524 
SBC $xxxx$ED34 
SBC $xxxx,X$FD34* 
SBC $xxxx,Y$F934* 
SBC ($xx,X)$E126 
SBC ($xx),Y$F125* 
SECSet Carry Flag
Setzt das Carryflag
-------C
SEC $3812 
SEDSet Decimal Flag
Setzt das Dezimal Flag
----D---
SED $F812 
SEISet Interrupt Flag
Setzt das Interrupt Flag. Ab diesem Kommando erfolgt kein Interrupt mehr (ausgenommen NMI)
-----I--
SEI $7812 
STAStore Accumulator
Speichert den Inhalt des Akkumulators in der angegebenen Adresse
--------
STA $xx$8523 
STA $xx,X$9524 
STA $xxxx$8D34 
STA $xxxx,X$9D35 
STA $xxxx,Y$9935 
STA ($xx,X)$8126 
STA ($xx),Y$9126 
STXStore X-Register
Speichert den Inhalt des X-Registers in der angegebenen Adresse
--------
STX $xx$8623 
STX $xx,Y$9624 
STX $xxxx$8E34 
STYStore Y-Register
Speichert den Inhalt des Y-Registers in der angegebenen Adresse
--------
STY $xx$8423 
STY $xx,X$9424 
STY $xxxx$8C34 
TAXTransfer Accumulator to X-Register
Überträgt den Wert des Akkumulators in das X-Register
N-----Z-
TAX $AA12 
TAYTransfer Accumulator to Y-Register
Überträgt den Wert des Akkumulators in das Y-Register
N-----Z-
TAY $A812 
TSXTransfer Stackpointer to X-Register
Überträgt den Wert des Stackpointers in das X-Register
N-----Z-
TSX $BA12 
TXATransfer X-Register to Accumulator
Überträgt den Wert des X-Register in den Akkumulator
N-----Z-
TXA $8A12 
TXSTransfer X-Register to Stackpointer
Überträgt den Wert des X-Register in den Stackpointer
--------
TXS $9A12 
TYATransfer Y-Register to Accumulator
Überträgt den Wert des Y-Register in den Akkumulator
N-----Z-
TYA $9812