超过 32Kbytes 的 COBOL 和 HLASM(程序集)之间的链接

Linkgage between COBOL and HLASM (Assembly) with more than 32Kbytes

我需要实现一个 Assembly 模块来读取 JCL 中通知的任何文件(F、FB、V、VB)。这个模块在我的 COBOL 程序中被调用。 我已经设法实现了打开、读取和关闭功能。

链接类似于:

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)。

提前致谢。

可能感兴趣的是 Language Environment (LE) Assembler Considerations。由于您是从 COBOL 调用的,因此您 运行 在 LE 飞地中。

除了 COBOL 编译器对 Working-Storage(或 Local-Storage ,如果你正在使用它)。

你在问题中显示的 CALL 应该可以正常工作,因为它是编码的,除了你需要在模块名称周围加上单引号。

CALL 'MOD01' USING LNK-MOD.

也许您在寻址 32K 存储空间时遇到问题,因为基址寄存器只能让您寻址 4K。您可能 需要 处理前 4K。 GETPUT宏只需要数据区的地址。

如果出于某种原因需要对整个 32K 区域进行寻址,则必须为每个 4K 块分配一个基址寄存器。要放弃的寄存器太多了。我建议除非绝对必要,否则不要这样做。

您可能想研究使用 C runtime routines fopen, fread, fwrite, fclose 而不是使用您的汇编程序。 C 运行时例程可直接从 COBOL 程序调用,这是语言环境提供的功能。

如果您在 link 运行 COBOL 程序和汇编程序时遇到问题,您需要在 link 时间 INCLUDE 汇编程序模块。

INCLUDE ddname(MOD01)

在此示例中,ddname 必须在 link step JCL 中定义,并且其 DSN 必须是包含 MOD01 的 PDS 或 PDSE。

几年前,IBM 在 JCL 中更改了他们所谓的 PGM=IEWL。它曾经被称为 linkage 编辑器。他们现在称它为活页夹。这有时令人困惑。 JCL 保持不变。我是一个老人,所以我仍然称它为linkage editor,或linker。我有时也会说“控制卡”而不是“控制语句”,尽管我自 1980 年代中期以来就没有使用过穿孔卡。