人工知性を作りたい

私が日々、挑戦したことや学んだことなどを紹介していく雑記ブログです。 (新しいAI技術HTM, 専門の音声信号処理, 趣味のアニメ等も書いてます。)

global navigation menu page top

CPUの命令実行手順とレジスタ【基本情報技術者になろう!】

f:id:hiro-htm877:20190619230445j:plain



 

f:id:hiro-htm877:20190601202549p:plain

 

 

 

  

 

 

現在、私は秋の基本情報技術者試験に向けて勉強中です。

その中で、私が得た知識をまとめて記事にしています。

 

本記事のテーマ

基本情報技術者になろう!】

・CPUの命令実行手順の解説

CPUの命令実行手順とは

 

CPUの命令実行手順の流れはこんな感じです。

1. 命令の取り出し

2. 命令の解読

3. 対象データの読み出し

4. 命令実行

 

この際、CPUが命令を実行するために取り出した情報は、レジスタと呼ばれるCPU内部の記憶装置に保持します。

 

主記憶装置にロードされたプログラムは、一見単純に見える命令であっても紐解けば、そこにはたくさんの命令が詰まっていたりします。なので、CPUはこれを順番に取り出して、解読しながら1つずつ処理していきます。

この取り出した命令はどこかで覚えておかなければなりません。その役割を果たすのがCPU内部にあるレジスタという記憶装置です。

それでは、レジスタの種類と、それらが命令を実行する流れの中で、どのように使われるのかを見ていきます。

 

レジスタの種類とそれぞれの役割

【プログラムカウンタ】

役割:次に実行するべき命令が入っているアドレスを記憶するレジスタ

【命令レジスタ

役割:取り出した命令を一時的に記憶するためのレジスタ

【インデックス(指標)レジスタ

役割:アドレス修飾に用いるためのレジスタで、連続したデータを取り出しに使うための増分値を保持する。

【ベースレジスタ

役割:アドレス修飾に用いるためのレジスタで、プログラムの先頭アドレスを保持する。

【アキュムレータ】

役割:演算の対象となる数や、演算結果を記憶するレジスタ

【汎用レジスタ

役割:特に機能を限定していないレジスタ。一時的な値の保持や、アキュムレータなどの代用に使ったりする。

 

これらのレジスタを使ってCPUがどのようになっているかというと次のようになります。

ただし、あるレジスタを別のレジスタで代用したりすることもあるので、必ず上のレジスタが全てのっているというわけではありません。

f:id:hiro-htm877:20190707163925p:plain

 

次に、はじめに紹介した命令実行の流れに沿って、1つずつ説明していきます。

 

命令の取り出し(フェッチ)

最初に行われるのは命令の取り出し「フェッチ」作業です。

使われるのは命令レジスタとプログラムカウンタです。

f:id:hiro-htm877:20190707165003p:plain

取り出しべき命令がどこにあるかはプログラムカウンタが知っています。

f:id:hiro-htm877:20190707165934p:plain



なので、プログラムカウンタの示すアドレスを参照して命令を取り出し、それを命令レジスタに記憶させます。

f:id:hiro-htm877:20190707165907p:plain

取り出し終わったら次の命令に備えてプログラムカウンタの値を1つ増加させます。

f:id:hiro-htm877:20190707170243p:plain

命令の解読

先ほど取り出した命令の解読作業に入ります。

f:id:hiro-htm877:20190707171035p:plain

命令レジスタに取り出した命令というのは「命令部」と「オペランド」で出来ています。

【命令部】

実行させたい命令の種類を示すコード番号が入っている

オペランド部】

処理対象となるデータを収めたメモリアドレスなどが入ってるところ

(命令の種類によってはこれがない場合もある)

※「オペランド」というのは「オペレートする対象」という意味がある

 

この命令の一部が命令デコーダへと送られます。

命令デコーダは、命令部のコードを解読して、必要な時に制御信号を飛ばします。

f:id:hiro-htm877:20190707171741p:plain

対象データ(オペランド)読み出し

仮に命令が加算などの演算処理だった場合、その演算の元となる数値が必要になります。それを読み取ってくる作業を行います。

f:id:hiro-htm877:20190707172841p:plain

処理対象となるデータ(オペランド)は、命令レジスタオペランド部を見ると、データの格納されている場所が分かります。

f:id:hiro-htm877:20190707173355p:plain

ただし、アドレスの指定方式にはいろんな種類があるので、オペランド部に直接「メモリのアドレス」そのものが記載されているとは限りません。

というわけでこの手順では、オペランド部を参照して対象データを読み出し、それを汎用レジスタなどに記憶させます、

命令実行

今回が最後の実行 となります。ここまできたらあとは、命令を実行するだけです。仮に命令が演算処理だとすると、演算装置が「えいや!」と計算して終了です。

f:id:hiro-htm877:20190707233746p:plain

実行はこのような感じで、汎用レジスタから処理対象のデータを取り出して演算します。その後、演算結果を書き戻して終了です。終わったら、また実行手順①に戻って一連の手順を繰り返します。

f:id:hiro-htm877:20190707234547p:plain

f:id:hiro-htm877:20190707234611p:plain

以上でCPUの命令実行手順との説明を終了します。

CPUはコンピュータの脳の役割を果たします。つまり、システムを理解するにはCPUについても理解しておいた方が理解が進みます。

ですので、実行手順は複雑ですが、命令の流れと一緒に覚えましょう!
 

参考資料

・キタミ式イラストIT塾 基本情報技術者 平成31/01年