05.リンケージ規約(サブルーチンを作る)

By 神居 - Posted: 2008/11/06 Last updated: 2011/05/16 - Leave a Comment

リンケージ規約(Linkage convention)とはプログラム間の呼び出しに関する取り決めです。規模の大きいプログラムはいくつかのモジュールに分割して、異なる人によって作成されたりします。各人が好き勝手に作っては上手く動きません。そこでプログラム間のインタフェースに共通のルールを作ります。
MVSでもプログラム間のインタフェースに関して標準的な約束事を取り決めています。MVSで動作するプログラムはこの約束事に従って作ることが重要ですし、知っていなければ(守らなければ)正しく動くプログラムを作ることができません。タイトルには(サブルーチンを作る)とありますが、メインルーチンを作る場合でも同じ事です。アプリケーションとしてはメインルーチンであっても、MVSからは一種のサブルーチンとして扱われるのです。なおリンケージ規約はアーキテクチャーで定められたものではなく、使用するオペレーティング・システムによって取り決められます。MVSやVSE(MSP,VOS3,XSPも)などIBMメインフレーム系アーキテクチャーで動くOSは基本的に同じリンケージ規約が使われています。アプリケーションのみならず言語処理プログラムやユーティリティなどもリンケージ規約に従って作られています。OSや多くのミドルウェアなどもユーザープログラムに制御を渡す(呼び出す)際はリンケージ規約を守ります。

リンケージ規約が取り決めているのは以下のプログラム間インタフェースです。


MVSのリンケージ規約

リンケージ規約で使用するGR0,1およびGR13,14,15の各レジスターはリンケージレジスターとも呼ばれます。これらのレジスターはプログラム間リンケージで重要な役割を果たすため、壊してはならないと後生大事に抱えているビギナー・プログラマーをたまに見かけますが、プログラムの冒頭で保管域にセーブしているのですから自由に使ってかまいません。それにMVSやDFPのサービスを呼び出せばどうせ壊れます。レジスター13以外の0,1,14,15番レジスターは作業用のワーキング・レジスターです。積極的に使いましょう。


プログラムの入口点処理と呼び出し元への復帰処理のサンプル

このプログラムはEXEC文のPARMパラメーターで指定されたパラメーター文字列を、コンソールに表示する簡単なプログラムです。
必要な初期設定を行った後、BAS 10,SHOWPARM命令でSHOWPARMサブルーチンを呼び出してパラメーターをコンソールに表示し、復帰コード0を設定して呼び出し元(MVSのジョブ管理ルーチン)に戻ります。
CSECTアセンブラー命令以下、&#9317までの処理がリンケージ規約に基づく最初のセットアップ処理です。ハウスキーピング処理とも呼ばれます。何種類かの方法がありますが、リンケージ規約に合っていれば、使う命令や順序などに決まりはありません。&#9319以降は呼び出し元への復帰処理ですが、これも重要なのは、レジスターを呼び出された時の状態に復元する、と言うことです。レジスターを元に戻さずに復帰してしまうと、呼び出し元は正しく処理を継続できません。

リンケージ規約によるハウスキーピングの処理には複雑な命令は必要ありません。「マシン命令入門」で紹介した基本となる何種類かの命令でロジックが作れます。プログラムの規模や内容に関係なく、とにかく絶対必要な処理なのでしっかりと覚えて下さい。
ここまでくれば、実際にMVSで動かすプログラムを書き始めることができます。まだ使ってない命令やOSのサービスAPIなどたくさんありますが、残りは必要に応じて調べて行けばいいのです。次回からは計算や文字処理、分岐とループなどプログラミングっぽいテーマで解説します。

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