ハードウェアの仕組みとソフトウェア処理 ―― マイコンの動作を理解する
tag: 組み込み 半導体 ディジタル・デザイン
技術解説 2009年11月27日
2.実行制御のための機構
● 実行アドレスを書き換える分岐命令
マイコンは,実行すべき命令のアドレスを保持する特別なレジスタを持ち,命令を取り出すたびにレジスタの値を自動的に加算して,次の命令に進む仕組みを持ちます.これによって,アドレスの順に命令を実行できます.このレジスタはさまざまな呼び方がありますが,ここでは「命令アドレス・レジスタ」と呼ぶことにしましょう.
マイコンの命令実行でもう一つ重要な機能は,前方のアドレスや後方のアドレスに分岐する機能です(図4).いくつかの処理から一つを選んで実行(分岐)したいときは,実行したい処理の先頭アドレスまで分岐します.同じ処理を繰り返し実行(ループ)したいときは,実行したい処理の末尾アドレスから先頭のアドレスに戻るように分岐します.
特に,演算結果に従って別のアドレスに分岐する条件分岐の機能が重要です.条件分岐を用いることによって,「もしAだったらBの処理を行い,AでなかったらCの処理を行う」というように,物事を判断してそれに対応した処理を行うことができます.この機能があるため,マイコンは単なる計算機ではなくて,知能を持った機械として用いることができます.
分岐機能を実現するために,マイコンには命令アドレス・レジスタを所定の値に書き換える命令が備わっています.この命令を実行すれば,その次の命令は書き換えられた新しいアドレスから取り込むことになります.これは,分岐(ジャンプ)命令と呼ばれます.
● 演算結果を判断する仕組み=フラグと条件分岐
CPUが演算命令を実行すると,指定されたデータ(汎用レジスタやメモリに置かれる場合が多い)をALUに送って演算を行い,結果を指定された記憶場所(汎用レジスタやメモリ)に保存します.このとき,演算結果が持つ特徴を,フラグ・レジスタ(またはステータス・レジスタ)と呼ばれる特別なレジスタに書き込みます(図5).
例えば演算結果が0だった場合,フラグ・レジスタの中のゼロ・フラグと呼ばれる1ビットが'1'になります.演算結果が負の数になった場合,フラグ・レジスタの中のネガティブ・フラグと呼ばれるビットが'1'になります.演算によってけた上がりが生じた場合,フラグ・レジスタの中のキャリ・フラグと呼ばれるビットが'1'になります.演算結果が汎用レジスタのビット数を超えてしまった場合,フラグ・レジスタの中のオーバフロー・フラグと呼ばれるビットが'1'になります.
分岐(ジャンプ)命令の中で,特に条件分岐命令と呼ばれるものがあります(図6).これは,フラグ・レジスタの中の特定のフラグを参照して,その値によって分岐するかしないかを決めるものです.例えば,ゼロ・フラグが'1'(すなわち演算結果が0)なら分岐する命令,ゼロ・フラグが'0'(すなわち演算結果が0でない)なら分岐する命令,ネガティブ・フラグが'1'(すなわち演算結果が負)なら分岐する命令,ネガティブ・フラグが'0'(すなわち演算結果が正)なら分岐する命令というように,フラグごとに細かく命令が作られています.
この条件分岐命令によって,マイコンは演算結果をすばやく判断し,それに対応する処理を実行できます.
たいていの高級言語では,if~else文を用いて,「もしAならBを実行,そうでなければCを実行」というようなコードを記述することができますが,それはすべてこの条件分岐の機能を用いて実現されます.