COBOLから呼ばれるアセンブラールーチン

By 神居 - Posted: 2008/12/05 Last updated: 2010/01/20 - Leave a Comment

現在ではアセンブラー言語でメインのアプリケーションを作ることはほとんどないものの、COBOLなどで作成されたアプリケーションからサブルーチンとしてのアセンブラープログラムを呼び出すことはよく行われます。COBOLなどの高水準言語プログラムから呼び出されるアセンブラールーチンの作成はさほどむずかしいことではありません。リンケージ規約通りにプログラムを作ればいいのです
しかし逆はかなり面倒です。アセンブラールーチン側で言語処理プログラムの環境を作り上げねばなりません。現実的にアセンブラーでメインのアプリケーションを作り、サブルーチンをCOBOLで作るなどと言うことはまず行われませんからその方法はあえて解説もしません。必要ならコンパイラー(z/OSの場合ならLE)のマニュアルに解説されていますので参照してみてください。


COBOLから呼ばれるサブルーチン例

COBOLから渡されるパラメーターはGR1が示すアドレス・パラメーターリストで受け取ることができます。
CALL文のUSINGで指定された順序でパラメーターが格納された領域アドレスが示されます。サンプルでは3つのパラメーターPARM1,PARM2,PARM3を格納した領域アドレスがGR1で示されるアドレス・パラメーターリストで渡されます。PARM3アドレスを示すワードの先頭ビットは最終パラメーターであることを示すため1にセットされます。PARM1からPARM3領域のアドレスをLM命令でGR2からGR4にそれぞれロードします。
PARM1およびPARM2で渡された値をPARM3領域にエコーバックするのがこのサンプルで行っている処理です。PARM1は8バイトの文字、PARM2はフルワードの整数値で、それぞれをPARM3領域の前半8バイトと後半8バイトに格納します。PARM2はバイナリー値を10進文字に変換して設定します。
もちろんどのパラメーターがどのような形式や長さ、意味を持つかはプログラム間のインタフェースとして予め取り決めておきます。
リンケージ規約やアドレス・パラメーターリストについてはリンケージ規約(サブルーチンを作る)も参照して下さい。


呼び出すCOBOL側のサンプル

呼び出されるアセンブラー・サブルーチンに対応した呼び出す側のCOBOLのサンプルです。
最初の例はアセンブラールーチンもリンケージエディターで静的に結合されたモジュールの呼び出し例で、2番目はリンケージエディターで結合されていない独立したロードモジュールの呼び出し例です。IBMのEnterprise COBOLによるコーディング例です。細かな構文はメーカーが提供するCOBOLコンパイラーによって多少の違いがあるので利用するコンパイラーのマニュアルも参照して下さい。


パラメーターの値渡し

IBMのEnterprise COBOLではパラメーターを値その物で渡すこともできます。CALL文のUSINGパラメーターに「BY VALUE」を指定することでパラメーター領域のアドレスではなく値が渡ります。渡せるパラメーター(値)は2進整数など4バイト以内で渡せるデータに限ります。

Posted in MVS実践アセンブラー・プログラミング • • Top Of Page