---
title: "プログラム格納方式とは？ノイマン型とハーバード型を切り分ける【基本情報技術者試験】"
description: "プログラムを主記憶に格納し、CPUが命令を読み出して実行するプログラム格納方式を、DMA・仮想記憶・アドレス指定方式・ハーバード型との違いから整理します。"
last_modified_at: "2026-07-29"
canonical_url: "https://stemtazoo.github.io/fe/stored-program-architecture/"
section: "fe"
---

## まず結論

**プログラム格納方式**とは、プログラムを主記憶に格納し、CPUが命令を順番に読み出して実行する方式です。

別名として、**プログラム内蔵方式**とも呼ばれます。

基本情報技術者試験では、次の表現が判断の決め手になります。

> 主記憶にプログラムを格納し、CPUが命令を読み出しながら実行する

```text
プログラムを主記憶に格納
↓
CPUが命令を読み出す
↓
命令を解読する
↓
処理を実行する
```

## 直感的な説明

プログラム格納方式は、CPUが主記憶に置かれた「作業手順書」を読みながら作業するイメージです。

- 主記憶：命令やデータを置く場所
- CPU：命令を読み、解読し、実行する装置

主記憶へ別のプログラムを読み込めば、同じコンピュータで別の処理を実行できます。

つまり、装置の配線を毎回変更しなくても、**プログラムを入れ替えることで処理内容を変えられる**ことが大きな特徴です。

## 定義・仕組み

プログラム格納方式では、一般に次の流れを繰り返します。

1. 命令を主記憶から取り出す
2. 命令を解読する
3. 命令を実行する
4. 次に実行する命令へ進む

この一連の動作は、**命令サイクル**と呼ばれます。

### ノイマン型コンピュータとの関係

プログラム格納方式は、ノイマン型コンピュータの中心的な考え方です。

ノイマン型では、基本的にプログラムとデータを同じ主記憶に置き、同じ経路を使ってCPUへ送ります。

```text
主記憶
├─ プログラム
└─ データ
      ↓
     CPU
```

ただし、「命令を順番に読む」といっても、必ず上から最後まで一直線に実行するわけではありません。

分岐命令や繰返し命令によって、次に実行する命令の位置は変化します。

## どんな場面で使う？

現在の一般的なコンピュータは、プログラム格納方式を基本としています。

- パソコン
- サーバ
- スマートフォン
- 組込み機器
- 制御装置

同じハードウェアでも、読み込むプログラムを変えることで、文書作成、計算、通信、機械制御など、異なる処理を実行できます。

### 試験で一緒に知っておきたい方式

#### ハーバード型アーキテクチャ

ハーバード型は、**命令用メモリとデータ用メモリを分ける方式**です。

| 比較項目 | ノイマン型 | ハーバード型 |
|---|---|---|
| 命令とデータ | 同じメモリに置く | 別々のメモリに置く |
| 通信経路 | 基本的に共用 | 命令用とデータ用を分離 |
| 特徴 | 構成が比較的単純 | 命令とデータへ同時アクセスしやすい |

```text
ノイマン型
命令・データ → 共通の経路 → CPU

ハーバード型
命令 → 命令用経路 → CPU
データ → データ用経路 → CPU
```

試験では、次のように切り分けます。

```text
プログラムとデータを同じ記憶装置で扱う
→ ノイマン型

命令用とデータ用の記憶装置を分ける
→ ハーバード型
```

なお、ハーバード型もプログラムをメモリに格納して実行するため、**プログラム格納方式そのものの反対語ではありません**。命令とデータの記憶構成を比べる別の分類軸です。

#### 固定プログラム方式

処理内容が回路として固定され、プログラムの入替えを前提としない装置は、固定プログラム方式と考えられます。

```text
処理内容をプログラムの読込みで変更
→ プログラム格納方式

処理内容が回路として固定
→ 固定プログラム方式
```

ただし、基本情報技術者試験では「プログラム格納方式」と「ノイマン型」の関係が中心であり、固定プログラム方式は補助的な比較として押さえれば十分です。

### RISC・CISCとの関係

RISCとCISCは命令セットの設計方針です。

- RISC：単純な命令を中心に構成
- CISC：複雑で多機能な命令を持つ

これらは、プログラム格納方式の反対ではありません。

```text
プログラムをどう保存・実行するか
→ プログラム格納方式

CPUの命令をどう設計するか
→ RISC・CISC
```

## よくある誤解・混同

### DMA制御方式との混同

DMAは、入出力装置と主記憶の間で、CPUを介さずにデータを転送する方式です。

```text
CPUを介さずにデータ転送
→ DMA

主記憶のプログラムをCPUが実行
→ プログラム格納方式
```

### アドレス指定方式との混同

アドレス指定方式は、命令が処理対象のデータ位置をどのように指定するかを表します。

- 直接アドレス指定
- 間接アドレス指定
- 即値アドレス指定
- 相対アドレス指定

```text
データの場所をどう指定するか
→ アドレス指定方式

プログラムをどこに置いて実行するか
→ プログラム格納方式
```

### 仮想記憶方式との混同

仮想記憶は、補助記憶装置を利用して、主記憶より大きなアドレス空間を扱えるようにする仕組みです。

```text
主記憶の容量を補う
→ 仮想記憶

主記憶から命令を読み出して実行
→ プログラム格納方式
```

### ハーバード型はプログラム格納方式ではない

これは誤りです。

ハーバード型も、命令をメモリへ格納してCPUが実行します。違いは、命令用メモリとデータ用メモリを分ける点です。

### CPUは必ず命令を上から順番に実行する

分岐や繰返しがあるため、単純に上から最後まで進むとは限りません。

CPUは、プログラムカウンタが示す次の命令を読み出して実行します。

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

- **主記憶にプログラムを格納し、CPUが読み出して実行する**のがプログラム格納方式
- プログラム格納方式は、プログラム内蔵方式とも呼ばれる
- ノイマン型は、基本的に命令とデータを同じ主記憶・経路で扱う
- ハーバード型は、命令用とデータ用のメモリや経路を分ける
- DMAは入出力装置と主記憶のデータ転送
- 仮想記憶は主記憶の容量不足を補う仕組み
- アドレス指定方式は、命令がデータの場所を指定する方法
- RISC・CISCは命令セットの設計方針であり、別の分類軸

試験では、次の一文で切り分けます。

> **主記憶に置いたプログラムをCPUが読み出して実行するなら、プログラム格納方式**
