副プログラムのエントリポイントの呼び出し

副プログラムのエントリポイントの呼び出し

呼ばれるプログラムは、手続き部の先頭から開始するのではなく、指定のエントリポイントから実行することができます。 呼ばれるプログラムのエントリポイントは、ENTRY 文を使用して定義します。 次に、CALL 文でそのエントリポイントを指定して、呼ばれるプログラムをエントリポイントから開始します。

エントリポイントを含むプログラムがランタイムシステムにロードされると、そのプログラム内のすべてのエントリポイントがランタイムシステムで識別され、その後にロードするすべてのプログラムから呼び出して使用することができます。

ただし、ランタイムシステムは、まだロードされていないプログラムのエントリポイントを検索することはできません。 たとえば、次のように CALL 文を実行します。

CALL "abc" USING ...

ランタイムシステムはまず、すでにロードされているすべてのプログラムから、 abc というプログラムまたはエントリポイントを検索します。 見つからない場合は、実行可能なファイル形式.ext である、abc.ext というファイルをディスク上で検索します。 abc が、ロードされていないプログラムのエントリポイント名である場合、ランタイムシステムはこのエントリポイントを検索できません。

このため、エントリポイントを呼び出す前に、そのエントリポイントを含むプログラムをロードするか、またはエントリポイントをあらかじめロードしておく必要があります。 エントリポイントをあらかじめロードするには、エントリポイントを持つプログラムを含むライブラリファイルを作成します。

ライブラリファイルを呼び出すとき、ランタイムシステムは、ライブラリファイル内のプログラムをすべてロードするわけではありません。 その代わり、ランタイムシステムは、後で参照できるように、呼ばれるライブラリファイルに含まれるプログラムとエントリポイントをすべて登録します。 後でこれらのプログラムの 1 つを呼び出すときに、ランタイムシステムは、そのプログラムがライブラリファイルに含まれていることを認識し、その時点でプログラムをロードします。

Note: リンク時に呼ばれるプログラムの名前は、システムのアセンブラとリンカで受け入れられるものでなければなりません。つまり、使用できる文字は、0~9、A~Z、a~z、アンダースコア、およびハイフンのみです。

エントリポイントはアセンブリをロードしなければ表示させることができません。次の2つの解決方法をご参照ください。