超过 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。 GET
和PUT
宏只需要数据区的地址。
如果出于某种原因需要对整个 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 年代中期以来就没有使用过穿孔卡。
我需要实现一个 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。 GET
和PUT
宏只需要数据区的地址。
如果出于某种原因需要对整个 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 年代中期以来就没有使用过穿孔卡。