CPUの仕組み|レジスタ・メモリ・マイクロコード解説
CPUの仕組み:レジスタとマイクロコードによるデータ処理
CPUは中央演算処理装置(Central Processing Unit)の略で、
内部に様々な レジスタ を持ち、メモリ上のプログラムとデータを効率よく処理します。
1. CPUのレジスタ構造
代表的なレジスタと役割:
- プログラムカウンタ(PC):次に実行する命令のアドレスを保持。
- 命令レジスタ(IR):現在実行中の命令を保持。
- アキュムレーター(ACC):ALUの計算結果を一時保持。
- アドレスレジスタ(AR/MAR):メモリ上のデータ・命令のアドレスを示す。
- メモリデータレジスタ(MDR):メモリから読み込んだデータや書き込むデータを保持。
- 汎用レジスタ(GPR):計算やデータ一時保存に使用。
2. メインメモリとのやり取り
レジスタはメインメモリと直接やり取りし、データ読み書きを行います。
- 読み込み (Load)
- PC (Out) → MAR (In):次命令のアドレスを指定
- Memory (Read) → MDR (In):データを取得
- MDR (Out) → 汎用レジスタ (In):値を格納
- 書き込み (Store)
- アドレス (Out) → MAR (In)
- 汎用レジスタ (Out) → MDR (In)
- MDR (Out) → Memory (Write)
3. 演算装置(ALU)の動作
ALUは算術・論理演算を行う装置で、複数のレジスタを入力として計算します。
- 加算 (ADD)
- レジスタA (Out) → ALU入力1
- レジスタB (Out) → ALU入力2
- ALU (ADD実行) → 結果 → アキュムレーター (In)
- 同時に結果フラグを Status/Flag レジスタに更新
- 減算 (SUB, 2の補数)
- レジスタB (Out) → NOT回路 → ALU入力2
- キャリー入力を1に設定 → 2の補数化
- レジスタAとALU入力2を加算 → 結果 → ACC
- シフト演算
- 左シフト (\times 2):全ビット左に移動、溢れたビットは Carry Flag に
- 右シフト (\div 2)
- 論理シフト:左端に0を補填
- 算術シフト:符号ビットを維持
4. フラグとプログラムカウンタ制御
- 条件分岐 (JZなど)
- Zero Flagを確認
- 成立時:命令のアドレス → PC
- 不成立時:PCは自動+1
- 無条件ジャンプ (JMP)
- 命令レジスタの定数部 → 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内部の制御信号の組み合わせで、命令実行の最小単位を定義する。