コーディングとはプログラムを記述する作業のことである。本節では、CASL
IIのプログラムの書き方の約束を示す。FORTRANでもプログラムの書き方があっ
たように、CASL IIでも約束がある。FORTRANでは各桁は、コメントのしるし(*
or C)を書く欄(第1桁)や文番号を書く欄(第1〜5桁)、継続のしるしを書く欄
(第6 桁)、文を書く欄(第7〜72桁)と役割分担がある。それと同じように、
CASL IIでも行は機能毎に欄が分かれている。例えば、先ほどのプログラム
を例に取ると、図
4のようになる。
各欄はFORTRANのように桁数で分けられているわけではない。機能別の欄の区
切りは、1 個以上の空白である。したがって、
- ラベル欄の先頭の空白は許されない。空白があると、それはラベル
ではなく命令コードと解釈される。
- 各行の命令コード欄やオペランド欄、注釈欄の書き始めをそろえる必
要はない。しかし、各欄の書き始めの位置はそろえたほうが、プ
ログラムは分かりやすくなる。できるだけ、そろえたほうが良い。
となる。
ラベルは、その記述する位置からFORTRANの文番号にも似ている。あるいは、
いままでの例でもわかるように、変数名の役割を果たしている。実際、プログ
ラムでは、FORTRANの文番号や変数名のような使われ方をする。実際のところ、
マシン語の奥底では、それはアドレスを表す。そのアドレスは、それ引き続く
命令に従い、次のように決まっている。
- 機械語命令のラベルの場合は、その機械語命令が格納されている2語分
の領域のうち、その先頭アドレスを表す。実際のプログラムでは、ジャ
ンプ命令とともに使われ、そのアドレスに制御が移る。FORTRANの
GO TO 文でその文番号に制御が移るのと同じである。
- DC命令 の場合、ラベルは定数が格納されている領域 の先頭アド
レスを示す。使い方はFORTRANの変数名に似ているが、実態はアドレス
である。
- DS命令の場合、ラベルはこの命令によって確保されている主記憶の領
域の先頭アドレスを表す。
- INやOUTのマグロ命令の場合は、ラベルは複数の命令群のうちの先頭の
命令が格納されているアドレスを示す。
ラベルがアドレスを表すことが理解できれば、簡単である。常識通りに解釈
すればよいのである。
教科書にも書かれている通り、ラベルの記述の約束は
- プログラムのロジックでラベルが不要な場合は、記述しなくても良い。
- ラベルは、8文字以内で記述する。先頭はアルファベットの大文字、2
文字以降はアルファベットの大文字、数字いずれでも良い。
- 必ず先頭(第1文字)から始める。第1文字が空白の場合は、ラベル名
は無いものみなされ、命令コードと解釈される。
- 汎用レジスタの名前のGR0からGR7は予約語であり、ラベル名として使
用できない。命令コードのオペランドで、ラベルなのかレジスタなの
か区別できなくなるためである。
である。
重要なポイント
以前学習した通りアセンブラのプログラムは、主記憶装置(メイ
ンメモリー)の中に格納されているデータを処理(いろいろな演算)する。ま
た、プログラムの命令も主記憶装置に格納されている。主記憶装置に格納さ
れているデータや命令にアクセスする場合、主記憶装置のアドレスを指定する
ことになる。したがって、アセンブラでは、アドレスが重要になり、プロ
グラマーは意識しなくてはならない。
高級言語の場合、アドレスに関してはコンパイラーが勝手に処
理をする。ありがたいものである。例えば、FORTRANで変数を使った場合、プ
ログラマーがその変数のアドレスに注意を払う必要はない。これは、コンパイ
ラーが変数とアドレスの関係の表を持っており、それに従い、上手にマシン語
に変換してくれているのである。
アセンブラのでは、コンパイラーの代わりにプログラマーが変
数とアドレスの関係を考えなくてはならない。そんなに難しくない。
この欄には、アセンブラ命令(非実行文)、機械語命令、マクロ命令を書く。
教科書にも書かれている通り、記述の約束は以下の通りである。
- ラベルの後に1個以上の空白の後、命令コードを書く。
- ラベルが無い場合は、命令コードの前に1個以上の空白の後、記述する。
この欄には、命令のオペランドを記述する。オペランド(operand:被演算子)
とは、命令の対象となるアドレスやレジスタ、データのことである。CASL II
では汎用レジスタ番号、記号番地(ラベルのこと)、あるいは絶対番地、文字、
整数がオペランドとなる。その記述方法は、教科書に書かれているように、以
下の通りである。
- 命令コードの後に1個以上の空白の後、オペランドを書く。
- 複数のオペランドは、カンマ","で区切って、連続して書く。
行中にセミコロン
";"を書くことのより、それから行末まで注釈(コメン
ト)として扱うことができる。FORTRANの注釈文と同じで、プログラムの実行に
何ら影響を与えない。プログラムの内容を分かりやすくするために書くことが
多い。あるいは、その行を実行させないときに行頭にセミコロンを
";"を
追加してデバック作業を進めることがある。
- 行の先頭、あるいはセミコロンの前に空白しかない場合は、行全体が
注釈となる。
- オペランドの後に1個以上の空白があれば、そこ以降も注釈となる。
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成16年9月7日