「天文屋のためのマイコン入門」制御命令
さて、データについては一通り説明は終わりました。また命令の説明に戻りたいと思います。命令ですが、転送命令と演算命令は説明しました。ただ、これだけではマイコンのプログラムは組めません。
マイコンはプログラムメモリに格納された命令を上から順に実行していくだけでは複雑な処理はできません。
プログラムは同じ処理を繰り返したり、特定の場所を飛ばしたり、ジャンプしたり、条件によって処理を変えたりします。
これらのプログラムの流れを変える命令を制御命令といいます。これがないとプログラムは組めません。
制御命令は2種類あり、どちらも絶対に必要なものです。
1 無条件ジャンプ命令 無条件にプログラムの特定の番地にジャンプする。
2 条件ジャンプ命令 ある条件が満たされた場合のみ特定の番地にジャンプする。条件が満たされない場合は次の命令から実行される。
1の無条件ジャンプ命令は一個しかありませんが、2の条件ジャンプ命令は条件の数だけ複数あります。条件の種類としては、「0かどうか」とか、「桁上がりがあるかないか」などの条件があります。
それでは無条件ジャンプ命令を紹介します。無条件ジャンプ命令は次のようなものです。
具体的な命令は次のようになります。
GOTOというのは天文屋には親しみやすい名称ですが、この命令によりプログラムはk番地にジャンプします。
ここでいう番地とは、レジスタファイルの番地とはまったく違います。プログラムは、データとはまったく別のプログラムメモリに格納されます。そのメモリの番地です。命令は通常、1命令1番地使いますので、k番地といったら、k番目の命令にジャンプすると言ってもいいでしょう。
レジスタファイルの番地は、0から127まででした。つまり14ビットの命令のうち、下位7ビットで番地を指定し、残り7ビットで命令の種類を指定すると説明しました。
プログラムメモリの番地ですが、127番地までしか許されないということは、命令が128個しか許されないということで全然足りないのです。実はプログラムメモリは2047番地まであります。つまり2048個まで命令を格納できます。ただし、番地を指定するのに11ビット必要になります。
しがたって、命令のフォーマットは以下のようになります。
これを見ると、データ命令と比べると、ジャンプ命令は命令の種類を指定するフィールドが3ビットしかありません。もし、PICのすべての命令がこのフォーマットであるなら、PICの命令は8個(2の3乗)しかないことになります。
何が言いたいかとうと、ジャンプする命令は、非常に命令コストが高いということです。もし、このような命令ばかりだと、PICの命令は少なくなってしまいます。だからジャンプする命令は、必要最小限にしなければなりません。
ところが、制御命令は無条件ジャンプ命令だけではありません。条件ジャンプ命令もあります。これらすべてを番地へジャンプする命令とすることはできないのです。
そこで、考え出されたのが、スキップ命令という概念です。次回説明する条件ジャンプ命令は、すべてスキップ命令として実現されています。
次回詳しく説明します。
| 固定リンク
コメント