CASL U - プログラミングの基礎(ロード,ストア,ロードアドレス) |
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 |