H8/300H CPUの内部レジスタは、以下のように構成されている。
(1) 汎用レジスタ
ER0 ~ ER7
ただしER7はスタックポインタ(SP)としても使用可能。データ長は32bitで、上位16bitをE0~E7、15~8bitをR0H、下位8bitをR0Lとして分割して使用することも可能
例えばC言語では、一例として、
として使用される。(ERxなどの、xは各レジスタの番号)
(2) プログラムカウンタ (PC)
次に実行する(読み込む~フェッチという)機械語命令が保管されているメモリアドレスを示す。24bit長。
(3) コントロールレジスタ(CR)
演算結果やCPUの状態を制御(表示)するためのレジスタ。それぞれのbitが状態の制御や表示を行う。各ビットの詳細は以下のとおり。
いずれのビットも、Cでプログラミングを行う場合は、あまり意識する必要はない。アセンブラや機械語でプログラミングを行う際は、
重要。
例えば、以下の様なプログラムがあったとする。
L1: MOV.W R0, #1 // R0レジスタに1を代入 MOV.W R1, #1 // R1レジスタに1を代入 SUB.W R0,R1 // R0レジスタの値からR1レジスタの値を減算(R0の値は0) // この演算で結果が0になると、CRレジスタのビットZ(ゼロフラグ)が1になる BEQ L1 // CRレジスタのビットZが1の時、L1にジャンプ |
このプログラムでは、3行目のSUB命令でR0レジスタの値が0になる。演算結果が0になると、CRレジスタのビットのZが1になる。
この様に、演算の結果に応じてCRレジスタの該当するビットが変化する。
条件付きのジャンプ命令は、CRレジスタの各ビットを参照して、処理をジャンプするか、そのまま次の命令を継続するかを決める。