CPU内部レジスタ

H8/300H CPUの内部レジスタは、以下のように構成されている。



(1) 汎用レジスタ
 ER0 ~ ER7 ただしER7はスタックポインタ(SP)としても使用可能。データ長は32bitで、上位16bitをE0~E7、15~8bitをR0H、下位8bitをR0Lとして分割して使用することも可能
 例えばC言語では、一例として、

  • 32bitのint(unsigned int)型は ERx
  • 16bitのint(unsigned int)型は Rx
  • 8bitのchar(unsigned char)型は RxLもしくはRxH

 として使用される。(ERxなどの、xは各レジスタの番号)

(2) プログラムカウンタ (PC)
  次に実行する(読み込む~フェッチという)機械語命令が保管されているメモリアドレスを示す。24bit長。

(3) コントロールレジスタ(CR)
  演算結果やCPUの状態を制御(表示)するためのレジスタ。それぞれのbitが状態の制御や表示を行う。各ビットの詳細は以下のとおり。

  • キャリビット(C):加算などで,最上位ビットのキャリ(carry:桁上がり)があるときや,減算などで,最上位ビットのボロー(borrow:借り)が生じたとき,1になる。
  • オーバーフローフラグ(V):演算の結果,汎用レジスタが扱うことが出来る数値の範囲を越え(overflow),正しい答えが得られない時,1となる。
  • ゼロフラグ(Z):値がゼロになると1になる。
  • ナガティブフラグ(N):値が負数(negative)になると1になる。最上位ビットがセットされる。
  • ユーザフラグ(U):利用者が自由に使用できるビット。
  • ハーフフラグ(H):ハーフキャリ(half carry)フラグは,主に加算や減算の結果を10進数に補正する時に用いる。
  • ユーザフラグ/割り込みマスクフラグ(UI):ユーザフラグまたは,割り込みマスクビットとして使用できる。
  • 割り込みマスクビット(I):割り込みを許可するか禁止するかを示すビット。このビットが0の時,割り込みが可能になる。割り込み処理が開始されると,このビットは1になる。

 いずれのビットも、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レジスタの各ビットを参照して、処理をジャンプするか、そのまま次の命令を継続するかを決める。

最終更新:2014年04月02日 14:07
添付ファイル