改めてCPUの意味を調べました。
CPUはCentral Processing Unitの意味で計算処理や制御を行うパソコンの頭脳となる部分です。
CPUの性能が高いほど、処理するスピードが早くなります。
処理する流れは
補助記憶装置から主記憶装置へと読み込まれたプログラム
を以下の流れで取り出し、実行します。
①命令の取り出し
②命令の解読
③対象データの読み出し
④命令実行
CPUが命令を実行するために取り出した情報はレジスタと呼ばれるCPU内部の記憶装置に保持します。
それぞれ詳しく見ていきます。
レジスタの種類と役割
レジスタ言うても、たくさんあるっぽいです。
名称 | 役割 |
---|---|
プログラムカウンタ | 次に実行するべき命令が入っているアドレスを記憶するレジスタ |
命令レジスタ | 取り出した命令を一時的に記憶するためのレジスタ |
インデックス(指標)レジスタ | アドレス修飾に用いるためのレジスタで、プログラムの先頭アドレスを保持する。 |
ベースレジスタ | アドレス修飾に用いるためのレジスタで、プログラムの先頭アドレスを保持する |
アキュムレータ | 演算の対象となる数や、演算結果を記憶するレジスタ |
汎用レジスタ | 特に機能を限定していないレジスタ。一時的な値の保持や、アキュムレータなどの代用に使ったりする。 |
あるレジスタが別のレジスタを代用したりしているケースもあるため、上の表のレジスタがCPU内部に全てあるわけではないようです。
プログラムもそうですがパソコンも精密にできていますね。
先人が発明したものを、一般化して使用できるってのは非常にありがたいことですね。
命令の手順を深く見ていきます。
①命令の取り出し(フェッチ)
まずは一番最初に命令の取り出し(フェッチ)を行います。
fetchの英語の意味を検索してみると
取ってくる、呼んでくる、(行って)取ってくる、連れてくる、出てこさせる、引き出す、誘い出す、吐く、漏らす、出す
のようです。JavaScriptでFetch APIがありますね。
命令レジスタとプログラムカウンタを使用します。
例えばプログラムカウンタ0004があったとします。
プログラムカウンタ0004を命令レジスタに記憶させます。
取り出し終わったら、次の命令に向けてプログラムカウンタの値を
0004から0005に増加させます。
②命令の解読
命令レジスタに取り出した命令は次の構成でできています。
命令レジスタ
| 命令部 | オペランド部 |
実行させたい 処理対象となるデータを納めた
命令の種類を示すコード番号が入っている メモリアドレスなどが入っている
「オペランド」の意味は「オペレート(操作)する対象」という意味の言葉らしいです。
プログラミングでも1+2 の1が左オペランドで2が右オペランドと言いますね。
命令部の中身が命令デコーダへと送られます。
命令デコーダは命令部のコードを解読して、必要な装置に「おい出番だ」と
制御信号を飛ばします。
デコードは「エンコードされたデータを元の形式へ戻すこと」ですね。
③対象データ(オペランド)読み出し
命令が加算などの演算処理とすると、その演算の元となる数値が必要となります。
それが先ほどのオペランド部をみると、ありかがわかるようになっています。
オペランド部を参照して、対象データを読み出し、それを汎用レジスタなどに
記憶させます。
④命令実行
最後に、命令を実行するだけとなります。
汎用レジスタから処理対象のデータを取り出して演算を行います。
演算を行った後に演算結果を書き戻して終了です。
まとめ
覚えるのは大変ですが、細かく見ていくのは重要ですね。