複数の COBOL サブプログラムを持つアプリケーションを
使用する場合、その COBOL サブプログラムの一部を AMODE 31 に
設定し、その他を AMODE 24 に設定することができます。
アプリケーションが
COBOL プログラムでのみ構成され、静的呼び出しと動的呼び出しだけを使用する
場合、各 COBOL サブプログラムは、常に適切な AMODE になります。
例えば、AMODE 31
COBOL プログラムから AMODE 24 COBOL プログラムへの動的呼び出しを行っている場合、AMODE は自動的に切り替えられます。
ただし、プロシージャー・ポインター、関数
ポインター、または COBOL サブプログラムを呼び出す他の言語を使用する
場合は、COBOL プログラムがエンクレーブで複数回呼び出されたときに、
呼び出されるたびに同じ AMODE になることを確認する必要があります。
この場合、AMODE は自動的に切り替えられません。
次のシナリオは、プロシージャー・ポインターが COBOL サブ
プログラムの呼び出しに使用される場合に、AMODE の
問題が生じる可能性を示しています。このシナリオは、COBOL プログラム COBOLY が呼び出されるときに毎回同じ AMODE にならないため、サポートされません。

- COBOLX は AMODE 31 です。これは SET ステートメントを使用して、プロシージャー・ポインターを COBOLZ に設定します。
COBOLZ は再入可能ロード・モジュールであり、AMODE 31 と
RMODE 24 です。COBOLX は、プロシージャー・ポインターを使用して COBOLZ を呼び出します。
COBOLZ は AMODE 31 になります。
- COBOLZ は COBOLX に戻ります。
- COBOLX は、COBOLY を動的に呼び出して、プロシージャー・ポインターを COBOLZ に渡します。
COBOLY は再入可能ロード・モジュールであり、AMODE 24 と RMODE 24 です。
COBOLY は AMODE 24 になります。
- COBOLY はプロシージャー・ポインターを使用して COBOLZ を呼び出します。この呼び出しによって COBOLZ は AMODE 24 になりますが、これは COBOLZ が最初に呼び出されたときの
AMODE と同じではありません。
次のシナリオは、COBOL とアセンブラー言語の混合を使用しています。このシナリオは、COBOL プログラム COBOLB が呼び出されるときに毎回同じ AMODE にならないため、サポートされません。

- COBOLA は AMODE 31 です。COBOLA は COBOLB を動的に呼び出します。COBOLB は再入可能ロード・モジュール
であり、AMODE 31 と RMODE 24 です。
COBOLB は AMODE 31 になります。
- COBOLB は COBOLA に戻ります。
- COBOLA はアセンブラー言語である ASSEM10 を動的に呼び出します。ASSEM10 は再入可能ロード・モジュールであり、AMODE 24 と
RMODE 24 です。
ASSEM10 は AMODE 24 になります。
- ASSEM10 は COBOLB をロードします。ASSEM10 は COBOLB に対して BALR 命令を実行します。
COBOLB は AMODE 24 になりますが、COBOLB が最初に呼び出されたときの
AMODE と同じではありません。