転送命令

 データのやりとりに使う命令にはLD(Load), ST(Store),LAD(Load Address)があります。以下では各命令について説明します。

   LD (Load)
COMETⅡでは,算術演算,論理演算などの演算は汎用レジスタ上で行われるため,演算に先立ってデータを 汎用レジスタに持ってきておく必要がある。LD命令は記憶装置のある番地の内容を汎用レジスタに 持ってきたり,汎用レジスタ間でデータを移動したりするときに使用される。

[書式1]  LD r1,r2
オペランド欄のr1,r2は汎用レジスタを表している。 この命令によって,r1にr2の内容がロードされる。 この命令により,フラグレジスタのサインフラグSF,ゼロフラグZFには 結果に応じて値が設定される。ただしオーバーフローフラグOFはゼロ0が設定される。

[例]  LD GR0,GR1
例えばGR1の内容が3のとき,3がGR0にロードされる。

[書式2]  LD r,adr[,x]
オペランド欄のrは汎用レジスタ,adrは記憶装置の番地, xはアドレス修飾に使う汎用レジスタ(インデクスレジスタ,指標レジスタ)を表している。 この命令により,rにadr[,x]で指定される実効アドレスの内容がロードされる。 フラグレジスタの設定は書式1の場合と同じ。

[例1]  LD GR0,A
A番地の内容がGR0にロードされる。

[例2]  LD GR0,A,GR1
例えばGR1の内容が3のとき,A+3番地の内容がGR0にロードされる。

   ST (Store)
ST命令は,LD命令とは逆に,汎用レジスタの内容を記憶装置のある番地に格納する。

[書式]  ST r,adr[,x]
rの内容がadr[,x]で指定される実効アドレスにストアされる。 フラグレジスタは設定しない。

[例1]  ST GR0,A
GR0の内容がA番地にストアされる。

[例2]  ST GR0,A,GR1
例えばGR1の内容が3のとき,GR0の内容がA+3番地にストアされる。

   LAD (Load Address)
LAD命令は,実効アドレスの内容ではなく,実効アドレスそのものを汎用レジスタにロードする 命令である。この命令は,汎用レジスタに初期値を設定したり, ループのカウンタなどの制御変数の値を操作したりするときに使われる。

[書式]  LAD r,adr[,x]
rにadr[,x]で指定される実効アドレスそのものがロードされる。 フラグレジスタは設定しない。

[例1]  LAD GR0,5
5番地のアドレスそのもの,すなわち"5",がGR0にロードされる。


[例2]  LAD GR0,A
記号番地であるA番地が例えば236番地に対応するとき,236がGR0にロードされる。

LAD命令の応用例として次のような使い方がある。

[応用例1] 汎用レジスタのゼロクリア
 LAD GR0,0
"0"がGR0にロードされる。

[応用例2] 初期値の設定
 LAD GR0,A,GR1
A番地が256番地に対応し,GR1の内容が3のとき,アドレス修飾により 実効番地は256+3=259番地になり,259がGR0にロードされる。


[応用例3] レジスタ間のデータの移動
 LAD GR1,0,GR2
GR2の内容が80のとき,実効番地は0+80=80番地になり, 80がGR1にロードされる。結果的に,GR2の内容をGR1に転送したのと同じ。


[応用例4] 加算/減算命令を使わずに汎用レジスタの値を増やす/減らす
 LAD GR1,2,GR1
GR1の内容が3だったとすると,実効番地は2+3=5番地になり, 5がGR1にロードされる。結果的に,GR1の内容に2を足したのと同じ。