レジスタ・メモリ・マイクロコード解説

CPUの仕組み|レジスタ・メモリ・マイクロコード解説

CPUの仕組み:レジスタとマイクロコードによるデータ処理

CPUは中央演算処理装置(Central Processing Unit)の略で、
内部に様々な レジスタ を持ち、メモリ上のプログラムとデータを効率よく処理します。

1. CPUのレジスタ構造

代表的なレジスタと役割:

  • プログラムカウンタ(PC):次に実行する命令のアドレスを保持。
  • 命令レジスタ(IR):現在実行中の命令を保持。
  • アキュムレーター(ACC):ALUの計算結果を一時保持。
  • アドレスレジスタ(AR/MAR):メモリ上のデータ・命令のアドレスを示す。
  • メモリデータレジスタ(MDR):メモリから読み込んだデータや書き込むデータを保持。
  • 汎用レジスタ(GPR):計算やデータ一時保存に使用。

2. メインメモリとのやり取り

レジスタはメインメモリと直接やり取りし、データ読み書きを行います。

  • 読み込み (Load)
    1. PC (Out) → MAR (In):次命令のアドレスを指定
    2. Memory (Read) → MDR (In):データを取得
    3. MDR (Out) → 汎用レジスタ (In):値を格納
  • 書き込み (Store)
    1. アドレス (Out) → MAR (In)
    2. 汎用レジスタ (Out) → MDR (In)
    3. MDR (Out) → Memory (Write)

3. 演算装置(ALU)の動作

ALUは算術・論理演算を行う装置で、複数のレジスタを入力として計算します。

  • 加算 (ADD)
    1. レジスタA (Out) → ALU入力1
    2. レジスタB (Out) → ALU入力2
    3. ALU (ADD実行) → 結果 → アキュムレーター (In)
    4. 同時に結果フラグを Status/Flag レジスタに更新
  • 減算 (SUB, 2の補数)
    1. レジスタB (Out) → NOT回路 → ALU入力2
    2. キャリー入力を1に設定 → 2の補数化
    3. レジスタAとALU入力2を加算 → 結果 → ACC
  • シフト演算
    • 左シフト (\times 2):全ビット左に移動、溢れたビットは Carry Flag に
    • 右シフト (\div 2)
      • 論理シフト:左端に0を補填
      • 算術シフト:符号ビットを維持

4. フラグとプログラムカウンタ制御

  • 条件分岐 (JZなど)
    1. Zero Flagを確認
    2. 成立時:命令のアドレス → PC
    3. 不成立時:PCは自動+1
  • 無条件ジャンプ (JMP)
    1. 命令レジスタの定数部 → PC
  • キャリー・オーバーフロー
    • キャリーフラグ (CF):加算で桁あふれ、減算で借り
    • オーバーフローフラグ (OF):符号付き計算で範囲超過
    • シフト演算の切り捨てはCarry Flagに反映

5. マイクロコード視点のまとめ

CPUの動作は、クロックごとにレジスタ・ALU・メモリ間の「ゲート開閉」を順次実行しています。例:

ADD命令マイクロコード例
  RegA_Out → ALU_In1
  RegB_Out → ALU_In2
  ALU_FUNC_ADD
  ALU_Out → ACC_In
  StatusReg_Update

Q&A:専門用語解説

Q1: レジスタとは?
CPU内部の高速記憶装置で、命令やデータを一時的に保持する。
Q2: プログラムカウンタ(PC)とは?
次に実行する命令のメモリアドレスを保持するレジスタ。
Q3: 命令レジスタ(IR)とは?
現在実行中の命令を保持するレジスタ。
Q4: アキュムレーター(ACC)とは?
算術論理演算の結果を一時的に保持するレジスタ。
Q5: メモリアドレスレジスタ(MAR)とは?
メモリ上の読み書き対象アドレスを保持するレジスタ。
Q6: メモリデータレジスタ(MDR)とは?
メモリから読み込んだデータや書き込むデータを一時保持する。
Q7: ALUとは?
算術・論理演算装置。加算・減算・論理演算・シフト演算を行う。
Q8: フラグレジスタとは?
演算結果の状態(ゼロ、キャリー、オーバーフローなど)を保持するレジスタ。
Q9: マイクロコードとは?
CPU内部の制御信号の組み合わせで、命令実行の最小単位を定義する。