ドラクエ風RPGファミコンプログラム レジスタとアドレッシングモード
第19回
【アセンブラ入門編】
『レジスタとアドレッシングモード』
1.レジスタの種類
P:プロセッサステータス(フラグレジスタ)
*演算結果の状態を保持する。
A:アキュムレータ
*算術演算、論理演算、BITシフト、ローテト等の演算用。
X:インデックスレジスタX
*インデックス用途、カウンタ、スタックポインタへのアクセス。
Y:インデックスレジスタY
*インデックス用途、カウンタ。
PC:プログラムカウンタ
*現在実行中のアドレス。
S:スタックポインタ
*PUSH、PULL等のレジスタの退避用メモリ。
【ステイタスレジスタ】
⑴BIT0 キャリーフラグ:符号なしオーバーフローが発生したら1、さもなくば0。
⑵BIT1ゼロフラグ:算術論理演算、ロード命令を実行した後、
結果がゼロのときセットされる。
⑶BIT2割り込み禁止フラグ:セットするとIRQ、BRK割り込みが禁止される。
⑷BIT3デシマルフラグ:ファミコンのCPUでは、カットされた機能。
⑸BIT4ブレイクコマンドフラグ:BRK割り込み発生時にセットされる、IRQとの識別 用。
⑹BIT5予約フラグ:常に1がセット。
⑺BIT6オーバーフローフラグ:演算前後のオペランドが、$7F~$80をまたぐとセ ット。
⑻BIT7ネガティブフラグ(マイナスフラグ):演算の結果、BIT7が1の時セットさる。
2.アドレッシングモード
①イミディエイト:8bitの即値(♯を付ける。)
②アブソリュート:16bitのアドレス($を付ける。)
③ゼロページ:$0000~$00ffまでのメモリを8bitで表す
④リラティブ:符号付8bit値(条件分岐命令で使用。)
⑤ゼロページ・インデックスレジスタX:$00✛Xで示すアドレス。
⑥ゼロページ・インデックスレジスタY:$00✛Yで示すアドレス。
⑦アブソリュート・インデックスレジスタX:$e000+Xで示すアドレス。
➇アブソリュート・インデックスレジスタY:$e000+Yで示すアドレス。
⑨インデックストX・インダイレクト:$00+Xで示すアドレスの16bit値
の8bit値をAにロード。
⑩インダイレクト・インデックストY:$00で示すアドレスの16bit値+Yの
8bitをAにロード。
3.ジャンプ命令と条件分岐命令
【ジャンプ命令】
⁂jmp $8000 は$8000番地にジャンプせよという命令、
jmp LAVEL のように書のが通常。
[例]
loop:
jmp loop
⁂jmp ($8000) という命令もあるが、ここでは触れない。
【条件分岐命令命令】
ラベル名:
⁂bne ラベル名 は演算・比較の結果がゼロでなかったら、ラベル名へ
ジャンプせよという命令、この他にも色々な条件分岐命令があります。
*次回からは、プログラム上で、検証していきます。