植物 植物
初心者講座:ロードとストア

AOBA's Information Processing Education



1998/02/22

注意1:このページは、回線を切断した後でゆっくりご覧になってください(テキストを印刷する場合は、その取り扱いに注意してくださるようお願いします)。

注意2:背景が白地の画面を長時間見つめていると頭が痛くなってしまいますので、ここは背景をグレーにしています。


 まずは次の流れ図を見てください。この流れ図は変数Aの内容を変数Bに代入する処理です。

図1

 第2回目のプログラム流れ図の講座で、”変数とは、何でも代入できる自由な入れ物”と解説しました。この変数はコンピュータ上のどこに存在するか分かりますか?
 毎週この講座をご覧になっている方はお分かりだと思いますが、その答えは主記憶装置の一部です。そして、変数Aや変数Bは、主記憶装置に割り当てられた番地でもって区別されます。

図2

 上図は変数Aが200番地、変数Bが201番地に割り当てられた場合の主記憶装置を表しています。そしてこの状態から”A → B”の処理を実行すると、201番地の内容が30になります。
 この流れ図の処理を機械語にすると、”200番地の内容を201番地に設定する”ということになるでしょう(だけどCASLにはこんな命令はありません...後述)。

(注)必ずしも1つの番地内に1つの変数が入るとは限りません。

 ところで、変数Aや変数Bの番地を決定するのは誰でしょうか?。これらの変数が勝手な番地に割り当てられると、プログラムが組めないですよね。
 でも大丈夫。結論から言えば、変数Aや変数Bの番地を決定するのはアセンブラ(正確にはリンカ)が行いますが、プログラマは多くの場合主記憶装置上の(絶対)番地を意識する必要はないのです。

 ここで重要な点は、流れ図においては変数を(主記憶装置上に)確保する命令が明に存在しないが、CASL言語でプログラムする際は、変数を確保する命令を書かなければならない”ということです。そしてCASLで変数を確保する命令を記述することによって、ある特定の番地に変数が割り当てられます。だからこの命令がある限り、プログラマは番地ではなく、流れ図における変数と同じ感覚でプログラムが組めます。

 CASL言語において変数を確保する命令の書式は以下の通りです。

ラベル名 DS 語数

 例えば、変数Aと変数Bをそれぞれ1語(2バイト=16ビット)づつ確保したいのならば次のように記述します。

A DS 1
B DS 1

(注)正確にはDS(Define Storage)命令は擬似命令と言って、CASLの機械語命令ではありませんが、ここではそれを意識する必要はありません。また、上記のAやB(これをCASLではラベルという)は本当は流れ図における変数とはちょっと(全然??)違うのですが、とりあえずは、同じものと思って結構です。

 さて最初に戻って、”A → B”の処理を行う命令をCASLでどう記述すればよいかの解説に移ります。

 実はCASLでは、”A → B”の処理を1命令で記述することはできません。なぜならCASLには、主記憶領域どうしの動作(演算も含む)を行う命令がないからです。

(注)”A → B”の処理におけるAは主記憶領域の一部です。同じようにBも主記憶領域の一部です。

 ここで汎用レジスタ(GR0〜GR4)の登場となります。
 CASLで”A → B”の処理を行うには、@Aの内容を汎用レジスタに設定し、A同じ汎用レジスタの内容をBに設定するのです。以下の図を参照してください。この図は汎用レジスタ0番(GR0)を使用して、”A → B”の処理と同じことを行っています(レジスタは何番を使用してもよい)。

図3

 上図にあるように、主記憶装置の内容を汎用レジスタ(以下、他のレジスタと混同しない限り、単にレジスタと呼ぶ)に設定する動作をロード、逆にレジスタの内容を主記憶装置に設定する動作をストアといいます。
 なお、ロードを行っても主記憶装置の内容は変化せず、ストアを行ってもレジスタの内容は変化しません。

(注)前回ちょっと触れましたが、COMETの汎用レジスタの大きさは1語です。また、この例のAとBもそれぞれ1語の大きさを持っています(DS1だから)。これらの大きさが同じなので、うまくAの内容がBに代入されるのです。

 でもって、このロードとストアを行う命令をそれぞれロード命令とストア命令といい、CASLにも当然これらの命令が存在します。
 ロード命令とストア命令の(最も簡単な)書式は以下の通りです。

「ロード命令」
 LD 汎用レジスタ番号,ラベル
「ストア命令」
 ST 汎用レジスタ番号,ラベル

 だから”A → B”の処理をCASLのプログラムにすると

  LD GR0,A
  ST GR0,B
  ・・・・・・
A DS 1
B DS 1
  ・・・・・・

となるでしょう。このように4行書くとちょっとはプログラムらしいですね。

(注)GR0と記述せずに、0と記述してもよいのですが普通はGRを付けてプログラムを書きます。

 今週はここまでにしましょうか。
 ではまた来週。