【第1回】CPUの動作手順などについて
どうも、Nakatoです。
今まで、Ryzenシリーズ【2019年7月最新版】Ryzenシリーズ性能比較表&おすすめ紹介 - NakatoのPC日誌やCore iシリーズ【2019年7月最新版】Core iシリーズ性能比較表&おすすめ紹介 - NakatoのPC日誌のCPUを紹介してきましたが、結局CPUって何?と聞かれたら詳しく答えれる人は少ないと思います。
なので今回は、CPUについて書いていきます。
CPU(Central Processing Unit)について
担当装置について
まず、パソコンには5大装置というものがあり
- 制御装置
- 演算装置
- 記憶装置
- 入力装置
- 出力装置
があり、CPUは制御装置、演算装置の二つを担当しています。
CPUの実行手順
CPUは4つの手順を踏む必要があり
- 命令の取り出し…Fetch
- 命令の解読…Decode
- 対象データの読み出し…Opeland(Option)
- 命令実行…Exeute
があります。
また、命令の取り出しの際に取り出したデータはレジスタと呼ばれるCPU内の記憶装置に保持されます。
レジスタの種類の説明が終わったら上の手順の説明に入ります。
レジスタの種類
レジスタは6種類ありそれぞれ役割が異なります。
- プログラムカウンタ…次に実行すべき命令が入っているアドレスを記憶するレジスタ。
- 命令レジスタ…取り出した命令を一時的に記憶するレジスタ
- インデックス(指標)レジスタ…アドレス修飾に用いるためのレジスタで、連続したデータの取り出しに使うための増分値を保持する。
- ベースレジスタ…アドレス修飾に用いるためのレジスタで、プログラムの先頭アドレスを保持する。
- アキュームレジスタ…演算の対象となる数や、演算結果を記憶するレジスタ
- 汎用レジスタ…特に機能を限定していないレジスタ。一時的な値の保持や、アキュームレジスタなどの代用に使ったりする。
それぞれの説明の意味が分からなくてもいいです。
次は、先ほどの命令を実行する手順の説明をしていきます。
命令の手順の詳細
命令の取り出し
取り出しすべき命令は先ほど説明したプログラムカウンタにあるので、それが示すアドレスを参照して命令を取り出し、命令レジスタに保存します。
取り出し終わったらカウンタを+1して次の命令に備えます。
命令の解読
先ほど取り出した命令は命令部とオペランド部に分かれています。*1
そして、命令部の中身を命令デコーダに送り、命令デコーダが命令を解読し必要な装置に制御信号を出します。
対象データの読み出し
先ほど命令レジスタには命令部とオペランド部があるといいましたが、オペランドとはオペレート(操作)する対象という意味なので、オペランド部にある操作する対象の在りかを見つけます。
そして、オペランド部を参照して対象データを読み出し、それを汎用レジスタなどに記録します。
命令実行
汎用レジスタから処理対象のデータを取り出して演算し、演算結果を書き出して終了です。
また、対象データの読み出しの際にオペランド部を参照して対象データの読み込む必要があるときに必ずオペランド部にメモリのアドレスが書いているわけではなく、ある場所からの差なども書かれている場合もあるので何らかの計算によってアドレスを求める必要がありそれをアドレス修飾もしくは、アドレス指定とよばれています。
アドレス修飾の種類
即値アドレス指定方式
オペランド部に入っている値をそのまま用いる方式です。
そのため、メモリへの参照は行いません。
直接アドレス指定方式
オペランド部に記載されているアドレスがそのまま実行アドレスとして使える方式です。*2
間接アドレス指定方式
これは少しややこしいですが、オペランド部に記載されているアドレスの中に実行アドレスが記載されている方式です。
インデックス(指標)アドレス指定方式
先ほどよりややこしくなりますが、オペランド部の値にインデックスレジスタのアドレスの中の値を足し算することで実行アドレスを求める方式です。
ベースアドレス指定方式
これは先ほどより少しわかりやすいと思います。
オペランド部の値とベースレジスタの値を足し算することで実行レジスタを求めることができる方式です。
なのでこの方式を簡単に言い換えるとプログラムの先頭アドレスからの差分をオペランド部で指定する方式です。
この方式はややこしいですが、メモリ上のどこに記録されても命令を変える必要がないという大きなメリットがあります。
相対アドレス指定方式
これは先ほどとほぼ同じで名前が少し変わっただけです。
オペランド部の値とプログラムカウンタの値を足し算して求める方式です。
こちらも言い換えるとメモリ上にロードされた命令位置を基準として、そこからの差分をオペランド部で指定する方式です。*3
まだあるのですが記事が長くなるので今回はこれで終わりです。
次は、CPUの性能の指標について書きます。