---
title: "5段パイプラインとは？IF・ID・EX・MEM・WBの順番を整理【基本情報技術者試験】"
description: "5段パイプラインを、IF・ID・EX・MEM・WBの順に命令を分割して処理する仕組みとして整理し、命令フェッチとデータメモリアクセスの違い、EXでのアドレス生成、科目Aの並べ替え問題を切る判断軸を解説します。"
last_modified_at: "2026-08-16"
canonical_url: "https://stemtazoo.github.io/fe/five-stage-pipeline/"
section: "fe"
---

## まず結論

5段パイプラインでは、1つの命令を次の5段階に分けて処理します。

```text
IF → ID → EX → MEM → WB
```

日本語では、次のように対応させると分かりやすいです。

```text
命令を取る
→ 命令を解読する
→ 演算する・アドレスを求める
→ データメモリにアクセスする
→ 結果を書き戻す
```

基本情報技術者試験では、**IF → ID → EX → MEM → WB の順番**と、それぞれの役割を対応させられることが重要です。

## 直感的な説明

5段パイプラインは、仕事を5つの工程に分けて流れ作業にするイメージです。

例えば、工場で製品を作るときに、

```text
材料を受け取る
→ 作業内容を確認する
→ 加工する
→ 必要な部品を出し入れする
→ 完成品を所定の場所へ戻す
```

という工程に分ければ、前の製品が次の工程へ進んだあと、次の製品を最初の工程に入れられます。

CPUのパイプラインも同じで、命令をいくつかの段階に分け、**複数の命令の処理を少しずつ重ねて進める**ことで、処理効率を高めます。

ただし、FE試験の順序問題では、まず「複数命令を重ねる」という話よりも、**1命令の中で各段階がどの順に並ぶか**を押さえることを優先します。

## 定義・仕組み

代表的な5段パイプラインは、次の5ステージで構成されます。

| 略称 | 英語 | 主な役割 |
|---|---|---|
| IF | Instruction Fetch | 命令を取り出す |
| ID | Instruction Decode | 命令を解読し、レジスタを読み出す |
| EX | Execute | 演算やアドレス生成を行う |
| MEM | Memory Access | データメモリを読み書きする |
| WB | Write Back | 結果をレジスタへ書き戻す |

### IF：命令フェッチ

次に実行する命令を取り出します。

```text
プログラムカウンタ
↓
次の命令の場所を確認
↓
命令を読み出す
```

ここで取り出すのは、**処理対象のデータではなく命令そのもの**です。

CPUの一般的な命令実行サイクルは、[CPUの命令実行サイクル](https://stemtazoo.github.io/fe/cpu-instruction-cycle/)でも整理しています。

### ID：命令デコードとレジスタ読出し

読み出した命令を解読し、どの演算をするのか、どのレジスタを使うのかを判断します。

```text
命令を解読
＋
必要なレジスタの値を読み出す
```

5段パイプラインでは、**命令デコードとレジスタファイル読出しを同じステージで扱う**形がよく使われます。

### EX：実行とアドレス生成

演算を実行します。

例えば、加算命令なら足し算を行います。

また、ロード命令やストア命令では、メモリにアクセスするための**実効アドレスを計算**します。

```text
ベースアドレス + オフセット
→ アクセス先アドレスを求める
```

ここで重要なのは、**EXでアドレスを求め、MEMでそのアドレスへ実際にアクセスする**という順番です。

### MEM：メモリアクセス

ロード命令やストア命令などで、データメモリへアクセスします。

```text
ロード
→ メモリからデータを読む

ストア
→ メモリへデータを書く
```

すべての命令が必ずデータメモリを読み書きするわけではありません。

例えば、レジスタ同士の単純な加算なら、MEMステージでは実質的にメモリ操作を行わない場合があります。

### WB：書戻し

演算結果や、ロード命令で読み出した値をレジスタへ書き戻します。

```text
演算結果
または
メモリから読み出した値
↓
レジスタへ書き戻す
```

ここまでで1命令の処理が完了します。

このテーマは、基本情報技術者試験の「コンピュータ構成要素」と関係する内容です。公式の出題範囲やシラバスは、[IPA：基本情報技術者試験](https://www.ipa.go.jp/shiken/kubun/fe.html) から確認できます。

## 科目Aでどう出る？

科目Aでは、5つの処理を並べ替える問題や、各ステージの役割を問う問題に注意します。

まずは、次の順番を基準にします。

```text
IF
命令フェッチ
↓
ID
命令デコード・レジスタ読出し
↓
EX
実行・アドレス生成
↓
MEM
メモリアクセス
↓
WB
書戻し
```

### 並べ替えは前後関係で切る

順番を忘れた場合は、処理の依存関係から復元できます。

```text
命令を取っていない
→ 解読できない

命令を解読していない
→ 何を実行するか分からない

アドレスを求めていない
→ その場所へメモリアクセスできない

結果が出ていない
→ 書戻しできない
```

したがって、

```text
フェッチ → デコード → 実行 → メモリアクセス → 書戻し
```

という流れになります。

### EXとMEMを混同しない

特に引っかかりやすいのが、ロード・ストア命令です。

```text
EX
→ アクセス先のアドレスを計算

MEM
→ そのアドレスのメモリを読み書き
```

**アドレス生成が先、実際のメモリアクセスが後**です。

### IFとMEMを混同しない

どちらもメモリから何かを読むイメージがあるため、混同しやすいです。

```text
IF
→ 命令を取り出す

MEM
→ 命令が扱うデータにアクセスする
```

「命令なのか、データなのか」で切り分けます。

## どんな場面で使う？

パイプラインは、CPUが命令処理の各段階を重ね合わせて実行し、単位時間当たりに処理できる命令数を増やすために使われます。

例えば、1命令ずつ5工程をすべて終えてから次の命令を始めるのではなく、各工程をずらして進めます。

```text
時刻1：命令A IF
時刻2：命令A ID   / 命令B IF
時刻3：命令A EX   / 命令B ID   / 命令C IF
```

このように、複数の命令が異なるステージに同時に存在できます。

ただし実際には、命令同士の依存関係や分岐などによって、理想どおりに流せないことがあります。

このような問題は**パイプラインハザード**と呼ばれます。

FE試験では、まず5段階の順番と役割を押さえ、その後に必要に応じてハザードや分岐による影響を学ぶと整理しやすいです。

## よくある誤解・混同

### 命令フェッチとメモリアクセスは同じ？

同じではありません。

```text
IF
→ 命令を取る

MEM
→ データを読み書きする
```

どちらも「メモリにアクセスする」と見えますが、**何を扱っているか**が違います。

### EXでメモリを読み出す？

5段パイプラインの基本的な整理では、EXは演算やアドレス生成を行う段階です。

ロード命令なら、

```text
EX
→ 読む場所を計算

MEM
→ その場所から読む
```

と切り分けます。

### WBは主記憶への書込み？

基本的な5段パイプラインでWBは、**レジスタへの書戻し**を表します。

一方、ストア命令で主記憶へデータを書き込む処理はMEMで行います。

```text
MEM
→ メモリへの書込み

WB
→ レジスタへの書戻し
```

「どこへ書くのか」を確認します。

### 5段パイプラインなら1命令が5倍速くなる？

そういう意味ではありません。

パイプラインの狙いは、1命令そのものの処理時間を単純に5分の1にすることではなく、**複数命令を重ねて処理してスループットを高めること**です。

```text
1命令を極端に速くする
→ ではない

複数命令を流れ作業で処理する
→ パイプライン
```

### CPUの命令実行サイクルと5段パイプラインは同じ？

関連は深いですが、学習上は分けて考えると整理しやすいです。

[CPUの命令実行サイクル](https://stemtazoo.github.io/fe/cpu-instruction-cycle/)では、命令を取り出して解読し、必要なデータを用意して実行するという基本の流れを扱います。

5段パイプラインでは、その流れを**IF・ID・EX・MEM・WBという段階に分けて並列的に進める構成**として捉えます。

## まとめ（試験直前用）

- 5段パイプラインの基本順序は **IF → ID → EX → MEM → WB**
- IFは命令フェッチ、IDは命令デコードとレジスタ読出し
- EXは演算・アドレス生成、MEMはデータメモリアクセス、WBはレジスタへの書戻し
- ロード・ストアでは **EXでアドレス生成 → MEMで実際にアクセス**
- IFは命令、MEMはデータを扱うと切り分ける
- パイプラインは1命令を5倍速くするのではなく、複数命令を重ねてスループットを高める仕組み
