アセンブラー モジュールで COBOL モジュールを呼び出す場合、動的リンクを使用する必要があります。定義により、アセンブラーからの COBOL の呼び出し、および COBOL からのアセンブラーの呼び出しはすべて動的になります。これは、アセンブラーの
.OBJ ファイルと COBOL の .OBJ ファイルをリンクできないためです。COBOL モジュールに動的にリンクするには、次の 2 つの方法があります。
- アセンブラー プログラムで CALL マクロ呼び出しを発行できます。この方法では、INCLUDE コマンドも、リンク先の COBOL モジュールの名前を提供するアセンブラー モジュールのリンク ファイルに入れる必要があります。リンカーが INCLUDE コマンドを処理する場合、COBOL モジュールは実際にインクルードされませんが、代わりに小さなアセンブラー モジュールが生成されてインクルードされます。実行時に CALL を実行すると、アセンブラー モジュールはロードされ、指定した COBOL モジュールのエントリ ポイントにリンクします。
- アセンブラー プログラムで LOAD マクロ呼び出しを発行できます。繰り返しになりますが、LOAD マクロは COBOL モジュールを直接ロードせず、代わりにアドレスが LOAD で戻されるアセンブラー モジュールを作成してロードします。その後、このアドレスを指定する BALR 命令を発行します。小さなアセンブラー スタブ モジュールは、目的の COBOL モジュールの動的 CALL を実行します。
注: このオプションを使用する場合、アセンブラーと COBOL の標準リンクを使用する必要があります。標準リンクとは、渡されるパラメーターの正しい数が、呼び出される COBOL プログラムによって決まるように、渡される最後のパラメーター アドレスの上位ビットが設定されるということです。
COBOL プログラムがアセンブラー モジュールを呼び出す場合は常にこのリンケージが自動的に行われ、アセンブラー モジュールは、アドレス リストを示すレジスタ 1 (渡されるパラメーターにつき 1 つのアドレス) とともに入れられます。また、最後のパラメーターの上位ビットは、パラメーター
リストの終わりを示すように設定されます。