CPUアーキテクチャと命令セットの比較
序論
CPUの命令実行は「命令セット → 機械語 → マイクロコード(またはハードワイヤ制御)」という三層構造で成立している。
この節では、歴史的CPUの例や現代CPUのCISC/RISCアーキテクチャの違い、
バイナリ互換性やFPU搭載の事例まで含めて整理する。
本論
1. 三層構造の原則
Human : ADD R1, R2 ; 命令セット(ISA) Machine : 0001 0001 0010 ; 機械語(ビット列) Micro : ALU_ADD R1,R2 ; CPU内部制御信号(マイクロコード)
– CISC: 複雑な命令をマイクロコードで分解して実行
– RISC: 単純命令を直接ハードワイヤで実行
2. バイナリ互換と拡張命令
8080 CPU : original ISA Z80 CPU : 8080互換 + 独自命令 PC-8001 : Z80搭載、FPU子プロセッサ追加可能
– Z80は8080の機械語互換性を持ちながら独自命令を追加
– これにより旧ソフトとの互換性を保持しつつ性能向上
– PC-8001ではZ80にFPUを搭載可能で、浮動小数点演算を高速化
3. 代表的CPUのCISC/RISC比較
MC68000 (Motorola) : 16/32bit CISC - 複雑命令多数 - マイクロコードまたはハードワイヤ制御 x86 (Intel) : CISC - 複雑命令、多段マイクロコード - 後方互換重視 ARM : RISC 32bit/64bit - 単純命令セット - ハードワイヤで直接実行
– CISCは1命令で複数操作を行えるためマイクロコードが重要
– RISCは命令が単純で高速、マイクロコード不要
– 内部演算(加算器、レジスタ、フラグ)は共通だが、命令解釈の流れが異なる
4. 命令実行フロー(ASCII)
Fetch: PC -> MAR MEM[PC] -> IR Decode: IR[Opcode] -> Microcode / Control Execute: Microcode -> ALU, Regs, Flags (CISC) Hardwired -> ALU, Regs, Flags (RISC / ARM) Writeback: ALU -> Destination
– CISC: 複雑命令をマイクロコードに分解して実行
– RISC/ARM: 単純命令を直接ハードワイヤで実行
– Z80: 8080互換機械語 + 独自命令をマイクロコードで処理
– FPU子プロセッサ: 浮動小数点演算専用の命令セットを独立実行
Q&A
Q1. CISCとRISCの違いは何ですか?
A1. CISCは複雑命令を1つで複数操作するため、マイクロコードで分解して実行する。
RISCは単純命令を直接ハードワイヤで実行する。
Q2. バイナリ互換とは何ですか?
A2. あるCPUの機械語を別のCPUでもそのまま実行できること。
Z80は8080互換であり、独自命令も追加されている。
Q3. FPU子プロセッサはなぜ搭載されるのですか?
A3. 浮動小数点演算などCPU本体で遅い計算を専用ハードで処理するため。
PC-8001ではZ80にFPUを追加して高速演算を実現した。
Q4. MC68000やx86とARMの動作の違いは?
A4. MC68000やx86はCISCで複雑命令をマイクロコードまたはハードワイヤで実行。
ARMはRISCで単純命令を直接ハードワイヤで実行する。