4 [例題2]加算と条件分岐]

教科書のList5-2のプログラムを例にして、条件分岐について説明する。

4.1 高級言語との違い

高級言語の場合、条件分岐は簡単に実装できる。例えば、変数abの大きい方 から小さい方を減算する場合、
	
	if(a<b){
	  c=b-a;
	}else{
	  c=a-b;
	}
と書けばよい。ここで、if文の括弧の中の演算を制御式と言う。高級言語は、人間 が使っている言葉とほとんど同じで、プログラムが簡単に書ける。

しかし、アセンブラーでは、こんなに簡単ではない。そもそも、if文がないため、 それに変わるテクニックを使わなくてはならない。機械語命令を組み合わせて、高級言語 のif文と同じことをするのである。かなりプログラムは面倒であるが、その分コン ピューターのハードウェアー(特にCPU)は簡単になり、高速の動作が可能になる。

アセンブラー言語でifの様な制御文を実現するためには、次のようにする。

  1. 制御式の結果をフラグレジスターに設定する。通常CPACPL命令が使 われるが、フラグレジスターが設定できるもので有れば何でも良い。
  2. フラグレジスターの値により、分岐する命令(JMI, JNZ, NZE, JUMP, JPL, JOV)を使い、実行する文を選択する。
  3. ジャンプ先は、ラベルで指定する。

4.2 プログラムの構造

まず、リストをみて、プログラムが図3の構造になっている ことを理解しなくてはならない。
図 3: 教科書のList5-2のプログラムの構造。
\includegraphics[keepaspectratio, scale=1.0]{figure/REI5-2.eps}

4.3 フローチャート

このプログラムのフローチャートを図4を示す。このプログ ラムは、[例題1]とは異なり、プログラムの実行が条件に従い分岐する。このようなプロ グラムの構造を「選択」という。ここでは、この選択がフラグレジスターの値を制御値と してジャンプ命令で実装されていることを理解しなくてはならない。

それから、出力命令OUTも理解しなくてはならない。

図 4: 教科書のList5-2のプログラムのフローチャート。
\includegraphics[keepaspectratio, scale=1.0]{flow_chart/REI5-2.eps}



ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成16年12月16日


no counter