Home > Tutorial > Lesson 6

2003.11.07

CASLU & COMETU

Lesson 6 インデックス修飾


汎用レジスタの中のアドレスを利用するプログラム例

このレッスンで出てきた合計を求める次のプログラムと同じ仕事をするプログラムを レジスタにアドレスを入れてそれを利用する方法で書いてみましょう.

SUM	START
	LAD	GR1,0		;GR1を初期化:GR1 ← 0 
	LAD	GR0,0		;GR0を初期化:GR0 ← 0 
LOOP	ADDA	GR0,DATA,GR1	;GR0にDATA[GR1]の値を加算
	ADDA	GR1,CONST1		;GR1を1増やす: GR1← (GR1) +(CONST1)
	CPA	GR1,N		;GR1を(N)と算術比較
	JMI	LOOP		;(GR1)<(N)なら,LOOPに戻る.
	ST	GR0,ZZ		;GR0をZZにストアする: ZZ ← (GR0)
	RET
ZZ	DS	1
CONST1	DC	1
N	DC	5
DATA	DC	5
	DC	3
	DC	8
	DC	9
	DC	7
	END

下のプログラムがそれです.(N)と比較するのではなく (GR1)の初期値をDATAとし, DATA+(N)よりも小さい間繰り返すことで(N)回繰り返しています.

SUM	START
	LAD	GR1,DATA		;GR1を初期化:GR1 ← DATA
	LAD	GR0,0		;GR0を初期化:GR0 ← 0
	LD	GR2,GR1		;GR1つまりアドレスDATAをGR2にロード
	ADDL	GR2,N		;GR2に(N)の中身をアドレス加算.アドレスなので論理加算を使っていることに注意.
LOOP	ADDA	GR0,0,GR1		;GR0に(GR1)番地の内容を加算
	ADDL	GR1,CONST1		;GR1を1増やす: GR1← (GR1) +(CONST1) アドレスなので論理加算を使っていることに注意.
	CPL	GR1,GR2		;GR1をGR2と論理比較.アドレスなので論理加算を使っていることに注意.
	JMI	LOOP		;(GR1)<(GR2)なら,LOOPに戻る.
	ST	GR0,ZZ		;GR0をZZにストアする: ZZ ← (GR0)
	RET
ZZ	DS	1
CONST1	DC	1
N	DC	5
DATA	DC	5
	DC	3
	DC	8
	DC	9
	DC	7
	END