CASL U - プログラミングの基礎(ロード,ストア,ロードアドレス)
 前へ 目次へ 次へ

CASLU プログラミングの基礎

 CASLUの命令の使い方、動作(機能)やプログラムの書き方など、基本的なことについて説明していく。

プログラムの実行確認には、次のソフトウェアを使用させていただきました。
情報処理技術者試験 COMETII & CASLII シミュレータ InfoCASL
東京理科大学  情報処理技術者試験研究会
http://www.rs.kagu.sut.ac.jp/~infoserv/


 (1) ロード,ストア,ロードアドレス命令

(A) ロード命令

 ロード命令は汎用(はんよう)レジスタGRに値を記憶させる命令である。

命令例 動作
LD  GR0, DATA1 実効アドレスに記憶されている内容をGR0に格納する。
実効アドレスはDATA1番地である。
LD  GR2, DATA1, GR1 実効アドレスに記憶されている内容をGR2に格納する。
実効アドレスは(DATA1番地+GR1の内容)である。


例題1-1 GR0に1234(16)を記憶させる。値はメモリに記憶させておくものとする。

EX11     START
         LD      GR0, DATA1
         RET
DATA1    DC      #1234
         END

 まず、アセンブラを制御するアセンブラ命令について説明する。
 
 この例題では1行目のSTART、4行目のDCと5行目のENDアセンブラ命令である。
 1行目のSTART命令と最終行のEND命令はCASLUプログラムの最初と最後を示すもので、必ず1組は必要である。
 START命令には必ずラベルを付ける必要がある。プログラムの名称と考えればよい。
 
 4行目のDC命令は定数で指定したデータをメモリに記憶させる。この例題ではメモリ上のDATA1番地に定数1234(16)が記憶される。定数には「定数の表し方」で説明したように10進定数、16進定数、文字定数、アドレス定数がある。
 ラベルに使ったDATA1はルールに従っていれば別の名前でもよい。

 2行目のLD、3行目のRET機械語命令である。
 2行目のLD命令でGR0にDATA1番地の内容、すなわち定数1234(16)が記憶される。2行目実行後、GR0の内容は1234(16)(0001 0010 0011 0100(2))となる。
 
 3行目のRET命令は呼出し元に戻る命令である。CASLプログラムはOSから呼び出される形をとっているので、このRET命令でOSに戻ることになる。

 次のプログラムは例題1-1と同じものである。(プログラムが見にくい)

EX11 START
 LD GR0, ATAI1
 RET
ATAI1 DC #1234
 END

 ラベル名をATAI1に変更している。ラベル、命令とオペランドの間の空白を1つにしている。
 ラベルは行の先頭から、ラベル以外は2文字目以降から書き始める。しかし、プログラムリストは見にくくなる。



 (B) ストア命令

 ストア命令は汎用(はんよう)レジスタGRの値を実効アドレスに記憶させる命令である。

命令例 動作
ST  GR0, DATA1 GR0の内容を実効アドレスに格納する。
実効アドレスはDATA1番地である。
ST  GR2, DATA1, GR1 GR2の内容を実効アドレスに格納する。
実効アドレスは(DATA1番地+GR1の内容)である。

例題1-2 GR0に1234(16)を記憶させておき、その値をABC番地に記憶する。サンプルを2つ示す。

EX12A    START
         LD      GR0, DATA1
         ST      GR0, ABC
         RET
DATA1    DC      #1234
ABC      DS      1
         END

 EX2Aは3行目のST命令でGR0の内容をABC番地に記憶させている。ABC番地については領域を用意しておく必要がある。6行目のDS命令でラベルABCに対して1語分の領域を確保している。

EX12B    START
         LD      GR0, =#1234
         ST      GR0, ABC
         RET
ABC      DS      1
         END

 EX2BとEX2Aを比べると1行少ない。DATA1  DC  #1234の命令行がなくなっている。DATA1番地がなくなったということになるので2行目のLD命令の行を見ると次のようになっている。
    LD      GR0, =#1234
 16進定数#1234の前に = がついている。これをリテラルと呼ぶ。CASLUは = の後の定数をオペランドとしてDC命令を自動的に生成する。 = の後の定数は10進定数、16進定数と文字定数である。
 具体的には次のようにCASLUが解釈してくれるということである。

EX2B     START
         LD      GR0, WWW00001
         ST      GR0, ABC
         RET
ABC      DS      1
WWW00001 DC      #1234
         END

 ラベルwww00001はほかのラベルと重ならないように、また、わかりやすいように、私が勝手に付けたものである。



 (C) ロードアドレス命令

 ロードアドレス命令は汎用(はんよう)レジスタGRに実効アドレスを記憶させる命令である。

命令例 動作
LDA  GR0, DATA1 実効アドレスをGR0に格納する。
実効アドレスはDATA1番地である。
LDA  GR2, DATA1, GR1 実効アドレスをGR2に格納する。
実効アドレスは(DATA1番地+GR1の内容)である。

例題1-3 GR0に1234(16)を記憶させる。値は直接レジスタに記憶させる。

EX13    START
        LDA     GR0, #1234   ;LD  GR0, =#1234
        RET
        END

 2行目は実効アドレス#1234がレジスタGR0に記憶される。2行目のコメントにあるように LD   GR0, =#1234 と書いても同じ結果になるが、こちらはCASLUが自動的にDC命令を生成するので、1語分多くメモリを使うことになる。



 (D) ロード命令2

 ロード命令は汎用(はんよう)レジスタGRに値を記憶させる命令である。ロード命令のもう一つの書き方を説明する。

命令例 動作
LD  GR0, GR1 GR1の内容をGR0に格納する。


例題1-4 GR0とGR2に1234(16)を記憶させる。値はメモリに記憶させておくものとする。

EX14     START
         LD      GR0, DATA1
         LD      GR2, GR0
         RET
DATA1    DC      #1234
         END


 前へ 目次へ 次へ
 CASL U Copyright © 2003,2017  Hiroshi Masuda

 

 

inserted by FC2 system