CPUの処理

CPUはどんな処理をしているの?

知識豆くん「ヨースケ先生,CPUってどんな処理をしているの?」

CPUが実行する処理(命令)について

ヨースケ先生「さて,CPUについてさらに具体的に見てみましょう。
『もし電気ケトル内の温度が90℃になったらヒーターを停止させる』
という処理を大きく分けると,以下の3つに分けられます。
1.数秒おきに電気ケトル内の温度センサー出力を受け取る。
2.取得した電気ケトル内の温度と閾値90℃を比較する。
3.もし温度が閾値90℃以上の場合ヒーターを停止させる。
上記の例はまだまだ細かく分けることができ,最小単位まで分けるとCPUが実行する処理(命令)となります。
具体的に言うと,上記の例の『2.』および『3.』の,『比較する』と『ヒーターを停止させる』という処理は,
CPUへの比較命令と分岐命令に当たります。これをマイコンの言語であるアセンブリ言語で記述すると

・CMP 電気ケトル内温度,90℃(電気ケトル内の温度と90℃を比較する)
・BGE ヒーター停止(もし電気ケトル内の温度≧90℃ならヒーター停止に分岐する)
となります。マイコンによって異なるのですが,比較命令はCMP(=compare:比較)というように,
アセンブリ言語の命令の多くは動作をイメージした記号が付けられています。その他命令には,
転送命令MOV(move),記憶命令ST(store) ,分岐命令B(branch)などがあります。
ちなみに,C言語風に上記の命令を記述すると

if (電気ケトル内の温度 >= 90℃){
ヒーター停止();
}
となります。
CPUはこれら命令を実行していくわけですね。」

CPUによる命令の実行

ヨースケ先生「CPUの動作についてさらに深堀してみましょう。
CPUの内部は,プログラムカウンタ,命令デコーダ,演算回路から構成されます。
プログラムカウンタは,次に実行する命令の場所(アドレス)を保持する部分です。
命令デコーダは,命令をCPUが処理できる信号に変換する部分です。
演算回路は,命令を処理する部分です。
図の例を説明すると,
①プログラムカウンタにより比較命令CMPが格納されたアドレスが指定されます。
②プログラムカウンタで指定された命令を読み出し,デコーダに入力します。
③読み出した命令をデコーダにて,CPUが処理できる信号に変換し,演算回路に入力します。
ここで,プログラムカウンタは自動的にカウントアップし次の場所(アドレス)が指定されます。
ちょっと難しい話ですが,単純な分岐命令Bを使用している場合はプログラムカウンタに分岐先が指定されます。
④演算回路により命令に合わせて処理します。演算回路では,各命令に合わせて足したり引いたりを行っています。
例えば比較命令CMPは,引き算をしてどちらが大きいか確認しています。
⑤またちょっと難しい話ですが,比較結果を使用する特殊な条件分岐命令を用いていた場合,
処理の後プログラムカウンタに分岐先が指定されることがあります。
ちなみに,②はフェッチ,③はデコード,④はエグゼキュート(実行)と表現されます。
このようにCPUへの命令の組み合わせを準備することにより,CPUは順番通りひとつひとつを処理し,上記の動作を実現するわけですね。」

 

CPUが命令を実行する時間について

ヨースケ先生「CPUの能力を示すパラメータの一つに命令を処理する時間があります。では,CPUは比較命令CMPを
実行するためにどれぐらいの時間が必要なのでしょうか?
マイコンによって異なりますが,遅くても100μsec程度で命令を実行します。速いマイコンになると,数十nsecで実行できるものもあります。
この命令を実行する速度を決めているものがクロックです。
クロックとは命令を実行する時間を定める信号で,単位は周波数[Hz]で表せられます。
このクロックが速ければ,命令を早く実行できます。CPUはこのクロックに合わせて,命令を順番通り実行していくわけですね。」

 

次は
知識豆くん「なるほど!CPUは命令をひとつひとつ処理しているんだね。」
ヨースケ先生「はい。そうです。次回はROMを見てみましょう」

 

知識豆くん「はーい」