指標レジスタなどの実験

ここでは指標レジスタの取り扱いを含む、新しい命令の実験を行います。 (下にある各種実験ボタンでソースを変更して実験ください。)

LAD r, adr , x の動作確認実験

TEST	START		MAIN
A1	DC	10, 9, 8, 7, 6, 5

MAIN	LAD	GR1, 1		;1 を GR1にセット
	LAD	GR2, A1		;A1ラベルのアドレス を GR2へセット	
	LAD	GR3, 3, GR2	;3+GR2 を GR3にセット 
	LAD	GR1, 1, GR1	;1+GR1 を GR1にセット 
	LAD	GR4, A1, GR1	;A1ラベルのアドレス+GR1 を GR1へセット 

	RET
	END

上記のコードをアセンブラエディタに設定するボタン→
CASL,COMET仕様書の見方   LAD r , adr [ , x ]  で[ ]の中は記述しないケースがあることを意味し、xは指標レジスタと呼ばれ、それはGR1〜GR7でありGR0は使えません。
単に、adr+x を rへに記憶させます。実際の意味は、上記コメントとシミュレータを動かして理解ください。

LD r, adr , x の動作確認実験

TEST	START		MAIN
A1	DC	10, 9, 8, 7, 6, 5

MAIN	LD	GR0, A1		;A1アドレスのメモリ内容 を GR0へセット	
	LAD	GR1, 1		;1 を GR1へセット
	LD	GR0, A1, GR1	;(A1+GR1)のアドレスのメモリ内容 を GR0へセット 
	LAD	GR1, A1		;A1アドレス を GR1へセット 
	LD	GR0, 2, GR1	;(2+GR1)のアドレスのメモリ内容 を GR0へセット 

	RET
	END

上記のコードをアセンブラエディタに設定するボタン→
CASL,COMET仕様書の見方   LD r , adr [ , x ]  で[ ]の中は記述しないケースがあることを意味し、xは指標レジスタと呼ばれ、それはGR1〜GR7でありGR0は使えません。
(adr+x)番地のメモリ内容を rへに記憶させます。実際の意味は、上記コメントとシミュレータを動かして理解ください。

LAD r, adr , x とLD r, adr , x の使い方1 確認実験

TEST	START		MAIN
A1	DC	10, 9, 8, 7, 6, 5

MAIN	LAD	GR1, A1		;A1ラベルのアドレス を GR1にセット
	LD	GR0, 0, GR1	;(0+GR1)のアドレスのメモリ内容 を GR0へセット	
	LD	GR0, 1, GR1	;(1+GR1)のアドレスのメモリ内容 を GR0へセット	 
	LD	GR0, 2, GR1	;(2+GR1)のアドレスのメモリ内容 を GR0へセット	 
	LD	GR0, 3, GR1	;(3+GR1)のアドレスのメモリ内容 を GR0へセット	 
	LD	GR0, 4, GR1	;(4+GR1)のアドレスのメモリ内容 を GR0へセット	 

	RET
	END

上記のコードをアセンブラエディタに設定するボタン→
A1のラベル位置に並ぶメモリ情報を、順番にGR0へセットしています。

LAD r, adr , x とLD r, adr , x の使い方2 確認実験

TEST	START		MAIN
A1	DC	10, 9, 8, 7, 6, 5

MAIN	LAD	GR1, 0		;0を GR1にセット
	LD	GR0, A1, GR1	;(A1+GR1)のアドレスのメモリ内容 を GR0へセット	
	LAD	GR1, 1, GR1	;GR1+1をGR1にセット。つまりGR1を増やして1に変更	 
	LD	GR0, A1, GR1	;(A1+GR1)のアドレスのメモリ内容 を GR0へセット	
	LAD	GR1, 1, GR1	;GR1を増やして2に変更 
	LD	GR0, A1, GR1	;(A1+GR1)のアドレスのメモリ内容 を GR0へセット	
	LAD	GR1, 1, GR1	;GR1を増やして3に変更 
	LD	GR0, A1, GR1	;(A1+GR1)のアドレスのメモリ内容 を GR0へセット	

	RET
	END

上記のコードをアセンブラエディタに設定するボタン→
A1のラベル位置に並ぶメモリ情報を、順番にGR0へセットしています。

LAD r, adr , x とST r, adr , x の使い方1 確認実験

TEST	START		MAIN
A1	DC	10, 9, 8, 7, 6, 5

MAIN	LAD	GR0, -1		;-1 を GR0へセット
	LAD	GR1, A1		;A1ラベルのアドレス を GR1にセット
	ST	GR0, 0, GR1	;(0+GR1)のアドレスのメモリ内容 を GR0の-1に変更	
	ST	GR0, 1, GR1	;(1+GR1)のアドレスのメモリ内容 を GR0の-1に変更	 
	ST	GR0, 2, GR1	;(2+GR1)のアドレスのメモリ内容 を GR0の-1に変更	 
	ST	GR0, 3, GR1	;(3+GR1)のアドレスのメモリ内容 を GR0の-1に変更	 
	ST	GR0, 4, GR1	;(4+GR1)のアドレスのメモリ内容 を GR0の-1に変更	 

	RET
	END

上記のコードをアセンブラエディタに設定するボタン→
A1のラベル位置に並ぶメモリ内容を、順番に-1へ変更しています。
このアドレス方式は、指標アドレス方式と呼ばれて、ADDA、ADDL、SUBA、SUBL、CPA、CPL、AND、OR、XOR 命令で使えて、主メモリが操作対象(オペランド)になります。
対して LAD や、各種JUMP、シフト、PUSH、CALL において、 adr , x の部分は、
単に adr+x と足し算した結果が操作対象(オペランド)になります。

=値 と表現するオペランド擬似命令の意味を確認する。

TEST	START		MAIN

MAIN	LD	GR0, =-1		;-1をメモリ空間に用意して、それを GR0にセット
	LD	GR1, =#00FF	;#00FFをメモリ空間に用意して、それを GR1にセット	
	ADDA	GR1, =#FF00	;#FF00をメモリ空間に用意して、それで GR1を増やす	 
	SUBA	GR0, =1		;1をメモリ空間に用意して、それで GR0を減らす	

	RET
	END

上記のコードをアセンブラエディタに設定するボタン→
これは = で指定したを、DCによる定数記憶域で自動的に作る指定で、その作った記憶域のアドレスを表現しています。
メモリ空間に作られる記憶域をシミュレータで確認ください。