Subsections
教科書の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で示すことができる.
このプログラムのフローチャートを図
4に示す.このプログ
ラムを理解するために,ここで使われているレジスターやラベルの内容を表
4に示しておく.プログラムの内容を理解するときには,変数が
示す内容を考えるのが第一歩である.諸君も,プログラムの内容を調べるときには,変数
の意味を調べることから始めよ.全て分からなくても良い.分かるものから,その意味を
プログラム中に書け.
このプログラムは,そんなに難しくなく,最終アドレス間で次々に加算しているのが理解
できるであろう.
表 2:
汎用レジスターとメモリの内容
GR0 |
加算途中および結果の合計値 |
GR1 |
データの最終アドレス+1(LAST) |
GR2 |
読み込むデータのアドレス(LAST〜LAST-1) |
DATA |
加算する数列の先頭アドレス |
LAST |
加算する数列の最終アドレス |
SUM |
数列を加算した結果を格納するメモリーのアドレス |
図 4:
教科書のList5-9のプログラムの構造とフローチャート
|
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
2006-02-16