2017-09-03 56 views
1

我需要實現一個Assembly模塊來讀取JCL中通知的任何文件(F,FB,V,VB)。這個模塊在我的COBOL程序中被調用。 我已經設法實現了打開,讀取和關閉功能。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。該模塊必須是Assembly,因爲在執行時沒有文件大小(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.

也許你有尋址存儲 32K,因爲基址寄存器只允許您解決4K問題。您只需要需要來解決第一個4K問題。 GETPUT宏只需要數據區的地址。

如果由於某種原因需要處理整個32K區域,則必須爲每個4K塊分配一個基址寄存器。這是很多放棄的寄存器。除非絕對必要,否則我建議不要這樣做。

您可能想使用C runtime routinesfopen, fread, fwrite, fclose而不是使用您的彙編程序例程。 C運行時例程可直接從COBOL程序中調用,這是語言環境提供的功能。

如果在連接COBOL程序和彙編程序時遇到問題,您需要在鏈接時使用匯編器模塊INCLUDE

INCLUDE ddname(MOD01)

在這個例子中ddname必須在link step JCL被定義和其DSN必須是包含一個MOD01 PDS或PDSE。

幾年前,IBM在JCL中更改了他們所稱的PGM=IEWL。它曾經被稱爲連接編輯器。他們現在稱它爲活頁夾。這有時令人困惑。 JCL保持不變。我是一個老人,所以我仍然把它稱爲鏈接編輯器或鏈接器。我有時也會說「控制卡」,而不是「控制語句」,儘管自20世紀80年代中期以來我沒有使用過沖卡。

+0

謝謝@cschneid。你的解釋是非常有幫助的。 –

相關問題