Subsections
コーディングとはプログラムを記述する作業のことである.本節では,CASL
IIのプログラムの書き方の約束を示す.FORTRANでもプログラムの書き方があっ
たように,CASL IIでも約束がある.FORTRANでは各桁は,コメントのしるし(*
or C)を書く欄(第1桁)や文番号を書く欄(第1〜5桁),継続のしるしを書く欄
(第6 桁),文を書く欄(第7〜72桁)と役割分担がある.それと同じように,
CASL IIでも行は機能毎に欄が分かれている.例えば,先ほどのプログラム
を例に取ると,図
5のようになる.
各欄は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の注釈文と同じで,プログラムの実行に
何ら影響を与えない.プログラムの内容を分かりやすくするために書くことが
多い.あるいは,その行を実行させないときに行頭にセミコロンを
";"を
追加してデバック作業を進める
5ことがある.
- 行の先頭,あるいはセミコロンの前に空白しかない場合は,行全体が
注釈となる.
- オペランドの後に1個以上の空白があれば,そこ以降も注釈となる.
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
2005-11-25