教科書のList5-9のプログラムを例にして、ラベルを2重につける方法について説明する。
教科書の例題6(p.97)〜8(p.101)は、いずれも与えられたデータの最大値を求めるプログ
ラムであった。これらの場合、最大値を求めたいデータの数列とその数が与えられていた。
データ数を元に、数列を読みしと比較を繰り返すことにより最大値を探索した。ここでは、
データ数が与えられていない場合のテクニックを学習する。
教科書のプログラムの内容は、
- ラベルDATAが示すアドレスからデータが格納されている。
- アセンブラ命令DSを上手に使うことにより、データの終わりのアドレスは、
ラベルLAST-1で示している。
- アドレスDATA〜LAST-1に格納されている数列を合計して、ラベル
SUMに格納する。
である。このプログラム例で学習することは、最終データがあるアドレスにラベル名をつ
けることである。それは、プログラム中で示しているように
DATA DC 1,5,6,8,9
LAST DS 0 ;数列の最終アドレス+1
とするのである。こうすると数列の先頭のアドレスは
DATAで、最終アドレスは
LAST-1で示すことができる。
このプログラムのフローチャートを図
1に示す。このプログ
ラムを理解するために、ここで使われているレジスターやラベルの内容を表
3に示しておく。プログラムの内容を理解するときには、変数が
示す内容を考えるのが第一歩である。諸君も、プログラムの内容を調べるときには、変数
の意味を調べることから始めよ。全て分からなくても良い。分かるものから、その意味を
プログラム中に書け。
このプログラムは、そんなに難しくなく、最終アドレス間で次々に加算しているのが理解
できるであろう。
表 1:
汎用レジスターとメモリの内容
GR0 |
加算途中および結果の合計値 |
GR1 |
データの最終アドレス+1(LAST) |
GR2 |
読み込むデータのアドレス(LAST〜LAST-1) |
DATA |
加算する数列の先頭アドレス |
LAST |
加算する数列の最終アドレス |
SUM |
数列を加算した結果を格納するメモリーのアドレス |
図 1:
教科書のList5-9のプログラムの構造とフローチャート
|
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成17年1月29日