65C816命令表

このページはSFC/SNESのCPUである65C816の命令コードをまとめたページです。左のサイドメニューから検索してください。

○表の見方

命令表は以下のような構成になっています。(スペースの都合上、下には一部のみ掲載しています)

LDA (Load the Accumulator with Memory) 

アキュムレータに値をロードします。
アキュムレータが1バイト幅の場合は指定アドレスの内容を、2バイト幅の場合は指定アドレスの内容を下位バイトとして、指定アドレス+1にある内容を上位バイトとして読み込みます。
この命令で変更されうるフラグはネガティブフラグとゼロフラグとなります。

OC
文法
アドレッシングモード
バイト数
サイクル

A9 LDA #$??
LDA #$????
Immediate 2
3
2
3
 
AD LDA $???? Absolute 3 4  
AF LDA $?????? Absolute Long 4 5 1
A5 LDA $?? Direct Page 2 3 1


アキュムレータが16bit幅の場合、1サイクル追加
1:ダイレクトページレジスタの下位バイトが0で無い場合は1サイクル追加
2:インデックスの追加時にページ境界をまたぐ場合は1サイクル追加


コード例

LDA $D3          //16bit幅で読み込み
AND #$00FF       //上位バイトをクリア
ASL A            //左シフト(2倍)
TAX              //Xレジスタに転送
LDA $FE0000,x
RAMの$FE0000+(Xレジスタの内容)に格納されている値をアキュムレータに読み込みます。(5行目)
ちなみにDK2の場合、このコードを走らせることでスプライト配置データへのポインタを取得することが出来ます。途中で使っている命令については別ページに説明がありますのでそちらを参照してください。

① 命令の名前と説明
ニーモニックと命令の内容を説明しています。プロセッサステータスレジスタのフラグ変化もここに記載してありますので注意してください。
 
② オペコード
対応する命令番号を表します。
 
③ 文法
アセンブラに通すときの構文を示しました。標準的な構文を掲載していますがアセンブラによっては異なる場合があります。
 
④ アドレッシングモード
オペランドのアドレッシングモードを示しました。アドレッシングモードの詳細はこちらをご覧ください。
 
⑤ バイト数
オペコードとオペランドを含めた命令長です。
 
⑥ サイクル
命令を実行するのにかかる時間です。
 
⑦ 注
命令を使用する上で気をつけておくべき事項を示しました。
 
⑧ コード例
一部の命令にはコード例として実際に翻訳できるコードを示しました。それぞれの例には簡単に解説をつけています。
 

○早見表の見方

ニーモニックあるいはオペコードの早見に便利なように一覧形式にしたものです。早見表は以下のような構成になっています。

OC
オペランド
ニーモニック
内容
フラグ変化
アドレッシングモード
バイト
サイクル
00 aa BRK #$aa 実行中のプログラムを中断し、割り込みを行う。 ----di--- Stack / Interrupt 2 7
01 aa ORA ($aa,x) Aレジスタとメモリの論理和 n-----z-- Direct Page Indexed Indirect, X 2 6
02 aa COP #$aa コプロセッサによる割り込みを行う ----di--- Stack / Interrupt 2 7
03 aa ORA $aa,s Aレジスタとメモリの論理和 n-----z-- Stack Relative 2 4

① オペコード
命令番号を表します。
 
② オペランド
オペコードの引数を表します。
 
③ ニーモニック
アセンブラに通すときの構文を示しました。標準的な構文を掲載していますがアセンブラによっては異なる場合があります。
 
④ 内容
命令の処理内容を示しました。紙面の都合上解説は最小限にとどめています。詳しい解説が必要な場合は個別ページで確認してください。
 
⑤ フラグ変化
その命令によって変化されうるフラグです。左から順にNVMXDIZCEです。(ステータスレジスタの上位bitからの並び順)
- 変化なし
n ネガティブフラグ
v オーバーフローフラグ
m メモリモードフラグ
x インデクスモードフラグ
d デシマルフラグ
i インタラプトフラグ
z ゼロフラグ
c キャリーフラグ
e エミュレーションフラグ
 
⑥ アドレッシングモード
オペランドのアドレッシングモードを示しました。アドレッシングモードの詳細はこちらをご覧ください。
 
⑦ バイト数
オペコードとオペランドを含めた命令長です。
 
⑧ サイクル
命令を実行するのにかかる時間です。