Rational Developer for System z
Enterprise COBOL for z/OS バージョン 4.1 プログラミング・ガイド


AMODE 切り替え

複数の 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 にならないため、サポートされません。

この図は、次のステップを示しています。

  1. COBOLX は AMODE 31 です。これは SET ステートメントを使用して、プロシージャー・ポインターを COBOLZ に設定します。 COBOLZ は再入可能ロード・モジュールであり、AMODE 31RMODE 24 です。COBOLX は、プロシージャー・ポインターを使用して COBOLZ を呼び出します。 COBOLZ は AMODE 31 になります。
  2. COBOLZ は COBOLX に戻ります。
  3. COBOLX は、COBOLY を動的に呼び出して、プロシージャー・ポインターを COBOLZ に渡します。 COBOLY は再入可能ロード・モジュールであり、AMODE 24RMODE 24 です。 COBOLY は AMODE 24 になります。
  4. COBOLY はプロシージャー・ポインターを使用して COBOLZ を呼び出します。この呼び出しによって COBOLZ は AMODE 24 になりますが、これは COBOLZ が最初に呼び出されたときの AMODE と同じではありません。

次のシナリオは、COBOL とアセンブラー言語の混合を使用しています。このシナリオは、COBOL プログラム COBOLB が呼び出されるときに毎回同じ AMODE にならないため、サポートされません。

この図は、次のステップを示しています。

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

関連概念
ストレージとそのアドレス可能度  
サブプログラムに関連した動的呼び出しの使用時期

関連タスク
動的呼び出しの作成

関連参照
言語環境プログラム プログラミング・リファレンス (ALL31)


ご利用条件 | フィードバック

このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)