调用汇编语言程序

COBOL、C®、C++、 PL/I 或汇编语言应用程序可使用 LINK 或 XCTL 命令调用汇编语言应用程序。

64 位寻址方式

包含命令的 AMODE (64) 汇编语言应用程序可以有自己的 RDO 程序定义。 这些程序可由 COBOL、C、C++、 PL/I 或汇编语言应用程序使用 LINK 或 XCTL 命令调用。

24 位和 31 位寻址方式

AMODE (24) 和 AMODE (31) 包含命令的汇编语言应用程序可以有自己的 RDO 程序定义。 这些程序可由 COBOL、C、C++、 PL/I 或汇编语言应用程序使用 LINK 或 XCTL 命令调用。 不过,由于包含命令的 AMODE(24) 和 AMODE(31) 程序是由系统标准调用调用的,因此它们也可以由 COBOL、C、C++ 或 PL/I CALL 语句或汇编语言 CALL 宏调用。

单个 CICS® 应用程序 (如 RDO 程序定义中所定义) 可以由单独编译或组合的单独 CSECT 组成,但可以链接在一起。

包含命令的汇编语言应用程序可与其他汇编语言程序或与一种或多种高级语言( COBOL、C、C++ 或 PL/I )编写的程序链接。 有关在应用程序加载模块中混合语言的更多信息,请参阅 Language Environment 中的混合语言。 有关不同寻址模式程序的信息,请参阅使用混合寻址模式

如果汇编语言程序 (单独编辑链接) 包含命令级调用,并且从高级语言程序调用,那么它需要自己的 CICS 接口存根。 如果汇编程序与调用它的高级语言程序进行了链接编辑,那么汇编程序不需要存根。 如果提供了一个消息,那么将发出消息 MSGIEW024I ,但可以忽略此消息。

因为包含命令的汇编语言应用程序在调用时总是传递参数 EIB 和 COMMAREA ,所以 CALL 语句或宏必须传递这两个参数,可以选择后跟其他参数。

例如,文件 PLITEST PLI 中的 PL/I 程序调用文件 ASMTEST ASSEMBLE 中的汇编语言程序 ASMPROG。 PL/I 程序向汇编语言程序传递三个参数:EIB、COMMAREA 和信息字符串。
图 1。 PLITEST PLI
 PLIPROG:PROC OPTIONS(MAIN);
DCL ASMPROG ENTRY EXTERNAL;
DCL COMA CHAR(20), MSG CHAR(14) INIT('HELLO FROM PLI');
CALL ASMPROG(DFHEIBLK,COMA,MSG);
EXEC CICS RETURN;
END;
汇编语言程序执行 EXEC CICS SEND TEXT 命令,显示从 PL/I 程序传递过来的信息字符串。
图 2。 Asmtest 组合件
DFHEISTG DSECT
MSG DS CL14
MYRESP DS F
ASMPROG CSECT
L 5,8(1)
L 5,0(5)
MVC MSG,0(5)
EXEC CICS SEND TEXT FROM(MSG) LENGTH(14) RESP(MYRESP)
END
您可以使用 CICS 提供的 JCL 过程来编译和链接应用程序,如下所示:
  1. 使用 DFHEITAL 过程组装和链接 ASMTEST:
    //ASMPROG EXEC DFHEITAL
    //TRN.SYSIN DD *
    .... program source ...
    /*
    //LKED.SYSIN DD *
    NAME ASMTEST(R)
    /*
  2. 使用 DFHYITPL 过程编译和链接 PLITEST ,并提供包含由 DFHEITAL 过程创建的 ASMTEST 装入模块的链接编辑器控制语句:
    //PLIPROG EXEC DFHYITPL
    //TRN.SYSIN DD *
    .... program source ...
    /*
    //LKED.SYSIN DD *
    INCLUDE SYSLIB(ASMTEST)
    ENTRY CEESTART
    NAME PLITEST(R)
    /*
    
    注: 步骤 2 假定 DFHEITAL 创建的 ASMTEST 装入模块存储在 SYSLIB 数据集并置中包含的库中。

由 DFHYITPL 过程创建的装入模块包括 DFHEAI 存根 (由 DFHEITAL 包含) 和 DFHELII 存根 (由 DFHYITPL 包含)。 链接编辑器或绑定程序发出警告消息,因为两个存根都包含名为 DFHEII 的入口点。 可忽略此消息。

如果您编写自己的 JCL ,那么必须包含 DFHELII 存根,因为这包含所有语言所需的入口点。

汇编语言应用程序可以从 DFHEIENT 宏开始,也可以从 DFHEIRET 宏结束。 CICS 转换程序会为您插入这些内容,因此如果程序包含 EXEC CICS 命令并传递给转换程序 (如刚才提供的示例中所示) ,那么您不需要对这些宏进行编码。 请注意, DFHEIRET 可容纳相对寻址。 如果没有基本寄存器,那么宏扩展将不再生成 LTORG。 通常,当到达 END 时,汇编程序会生成自动 LTORG 以收集剩余的 VCONs。 如果您具有在 CSECT 并置开始时生成专用代码 CSECT 的代码,那么这可能会导致问题。 当到达 END 语句时,汇编程序将还原到您的第一个 CSECT ,并且无法从该 CSECT 解析 VCON。 建议您检查汇编程序列表并消除此类专用控制部分。 有关详情,请参阅 High Level Assembler 语言参考中的未命名部分