教科書のList5-4のプログラムを例にして、論理演算とアドレス修飾について説明する。
教科書のプログラムは、
- ラベルA,Bに#0030,#009Fが格納されている。
- ラベルANSから、3語このプログラムで確保されている。
- ANSから確保された3語の領域に、A AND BとA OR B、A XOR
Bの演算結果を格納せよ。
と言う問題を解く、プログラムである。
このようなプログラムを作成するために必要なことは、
- データ領域
- 演算の対象データ(#0030,#009F)をラベル(A,B)を指定してメ
モリーに書き込む。
- 演算結果を書き込む領域をラベル(ANS)を指定して、確保する。
- 命令領域
- 演算対象データをレジスターにコピー
- 演算の実行
- 計算結果の格納
である。
大まかなプログラムの流れは、分かった。また、論理演算も解くに説明することもないだ
ろう。演算対象のデータのそれぞれのビット毎の論理和(OR)と論理積(AND)、排他的論理
和(XOR)を計算しているだけである。
プログラムの命令領域とデータ領域は、図1のようになるだろう。プ
ログラムの書き方によっては、こうならないこともあるが、通常はこのようになる。
図 1:
教科書のList5-4のプログラムを実行する場合のメモリ構造。図中の?は
値はあるが、不明を示している。
|
この場合、プログラムのデータ領域にアクセスする事を考える。ラベルAやBは
簡単で、ラベル名を示せば良い。ラベル名はアドレスを示すからである。問題は、結果を
格納する領域である。このアドレスは、3つ続いて確保されているが、先頭だけANS
とラベル名がある。残りの2つの表し方である。これらのアドレスは、ANS+1と
ANS+2である。ANSのアドレスにオフセットの値を加算するのである。
プログラムで使うメモリーのアドレスは、ANS+オフセットで、オフセットは、
0,1,2とすれば良い。論理和の結果をANS+0、論理積の結果をANS+1、論理
和の結果をANS+2に格納する。プログラムでは、オフセットの0,1,2をGR2
に入れておき、
ST GR1,ANS,GR2
と書く。演算の結果(
GR1)の値が、
ANSにオフセット値(
GR2)を加えたアド
レスに格納される。
ここで、使っているGR2のように、1つずつ値が増加するものをカウンターと呼ぶこ
とがある。これを使うためには、
- カウンターの初期化。ここでは、GR2をゼロに設定する。
- カウンターのインクリメント。カウンターの値を1増加させる。
とする。このテクニックは、重要である。内容をよく理解する必要がある。
このプログラムのフローチャートを図
2に示す。。
図 2:
教科書のList5-4のプログラムの構造とフローチャート
|
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成16年12月25日