命令を順番に片付けていく【命令実行サイクル】

命令実行サイクル


命令実行サイクルとは、CPU内でプログラムを処理するサイクルのことです。プログラムは細かな命令に分割され、このサイクルに基づき段階を踏んで処理されます。

文章だけでは分かりにくいと思いますので、まずは下の図をご覧ください。

命令実行サイクル
それぞれ灰色部がCPU、緑部がメモリです。



命令アドレスレジスタ(左下)を基点として引かれる矢印からは、命令実行サイクルの順番を見ることができます。矢印をたどりさえすれば、CPUとメモリとの間でプログラムがどのように流れているかを把握することができるからです。

この記事ではこの流れをより分かりやすく説明するために、さらに段階を踏んでひとつひとつ解説してきます。

それでは前置きはここまでにして解説に入ることにしましょう。

命令実行サイクルの段階


命令実行サイクルは6つの段階を踏みます。

  1. 命令の取り出し
  2. 命令の解読
  3. 実効アドレス計算
  4. オペランドの取り出し
  5. 命令の実行
  6. 演算結果の格納


これはテキスト等でしばしば目にする命令実行サイクルの概要ですが、初学者の方々にはこれが何を示しているのかを把握しづらいと思います。これを分かりやすい表現に書き直してみましょう。

  1. メモリからプログラムを取り出す
  2. プログラムを電気信号に変換する
  3. 演算対象となるデータを探す
  4. データを取り出す
  5. プログラムを実行する
  6. 演算結果をメモリにロードする


これで多少は分かりやすくなったと思います。

専門用語も使わず順序立てた説明を試みるだけでも、受け手の理解度に差が出てきますからね(これは伝える側もです)。こうした「言い換え」は大切です。

ただし、文章だけでは命令実行サイクルを把握することは困難です。そこで、より細かく段階を踏んだ説明をしていきます。

命令実行サイクルのくわしい解説


先ほど命令実行サイクルには6つの段階があると記載しました。ここではより細かな段階に区切って説明していきます。

  1. メモリ上にある命令のアドレスを取得する
  2. メモリにアクセスし命令を取り出す
  3. 命令を「0」と「1」に変換する
  4. 演算装置に命令を送る
  5. レジスタにデータのありかを伝える
  6. データを取り出す
  7. 命令を実行する
  8. 結果をメモリに格納する


先ほどよりも2つ段階が増えていますが、ここに示した8つの段階はどれも命令実行サイクルについて理解する上では重要なものばかりです。それでは、ひとつずつ説明していきます。

【命令実行サイクル:1】メモリ上にある命令のアドレスを取得する


命令実行サイクル1


図の赤線部にご注目ください。この矢印がプログラムの流れを示します。

命令アドレスレジスタが、次に実行する命令メモリアドレスセットします。つまりそのメモリのアドレスに命令がロードされているわけです。命令レジスタはこの情報をもとに命令をメモリから取り出します

その後、命令アドレスレジスタは、そのまた次の命令のアドレスをセットします。これをプログラムが終わるまで繰り返していくのです。

【命令実行サイクル:2】メモリにアクセスし命令を取り出す



命令実行サイクル2

メモリから取得したアドレスより命令を取り出します。これが命令レジスタの役割です。

命令、つまり命令語には命令部とオペランド部が存在しそれぞれ別途のルートをたどり最終的に演算装置で加工されます。ここまでが先に挙げた「命令の取り出し」という段階です。

【命令実行サイクル:3】命令を「0」と「1」に変換する


命令実行サイクル3

命令レジスタに格納された命令語の命令部解読器(以下、デコーダで統一)に送られます。ここで「0」と「1」の電気信号に変換されるわけです。ここでようやくコンピュータがプログラムを処理できるようになります。

【命令実行サイクル:4】演算装置に命令を送る


命令実行サイクル4

デコーダで変換した命令を演算装置に送ります。段階に分けて説明しましたが、ここまでが「命令の解読」にあたるわけです。「命令の取り出し」から数えると、ここまで少なくとも4つの段階を経ていることになります。

【命令実行サイクル:5】レジスタにデータのありかを提供する


命令実行サイクル5

命令レジスタのオペランド部はアドレスレジスタに送られます。この情報をもとにして実際に扱うデータを取り出すのですが、このデータが存在するアドレス実効アドレスと呼ばれるものです。そして実行アドレスを求めることを「実効アドレス計算」と言います。

【命令実行サイクル:6】データを取り出す


命令実行サイクル6

命令によって処理されるデータを演算装置に送ります。これが「オペランドの取り出し」です。つまりCPU内の演算装置が処理に使うデータをメモリから取り出すわけです。

ここで再び命令データが合流し、ついに演算が行われます。

【命令実行サイクル:7】命令を実行する


命令実行サイクル7

演算装置にて演算を実行します。つまりここで命令が実行されるのです(命令の実行)。

【命令実行サイクル:8】結果をメモリに格納する


サイクルの流れについては、すぐ上の図をご覧ください。

演算結果メモリロードします。これによりメモリは演算結果をキープすることになります。つまりこれが「演算結果の格納」です。

命令実行サイクルでは使用リソースが異なる


命令実行サイクルでは、段階ごとに使用されるリソースが異なります。

 命令の取り出し
→命令アドレスレジスタ
(プログラムカウンタ)

 命令の解読
→解読器(デコーダ)

 実効アドレス計算
→アドレスレジスタ

 オペランドの取り出し、命令の実行
→ALU(演算装置)

 演算結果の格納
→主記憶装置(RAM)


これを上手く利用してCPUの処理高速化を図るわけです。パイプライン方式に関してはこちらの記事にて解説しています。この記事を読まれた後にぜひ読んでみてください。





それでは、今回はここまでといたします。
最後までお読みいただきありがとうございます。


命令実行サイクル
最新情報をチェックしよう!