教科書のList5-2のプログラムを例にして、条件分岐について説明する。
高級言語の場合、条件分岐は簡単に実装できる。例えば、変数
aと
bの大きい方
から小さい方を減算する場合、
if(a<b){
c=b-a;
}else{
c=a-b;
}
と書けばよい。ここで、
if文の括弧の中の演算を制御式と言う。高級言語は、人間
が使っている言葉とほとんど同じで、プログラムが簡単に書ける。
しかし、アセンブラーでは、こんなに簡単ではない。そもそも、if文がないため、
それに変わるテクニックを使わなくてはならない。機械語命令を組み合わせて、高級言語
のif文と同じことをするのである。かなりプログラムは面倒であるが、その分コン
ピューターのハードウェアー(特にCPU)は簡単になり、高速の動作が可能になる。
アセンブラー言語でifの様な制御文を実現するためには、次のようにする。
- 制御式の結果をフラグレジスターに設定する。通常CPAやCPL命令が使
われるが、フラグレジスターが設定できるもので有れば何でも良い。
- フラグレジスターの値により、分岐する命令(JMI, JNZ, NZE, JUMP, JPL,
JOV)を使い、実行する文を選択する。
- ジャンプ先は、ラベルで指定する。
まず、リストをみて、プログラムが図
3の構造になっている
ことを理解しなくてはならない。
図 3:
教科書のList5-2のプログラムの構造。
|
このプログラムのフローチャートを図
4を示す。このプログ
ラムは、[例題1]とは異なり、プログラムの実行が条件に従い分岐する。このようなプロ
グラムの構造を「選択」という。ここでは、この選択がフラグレジスターの値を制御値と
してジャンプ命令で実装されていることを理解しなくてはならない。
それから、出力命令OUTも理解しなくてはならない。
- OUT命令の最初のオペランドは、出力したい文字が格納されている先頭アドレスで
ある。
- 2番目のオペランドは、出力する文字数が格納されているアドレスである。これが
ないと、何文字出力するか、コンピューターは分からない。
図 4:
教科書のList5-2のプログラムのフローチャート。
|
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成16年12月16日