CPU6502の命令セット

アドレシングモード

OPCはオペコードを、A, X, Y, PCはレジスタを,
$??は任意の16進8bit値を表します.
名称 書式 説明
単体
Implied
OPC オペランドなし
アキュムレータ
Accumulator
OPC A Aレジスタに対する演算
即値
Imidiate
OPC #$?? 値を直接指定
絶対アドレス
Absolute
OPC $???? アドレスを直接指定
絶対アドレスX
Absolute X
OPC $????,X アドレスにXレジスタの値を加算したアドレスを指定
絶対アドレス
Absolute Y
OPC $????,Y アドレスにYレジスタの値を加算したアドレスを指定
ゼロページ
Zeropage
OPC <$?? ゼロページ内のアドレスの下位8bitを指定
ゼロページX
Zeropage X
OPC <$??,X ゼロページ内のアドレスにXレジスタの値を加算したアドレスの下位8bitを指定
ゼロページY
Zeropage Y
OPC <$??,Y ゼロページ内のアドレスにYレジスタの値を加算したアドレスの下位8bitを指定
相対アドレス
Relative
OPC $?? 現在のPCに指定した値を加算したアドレスを指定(このオペランド自体はアドレスではないことに注意)
間接アドレス
Indirect
OPC ($00??) ゼロページの$00??番地に格納されている値を下位アドレス、[$00??+1]番地の値を上位アドレスとして指定
間接アドレス
Indirect X
OPC ($00??,X) ゼロページの[$00??+X]番地の値を下位アドレス、[$00??+X+1]番地の値を上位アドレスとして指定
間接アドレスY
Indirect Y
OPC ($00??),Y Indirectの説明のようにして指定したアドレスにYレジスタの値を加算したアドレスを指定

※注意※
多くの6502アセンブラでは, 間接アドレスは丸括弧()で指定するようですが,
なぜかNESASMでは四角括弧[]を使います. 丸括弧()では間接アドレスだと認識されません.

ロード命令

LDA・・・Aレジスタに値を格納する。

即値A9
ゼロページA5
ゼロページXB5
絶対アドレスAD
絶対アドレスXBD
絶対アドレスYB9
間接アドレスXA1
間接アドレスYB1

LDX・・・Xレジスタに値を格納する。

即値A2
ゼロページA6
ゼロページYB6
絶対アドレスAE
絶対アドレスYBE

LDY・・・Yレジスタに値を格納する。

即値A0
ゼロページA4
ゼロページXB4
絶対アドレスAC
絶対アドレスXBC

ストア命令

STA・・・Aレジスタの値を指定アドレスに保存する。
ゼロページ85
ゼロページX95
絶対アドレス8D
絶対アドレスX9D
絶対アドレスY99
間接アドレスX81
間接アドレスY91

STX・・・Xレジスタの値を指定アドレスに保存する。
ゼロページ86
ゼロページY96
絶対アドレス8E

STY・・・Yレジスタの値を指定アドレスに保存する。
ゼロページ84
ゼロページX94
絶対アドレス8C

転送命令

TAX・・・Aレジスタの値をXレジスタに転送する。
単体AA

TAY・・・Aレジスタの値をYレジスタに転送する。
単体A8

TXA・・・Xレジスタの値をAレジスタに転送する。
単体8A

TYA・・・Yレジスタの値をAレジスタに転送する。
単体98

TXS・・・Xレジスタの値をスタックポインタに転送する。
単体9A

TSX・・・スタックポインタの値をXレジスタに転送する。
単体BA

比較命令

CMP・・・Aレジスタの値から減算するが、演算の結果は保存せず、キャリーフラグ、ゼロフラグ、符号フラグを変化させる。
即値C9
ゼロページC5
ゼロページXD5
絶対アドレスCD
絶対アドレスXDD
絶対アドレスYD9
間接アドレスXC1
間接アドレスYD1

CPX・・・Xレジスタの値から減算するが、演算の結果は保存せず、キャリーフラグ、ゼロフラグ、符号フラグを変化させる。
即値E0
ゼロページE4
絶対アドレスEC

CPY・・・Yレジスタの値から減算するが、演算の結果は保存せず、キャリーフラグ、ゼロフラグ、符号フラグを変化させる。
即値C0
ゼロページC4
絶対アドレスCC

演算命令

ADC・・・Aレジスタの値に指定した値とキャリーフラグを加算する。CLC命令とセットで用いることが多い。
即値69
ゼロページ65
ゼロページX75
絶対アドレス6D
絶対アドレスX7D
絶対アドレスY79
間接アドレスX61
間接アドレスY71

SBC・・・Aレジスタの値から指定した値とビット反転させたキャリーフラグを減算する。SEC命令とセットで用いることが多い。
即値E9
ゼロページE5
ゼロページXF5
絶対アドレスED
絶対アドレスXFD
絶対アドレスYF9
間接アドレスXE1
間接アドレスYF1

INC・・・指定アドレスの値に1を加算する。
ゼロページE6
ゼロページXF6
絶対アドレスEE
絶対アドレスXFE

INX・・・Xレジスタの値に1を加算する。
単体E8

INY・・・Yレジスタの値に1を加算する。
単体C8

DEC・・・指定アドレスの値から1を減算する。
ゼロページC6
ゼロページXD6
絶対アドレスCE
絶対アドレスXDE

DEX・・・Xレジスタの値から1を減算する。
単体CA

DEY・・・Yレジスタの値から1を減算する。
単体88

AND・・・Aレジスタの値と指定した値でAND演算をする。
即値29
ゼロページ25
ゼロページX35
絶対アドレス2D
絶対アドレスX3D
絶対アドレスY39
間接アドレスX21
間接アドレスY31

ORA・・・Aレジスタの値と指定した値でOR演算をする。
即値09
ゼロページ05
ゼロページX15
絶対アドレス0D
絶対アドレスX1D
絶対アドレスY19
間接アドレスX01
間接アドレスY11

EOR・・・Aレジスタの値と指定した値でXOR演算をする。
即値49
ゼロページ45
ゼロページX55
絶対アドレス4D
絶対アドレスX5D
絶対アドレスY59
間接アドレスX41
間接アドレスY51

シフト・ローテート

ASL・・・Aレジスタの値を左シフトする。その際元のビット7の値をキャリーフラグに、新しいビット0の値を0にする。
Aレジスタ0A
ゼロページ06
ゼロページX16
絶対アドレス0E
絶対アドレスX1E

LSR・・・Aレジスタの値を右シフトする。その際元のビット0の値をキャリーフラグに、新しいビット7の値を0にする。
Aレジスタ4A
ゼロページ46
ゼロページX56
絶対アドレス4E
絶対アドレスX5E

ROL・・・Aレジスタの値を左シフトする。その際元のビット7の値をキャリーフラグに、新しいビット0の値を元のキャリーフラグにする。
Aレジスタ2A
ゼロページ26
ゼロページX36
絶対アドレス2E
絶対アドレスX3E

ROR・・・Aレジスタの値を右シフトする。その際元のビット0の値をキャリーフラグに、新しいビット7の値を元のキャリーフラグにする。
Aレジスタ6A
ゼロページ66
ゼロページX76
絶対アドレス6E
絶対アドレスX7E

スタック命令

PHP・・・Pレジスタの値ををスタックへプッシュする。
単体08

PLP・・・Pレジスタの値ををスタックへプルする。
単体28

PHA・・・Aレジスタの値ををスタックへプッシュする。
単体48

PLA・・・Aレジスタの値ををスタックへプルする。
単体68

フラグ変更命令

CLC・・・キャリーフラグを0にする。
単体18

SEC・・・キャリーフラグを1にする。
単体38

CLI・・・割り込み禁止フラグを0にする。
単体58

SEI・・・割り込み禁止フラグを1にする。
単体78

CLV・・・オーバーフローフラグを0にする。
単体B8

CLD・・・デジマルモードフラグを0にする。しかし、この命令はNESではあまり意味がなく、慣例として最初に使用する。
単体D8

SED・・・デジマルモードフラグを1にする。しかし、この命令はNESではあまり意味がない。
単体F8

ジャンプ

JMP・・・指定アドレスにジャンプする。
絶対アドレス4C
間接アドレス6C

BCC・・・キャリーフラグが0ならば指定アドレスにジャンプする。
相対アドレス90

BCS・・・キャリーフラグが1ならば指定アドレスにジャンプする。
相対アドレスB0

BNE・・・ゼロフラグが0ならば指定アドレスにジャンプする。
相対アドレスD0

BEQ・・・ゼロフラグが1ならば指定アドレスにジャンプする。
相対アドレスF0

BVC・・・オーバーフローフラグが0ならば指定アドレスにジャンプする。
相対アドレス50

BVS・・・オーバーフローフラグが1ならば指定アドレスにジャンプする。
相対アドレス70

BPL・・・符号フラグが0ならば指定アドレスにジャンプする。
相対アドレス10

BMI・・・符号フラグが1ならば指定アドレスにジャンプする。
相対アドレス30

JSR・・・指定したサブルーチンへジャンプする。
絶対アドレス20

RTS・・・サブルーチンから復帰する。
単体60

割り込み命令

BRK・・・ソフトウェア割り込みを発生させる。
単体00

RTI・・・割り込み処理から復帰する。
単体40

その他の命令

BIT・・・Aレジスタの値と指定した値でAND演算をする。そして、その指定した値のビット7を符号フラグへ、ビット6をオーバーフローフラグへ転送する。
ゼロページ24
絶対アドレス2C

NOP・・・何もしない。
単体EA