2017-09-03 14 views
1

JCL(F、FB、V、VB)で通知されたファイルを読み込むにはアセンブリモジュールを実装する必要があります。このモジュールは私のCOBOLプログラムの中で呼び出されます。 私は既にオープン、読み取り、およびクローズ機能を実装することができました。モジュールはfolowと呼ばれているCOBOLとHLASM(アセンブリ)間のリンケージ(32Kバイト以上)

01 LNK-MOD.  
    05 LNK-MOD-OPTION PIC X(01)  VALUE SPACE.  
    05 LNK-MOD-STATUS PIC X(01)  VALUE SPACE. 
    05 LNK-MOD-LINE PIC X(32676) VALUE SPACES. 

CALL MOD01 USING LNK-MOD. 

誰がCOBOL < <のためのリンケージの使用のいくつかの例を持っています--- >>組立

リンケージのようなものです?

PS。実行時にファイルサイズ(LRECL)がないので、モジュールはアセンブリでなければなりません。

ありがとうございます。

+0

[このマニュアルを読む](https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.ibm.zos.v2r1.ceea400/ilcasm.htm)をお勧めします。 32KBの関連性があなたの質問にどういうものかはっきりしていませんか? –

答えて

2

Language Environment (LE) Assembler Considerationsの可能性があります。あなたはCOBOLから呼び出されているので、あなたはLEエンクレーブで実行しています。

COBOLコンパイラがサイズWorking-Storage(またはこれを使用している場合はLocal-Storage)に置く制限を除いて、COBOLプログラムからアセンブラルーチンに渡すことができるデータ量に制限はありません。

あなたの質問に表示されているCALLは、モジュール名を一重引用符で囲む必要があることを除けば、コード化されているのでうまく動作します。

CALL 'MOD01' USING LNK-MOD.

おそらくあなたは、ベースレジスタにのみ、あなたが4Kに対応することができますので、ストレージの 32Kに取り組む問題を持っています。最初の4Kに対処するには、が必要です。が必要です。 GETPUTのマクロでは、データ領域のアドレスのみが必要です。

32Kの領域全体を処理する必要がある場合は、4Kブロックごとにベースレジスタを割り当てる必要があります。それはあきらめるたくさんのレジスタです。それが絶対に必要でない限り、私はそれをしないことをお勧めします。

アセンブラルーチンを使用する代わりに、C runtime routinesfopen, fread, fwrite, fcloseを調べることができます。 Cランタイムルーチンは、COBOLプログラムから直接呼び出すことができます。これは、Language Environmentが提供する機能です。

COBOLプログラムとアセンブラプログラムをリンクできない場合は、リンク時にINCLUDEアセンブラモジュールが必要です。

INCLUDE ddname(MOD01)

この例でddnamelink step JCLで定義する必要があり、そのDSNは、MOD01を含むPDSまたはPDSEでなければなりません。

数年前、IBMはJCLのPGM=IEWLという名前を変更しました。以前はリンケージエディタと呼ばれていました。彼らは今それをバインダーと呼びます。これは混乱することがあります。 JCLは同じままです。私は老人ですから、私はまだそれをリンケージエディタまたはリンカーと呼んでいます。私は、1980年代半ば以来、穿孔されたカードを使用していないのに、「制御文」ではなく「制御カード」と言うこともあります。

+0

ありがとう@cschneid。あなたの説明はとても役に立ちます。 –

関連する問題