汇编语言编程限制和需求
某些限制和要求适用于用作 CICS ® 应用程序的汇编语言程序。
LEASM 选项
- 寄存器 2 不能用作代码库寄存器。
- 注册 12 由 Language Environment ® (LE) 保留,以指向 Language Environment 公共锚点区域 (CAA) ,因此在没有适当保存和恢复的情况下,程序根本无法使用。
- 寄存器 13 必须用作唯一的工作存储器基本寄存器。
- 程序不能是全局用户出口程序 (GLUE) 或与任务相关的用户出口程序 (TRUE)。
- 程序不得使用或依赖于任何 AMODE (24) 代码。
- 不支持 AMODE (64) 程序。
EXEC CICS 命令中的 LENGTH 选项
为 CICS 命令指定 LENGTH 选项时,请确保在汇编语言中使用的方式指定有效的半字长度。 请勿指定零长度或 CICS 转换程序无法识别的变量,因为这可能会导致存储器违例或程序检查。 有关更多信息,请参阅 汇编程序语言参数值。
EXEC CICS LINK PROGRAM('PROG2') COMMAREA(COMMA)
LENGTH(COMMAL)
...
COMMA DC CL20'This is the COMMAREA'
COMMAL DC H'20'
EXEC CICS LINK PROGRAM('PROG2') COMMAREA(COMMA)
LENGTH(=AL2(COMMAL))
...
COMMA DC CL20'This is the COMMAREA'
COMMAL EQU *-COMMA
EXEC CICS LINK PROGRAM('PROG2') COMMAREA(COMMA)
LENGTH(COMMAL)
...
COMMA DC CL20'This is the COMMAREA'
COMMAL EQU *-COMMA
31 位寻址
- COMMAREA 选项在混合寻址方式事务环境中受限制。 有关限制的讨论,请参阅 使用混合寻址方式。
- CICS 不允许在不使用 DFHEIENT 和 DFHEIRET 宏的汇编语言程序中使用 HANDLE ABEND LABEL。 使用语言环境存根 CEESTART 的汇编语言程序应该使用 HANDLE ABEND PROGRAM 或诸如 CEEHDLR 之类的语言环境服务。 有关 CEEHDLR 的信息,请参阅 语言环境异常终止和条件处理 。
- CICS 并不总是保留 64 位寄存器的高阶字。 必须先保存它们,然后再调用 CICS 服务,然后再使用 64 位寄存器进行复原。
64 位寻址
CICS 支持非语言环境 AMODE (64) 汇编语言 CICS 应用程序的程序执行。 您的程序必须使用相对寻址。 请参阅 开发 AMODE (64) 汇编语言程序。 支持所有 CICS API 命令 (本节后面列出的命令除外)。 有关 CICS API 的信息,请参阅 CICS API 命令。
- CICSPlex ® SM 应用程序编程接口 (API)
- 用于 APPC 基本对话的 CICS API 命令 (GDS 命令)
- 前端编程接口 (FEPI)
- 公共编程接口 (CPI) 通信 API
- DL/I 请求
- CICS DB2® 接口
- CICS-MQ 网桥外部接口
- 句柄异常终止标签 (标签)
- HANDLE AID
- HANDLE CONDITION
- IGNORE CONDITION
- POP HANDLE
- PUSH HANDLE
AMODE (64) 汇编语言程序不能由 COBOL , C , C++ 或 PL/I CALL 语句或汇编语言 CALL 宏调用。 但是,汇编语言应用程序可以由 COBOL , C , C + + , PL/I 或汇编语言应用程序通过使用 LINK 或 XCTL 命令来调用。
对于 AMODE (64) 汇编语言程序,在所有 EXEC CICS 命令中隐含使用 NOHANDLE 条件。 这意味着不会对执行该命令所产生的任何条件执行任何操作。 您可以将 RESP 选项与任何命令配合使用,以测试在执行该命令期间是否发生了任何情况。 请参阅 RESP 和 RESP2 选项 和 NOHANDLE 选项。
对于 AMODE (64) 汇编语言程序, CICS 使用整个 64 位寄存器。 确保所有寄存器都有效。
COMMAREA 不能在 64 位存储器中。 有关 COMMAREA 的更多信息,请参阅 COMMAREA。
AMODE 64 任务相关用户出口 (TRUEs) 不受支持, AMODE (64) 应用程序无法调用 TRUE。
有关使用 64 位寻址方式和 64 位二进制操作的更多信息,请参阅 z/OS MVS Programming: Assembler Services Guide。
64 位驻留
CICS 不支持 64 位驻留方式 (RMODE (64)) ,并将任何 RMODE (64) 程序视为 RMODE (31)。 即,将 RMODE (64) 程序装入到 31 位 (界线以上) 存储器中,而不是 64 位 (界线以上) 存储器中。
访问寄存器
- 调用任何 CICS 服务时,必须处于主寻址方式。 主地址空间必须是主地址空间。 传递到 CICS 的所有参数都必须位于主地址空间中。
- CICS 并不总是保留访问寄存器。 您必须先保存它们,然后再调用 CICS 服务,然后再使用访问寄存器进行复原。
有关使用访问寄存器的更多指导信息,请参阅 z/OS MVS Programming: Extended Addressability Guide。
BAKR 指令 (分支和堆栈)
使用 BAKR 指令 (分支和堆栈) 在汇编语言程序之间提供链接时,请确保链接到程序不会发出 EXEC CICS 请求。 如果 CICS 在链接到程序通过 PR 指令 (程序返回) 返回之前接收控制并执行任务切换,那么可能会分派其他任务并发出进一步的 BAKR/PR 调用。 这些调用会修改链接堆栈,并导致在原始任务发出其 PR 指令时复原错误环境。
无法使用的指令
- COM
- 标识空白公共控制部分。
- ICTL
- 输入格式控件。
- OPSYN
- 等同操作码。
备注
EXEC CICS ADDRESS EIB(MYUEIB), @F1A如果将句点或逗号与 EXEC CICS 命令配合使用,那么下一行必须在列 2 和列 16 之间以第 72 列中的连续字符开头。 以下行不能在第 17 列之后开始。 如果未添加逗号或句点,那么下一行必须以第 2 列开头或之后的第 71 列结尾,并在第 72 列中使用连续字符。