Informacje dodatkowe     Instrukcje procesora 6502


Porównywanie wartości argumentów instrukcją CMP/CPX/CPY Arg:
ARGUMENTY
FLAGI
N Z C
A/X/Y < Arg
 1 0 0
A/X/Y = Arg
 0 1 1
A/X/Y > Arg
 0 0 1

Instrukcje skoków:
INSTRUKCJA
OPIS
BCS rr
  skok jeśli C=1
BCC rr
  skok jeśli C=0
BEQ rr
  skok jeśli Z=1
BNE rr
  skok jeśli Z=0
BMI rr
  skok jeśli N=1
BPL rr
  skok jeśli N=0
BVS rr
  skok jeśli V=1
BVC rr
  skok jeśli V=0
JMP
  skok bezwarunkowy  
  pod dowolny adres
Skoki Bxx mogą być wykonywane w zakresie od -128 (rr=$80) do +127 (rr=$7F) bajtów.

Spis instrukcji:
NAZWA
TRYBY
KOD
BAJTYCYKLE
FLAGI
PEŁNA NAZWA
ADC
#$dd
$aa
$aa, X
$aaaa
$aaaa, X
$aaaa, Y
($aa, X)
($aa), Y
69dd
65aa
75aa
6Daaaa
7Daaaa
79aaaa
61aa
71aa
2
2
2
3
3
3
2
2
2
3
4
4
4+
4+
6
5+
NV----ZC
ADd to accumulator with Carry
AND
#$dd
$aa
$aa, X
$aaaa
$aaaa, X
$aaaa, Y
($aa, X)
($aa), Y
29dd
25aa
35aa
2Daaaa
3Daaaa
39aaaa
21aa
31aa
2
2
2
3
3
3
2
2
2
3
4
4
4+
4+
6
5+
N-----Z-
logical AND with accumulator
ASL
A
$aa
$aa, X
$aaaa
$aaaa, X
0A
06aa
16aa
0Eaaaa
1Eaaaa
1
2
2
3
3
2
5
6
6
7
N-----ZC
Arithmetic Shift Left one bit
BCC
  rr90rr
2
2++
--------
Branch if Carry Clear
BCS
  rrB0rr
2
2++
--------
Branch if Carry Set
BEQ
  rrF0rr
2
2++
--------
Branch if EQual to zero
BIT
  $aa
  $aaaa
24aa
2Caaaa
2
3
3
4
NV----Z-
Test memory BITs with accumulator
BMI
  rr30rr
2
2++
--------
Branch if MInus
BNE
  rrD0rr
2
2++
--------
Branch if Not Equal to zero
BPL
  rr10rr
2
2++
--------
Branch if PLus
BRK
 00
1
7
---B-I--
BReaK
BVC
  rr50rr
2
2++
--------
Branch if oVerflow Clear
BVS
  rr70rr
2
2++
--------
Branch if oVerflow Set
CLC
 18
1
2
-------C
CLear Carry flag
CLD
 D8
1
2
----D---
CLear Decimal flag
CLI
 58
1
2
-----I--
CLear Interrupt flag
CLV
 B8
1
2
-V------
CLear oVerflow flag
CMP
#$dd
$aa
$aa, X
$aaaa
$aaaa, X
$aaaa, Y
($aa, X)
($aa), Y
C9dd
C5aa
D5aa
CDaaaa
DDaaaa
D9aaaa
C1aa
D1aa
2
2
2
3
3
3
2
2
2
3
4
4
4+
4+
6
5+
N-----ZC
CoMPare with accumulator
CPX
  #$dd
  $aa
  $aaaa
E0dd
E4aa
ECaaaa
2
2
3
2
3
4
N-----ZC
ComPare with X register
CPY
  #$dd
  $aa
  $aaaa
C0dd
C4aa
CCaaaa
2
2
3
2
3
4
N-----ZC
ComPare with Y register
DEC
$aa
$aa, X
$aaaa
$aaaa, X
C6aa
D6aa
CEaaaa
DEaaaa
2
2
3
3
5
6
6
7
N-----Z-
DECrement memory by one
DEX
 CA
1
2
N-----Z-
DEcrement X register by one
DEY
 88
1
2
N-----Z-
DEcrement Y register by one
EOR
#$dd
$aa
$aa, X
$aaaa
$aaaa, X
$aaaa, Y
($aa, X)
($aa), Y
49dd
45aa
55aa
4Daaaa
5Daaaa
59aaaa
41aa
51aa
2
2
2
3
3
3
2
2
2
3
4
4
4+
4+
6
5+
N-----Z-
logical Exclusive-OR with accumulator
INC
$aa
$aa, X
$aaaa
$aaaa, X
E6aa
F6aa
EEaaaa
FEaaaa
2
2
3
3
5
6
6
7
N-----Z-
INCrement memory by one
INX
 E8
1
2
N-----Z-
INcrement X register by one
INY
 C8
1
2
N-----Z-
INcrement Y register by one
JMP
  $aaaa
  ($aaaa)
4Caaaa
6Caaaa
3
3
3
5
--------
JuMP to memory address
JSR
  $aaaa20aaaa
3
6
--------
Jump to SubRoutine address
LDA
#$dd
$aa
$aa, X
$aaaa
$aaaa, X
$aaaa, Y
($aa, X)
($aa), Y
A9dd
A5aa
B5aa
ADaaaa
BDaaaa
B9aaaa
A1aa
B1aa
2
2
2
3
3
3
2
2
2
3
4
4
4+
4+
6
5+
N-----Z-
LoaD to Accumulator
LDX
#$dd
$aa
$aa, Y
$aaaa
$aaaa, Y
A2dd
A6aa
B6aa
AEaaaa
BEaaaa
2
2
2
3
3
2
3
4
4
4+
N-----Z-
LoaD to X register
LDY
#$dd
$aa
$aa, X
$aaaa
$aaaa, X
A0dd
A4aa
B4aa
ACaaaa
BCaaaa
2
2
2
3
3
2
3
4
4
4+
N-----Z-
LoaD to Y register
LSR
A
$aa
$aa, X
$aaaa
$aaaa, X
4A
46aa
56aa
4Eaaaa
5Eaaaa
1
2
2
3
3
2
5
6
6
7
N-----ZC
Logical Shift Right one bit
NOP
 EA
1
2
--------
NO oPeration
ORA
#$dd
$aa
$aa, X
$aaaa
$aaaa, X
$aaaa, Y
($aa, X)
($aa), Y
09dd
05aa
15aa
0Daaaa
1Daaaa
19aaaa
01aa
11aa
2
2
2
3
3
3
2
2
2
3
4
4
4+
4+
6
5+
N-----Z-
logical OR with Accumulator
PHA
 48
1
3
--------
PusH Accumulator on stack
PHP
 08
1
3
--------
PusH Processor status on stack
PLA
 68
1
4
N-----Z-
PulL Accumulator from stack
PLP
 28
1
4
NV-BDIZC
PulL Processor status from stack
ROL
A
$aa
$aa, X
$aaaa
$aaaa, X
2A
26aa
36aa
2Eaaaa
3Eaaaa
1
2
2
3
3
2
5
6
6
7
N-----ZC
ROtate Left one bit
ROR
A
$aa
$aa, X
$aaaa
$aaaa, X
6A
66aa
76aa
6Eaaaa
7Eaaaa
1
2
2
3
3
2
5
6
6
7
N-----ZC
ROtate Right one bit
RTI
 40
1
6
NV-BDIZC
ReTurn from Interrupt
RTS
 60
1
6
--------
ReTurn from Subroutine
SBC
#$dd
$aa
$aa, X
$aaaa
$aaaa, X
$aaaa, Y
($aa, X)
($aa), Y
E9dd
E5aa
F5aa
EDaaaa
FDaaaa
F9aaaa
E1aa
F1aa
2
2
2
3
3
3
2
2
2
3
4
4
4+
4+
6
5+
NV----ZC
SuBtract from accumulator with Carry
SEC
 38
1
2
-------C
SEt Carry flag
SED
 F8
1
2
----D---
SEt Decimal flag
SEI
 78
1
2
-----I--
SEt Interrupt flag
STA
$aa
$aa, X
$aaaa
$aaaa, X
$aaaa, Y
($aa, X)
($aa), Y
85aa
95aa
8Daaaa
9Daaaa
99aaaa
81aa
91aa
2
2
3
3
3
2
2
3
4
4
5
5
6
6
--------
STore Accumulator in memory
STX
  $aa
  $aa, Y
  $aaaa
86aa
96aa
8Eaaaa
2
2
3
3
4
4
--------
STore X register in memory
STY
  $aa
  $aa, X
  $aaaa
84aa
94aa
8Caaaa
2
2
3
3
4
4
--------
STore Y register in memory
TAX
 AA
1
2
N-----Z-
Transfer Accumulator to X register
TAY
 A8
1
2
N-----Z-
Transfer Accumulator to Y register
TSX
 BA
1
2
N-----Z-
Transfer Stack pointer to X register
TXA
 8A
1
2
N-----Z-
Transfer X register to Accumulator
TXS
 9A
1
2
--------
Transfer X register to Stack pointer
TYA
 98
1
2
N-----Z-
Transfer Y register to Accumulator

Oznaczenia dotyczące cykli zegarowych instrukcji:
  + - dodać 1 cykl, jeśli została przekroczona granica stron pamięci.
++ - dodać 1 cykl, jeśli skok został wykonany na tą samą stronę pamięci;
       dodać 2 cykle, jeśli skok został wykonany na sąsiednią stronę pamięci.

Objaśnienie:
aaaa - 16-bitowy adres w kodzie instrukcji jest zapisywany w systemie Little-Endian.
           Oznacza to, że najpierw znajduje się młodszy, a dopiero później starszy bajt adresu.
           Przykład: ROL $1234 = 2E3412.

Instrukcja ROR może nie działać na starszych egzemplarzach
procesora 6502 (wyprodukowanych przed czerwcem 1976 roku).