03.アセンブラー言語の概説(コーディングの基礎)

By 神居 - Posted: 2008/11/01 Last updated: 2009/12/22 - Leave a Comment

プログラムの書式

アセンブラー・プログラムは1行が80バイトです。LRECL=80の固定長レコードのデータセットを作成してそこへ書いていきます。区分データセットのメンバーとして登録するのが普通ですが、ちょっとしたプログラムや、命令の動きだけを確認したいような時は、アセンブラーJCL中にSYSINデータとして直接コーディングすることも多いです。

アセンブラーではラベル(名前)は第1桁目、命令はラベルがあればラベルの後ろに1文字以上の空白を置いてから、ラベルがなければ第2桁目以降から書けます。オペランド(命令のパラメーター)は命令の後ろに1文字以上の空白を置いてから書けます。オペランド(オペランドがない命令では命令)の後ろに1文字以上の空白を置いてからコメントが書ける。1行に書ききれないときは72桁目に空白以外の文字を置いて、パラメーターは次の行の16桁目から、コメントは17桁目以降から継続できます。アセンブラーは最低限のルールを守れば基本的に自由コーディングできます。しかし行によって命令の開始桁が違っていたり、人によってスタイルが変わると見にくいので伝統的な決まり事があります。
73桁目以降はSEQ番号ですが使わなくてもかまいません。

1?8桁目はラベル。命令は10桁目からオペランドは16桁目から書きます。OSサービスのマクロなど、命令が6文字以上ある場合は、パラメーター(オペランド)開始位置もそれに合わせてずらします。その場合でも継続行は必ず16桁目からでなければなりません。MVSのアセンブラーではロングネームが使えるので必ずしもこのルールに沿えませんが、伝統的な基本として知っておいてください。
コメントにはいろいろスタイルがありますが、第41桁目、40桁目、36桁目などから書かれることが多いでしょう。行全体をコメントにするなら1桁目に*を置きます。オペランドがない命令の文にコメントを書く場合は命令とコメントの間にカンマ記号を置く癖をつけるといいでしょう。

アセンブラー言語ではコメントは非常に重要です。命令文ごとにコメントを付けるのが良いのですが、単なる命令自体の解説のようなコメントばかり続くと、くどくなるので注意します。何をしてるのか、何のためにやるのか等を残すように心がけるといいでしょう。上のサンプルのように*記号などでコメント欄をカプセルのように囲むこともよく行われます。きちんとしたコメントは十分なドキュメントにもなります。商用プログラムではコメント・カプセルの中にドキュメント自体を書いてしまうことも少なくありません。
形を繕うための外部ドキュメントにさしたる意味はありませんが、プログラム内のきちんとしたコメントはプログラムの保守を行う上でとても役に立ちます。商用プログラムの場合、どんなに素晴らしいものでもコメントがまったく無いようなプログラムは0点と言っても過言ではありません。アセンブラー言語でプログラミングを行う場合は、学習レベルのプログラムを書くときからコメントを付ける癖をつけることを勧めます。


プログラムはCSECTで始まりENDで終わる

プログラムの開始はCSECT命令を使います。一般に最初のセクション開始がSTART、2番目以降のセクション開始がCSECTとされますが、特別な理由がない限りSTARTを使う必要はありません。セクションとはプログラムを構成する要素のことで、実行される命令やデータが展開される制御セクション、外部領域内をフィールドに分割して名前で参照できるようにする見かけセクションなどがあります。CSECTは制御セクションのことで実際に命令やデータが展開されてオブジェクト・モジュールとして出力されます。
プログラムの終了はEND命令を使います。END命令にはプログラムの実行開始位置を指定することもできます。省略すればCSECTの先頭から実行されます。実行開始位置をセクションの途中からにする手法はそれほどむずかしいものではありませんが、慣れるまではわかりにくいので素直にプログラムはセクションの先頭から実行されるものなのだ、と覚えていいでしょう。


ロケーションカウンター

ロケーションカウンターはオブジェクトモジュール内の命令やデータがCSECTの先頭からどれだけ離れているかを示すもので、オフセット、アドレス、番地などとも呼ばれます。あくまでもプログラム(CSECT)の先頭からの相対アドレスです。実際の仮想記憶域にローディングされると、そのローディング・アドレスが加算されて仮想記憶上の主記憶アドレスを形成します。ロケーションカウンターは命令やデータの長さに応じてアセンブラーが適切な番地を計算しますが、必要に応じてプログラマーが変更することもできます。これによってデータ領域の再定義(Redefine)が可能になります。


アセンブラー命令

アセンブラー言語では命令は大きく3種類あります。1つはCPU命令です。マシン命令、機械命令とも言いCPUの1つ1つの動作を指示するものです。次がマクロ命令です。複数の命令をまとめたもので、繰り返し実行する処理などをいちいち書かなくても、マクロ名を書けば対応する命令列に展開してくれるものです。OSのサービス(API)などの多くはマクロ命令を使って呼び出します。メインフレームのマクロは非常に強力な機能を持っていて、活用すれば高級言語並みのコーディングが可能になります。CPU命令とマクロ命令(1部例外を除く)は最終的にオブジェクトモジュールになります。最後が「アセンブラー命令」です。アセンブラー命令は実際にCPUで実行されるものではなく、アセンブラーに対してアセンブル時の動作を指示するものです。いろいろとありますが覚えなければいけないものはそれほど多くありません。



簡単なアセンブラー・プログラムの例

消費税を計算する簡単なプログラムです。どのアセンブラー命令が出てきたか復習してみましょう。計算結果として税込み価格をプログラムの完了コードとして出力します。(OSの仕様で4095円を超えると完了コードでは正しく表示できません)

Posted in S/370アセンブラー講座 • • Top Of Page