汇编语言编程限制和需求

某些限制和要求适用于用作 CICS ® 应用程序的汇编语言程序。

LEASM 选项

以下限制适用于使用 LEASM 选项翻译的汇编语言程序:
  • 寄存器 2 不能用作代码库寄存器。
  • 注册 12 由 Language Environment ® (LE) 保留,以指向 Language Environment 公共锚点区域 (CAA) ,因此在没有适当保存和恢复的情况下,程序根本无法使用。
  • 寄存器 13 必须用作唯一的工作存储器基本寄存器。
  • 程序不能是全局用户出口程序 (GLUE) 或与任务相关的用户出口程序 (TRUE)。
  • 程序不得使用或依赖于任何 AMODE (24) 代码。
  • 不支持 AMODE (64) 程序。

EXEC CICS 命令中的 LENGTH 选项

为 CICS 命令指定 LENGTH 选项时,请确保在汇编语言中使用的方式指定有效的半字长度。 请勿指定零长度或 CICS 转换程序无法识别的变量,因为这可能会导致存储器违例或程序检查。 有关更多信息,请参阅 汇编程序语言参数值

LINK 命令的以下示例正确指定长度,并将变量 COMMAL 的地址传递给命令处理器:
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
以下示例不正确,因为 CICS 转换程序无法知道变量 COMMAL 的类型,并将 COMMAL 的值作为包含长度的半字字段的地址传递。 这可能提供随机长度值,或者程序检查该地址上的存储器是否不可用。
EXEC CICS LINK PROGRAM('PROG2') COMMAREA(COMMA)
LENGTH(COMMAL)
...
COMMA DC CL20'This is the COMMAREA'
COMMAL EQU *-COMMA

31 位寻址

以下限制适用于以 31 位寻址方式运行的汇编语言应用程序:
  • COMMAREA 选项在混合寻址方式事务环境中受限制。 有关限制的讨论,请参阅 使用混合寻址方式
  • CICS 不允许在不使用 DFHEIENT 和 DFHEIRET 宏的汇编语言程序中使用 HANDLE ABEND LABEL。 使用语言环境存根 CEESTART 的汇编语言程序应该使用 HANDLE ABEND PROGRAM 或诸如 CEEHDLR 之类的语言环境服务。 有关 CEEHDLR 的信息,请参阅 语言环境异常终止和条件处理
以下限制适用于使用 64 位寄存器来使用 64 位寻址方式或 64 位二进制操作的 AMODE (24) 或 AMODE (31) 汇编语言应用程序:
  • CICS 并不总是保留 64 位寄存器的高阶字。 必须先保存它们,然后再调用 CICS 服务,然后再使用 64 位寄存器进行复原。

64 位寻址

CICS 支持非语言环境 AMODE (64) 汇编语言 CICS 应用程序的程序执行。 您的程序必须使用相对寻址。 请参阅 开发 AMODE (64) 汇编语言程序。 支持所有 CICS API 命令 (本节后面列出的命令除外)。 有关 CICS API 的信息,请参阅 CICS API 命令

AAMODE (64) 程序不支持以下 API:
  • CICSPlex ® SM 应用程序编程接口 (API)
  • 用于 APPC 基本对话的 CICS API 命令 (GDS 命令)
  • 前端编程接口 (FEPI)
  • 公共编程接口 (CPI) 通信 API
  • DL/I 请求
AAMODE (64) 程序不支持以下接口:
  • CICS DB2® 接口
  • CICS-MQ 网桥外部接口
提供了以下 CICS API 命令用于 AMODE (64) 程序:
以下与非结构化异常处理相关的 CICS API 命令不受 AMODE (64) 汇编语言程序支持:
  • 句柄异常终止标签 (标签)
  • 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 位 (界线以上) 存储器中。

访问寄存器

以下限制适用于使用访问寄存器来使用 z/Architecture ® 系统的扩展可寻址性的汇编语言应用程序:
  • 调用任何 CICS 服务时,必须处于主寻址方式。 主地址空间必须是主地址空间。 传递到 CICS 的所有参数都必须位于主地址空间中。
  • CICS 并不总是保留访问寄存器。 您必须先保存它们,然后再调用 CICS 服务,然后再使用访问寄存器进行复原。

有关使用访问寄存器的更多指导信息,请参阅 z/OS MVS Programming: Extended Addressability Guide

BAKR 指令 (分支和堆栈)

使用 BAKR 指令 (分支和堆栈) 在汇编语言程序之间提供链接时,请确保链接到程序不会发出 EXEC CICS 请求。 如果 CICS 在链接到程序通过 PR 指令 (程序返回) 返回之前接收控制并执行任务切换,那么可能会分派其他任务并发出进一步的 BAKR/PR 调用。 这些调用会修改链接堆栈,并导致在原始任务发出其 PR 指令时复原错误环境。

无法使用的指令

不能在用作 CICS 应用程序的汇编语言程序中使用以下指示信息:
COM
标识空白公共控制部分。
ICTL
输入格式控件。
OPSYN
等同操作码。

备注

如果要针对 CICS 命令添加注释,那么可以通过在最后一个自变量后使用句点或逗号作为定界符来执行此操作 (仅使用汇编语言)。 例如:
EXEC CICS ADDRESS EIB(MYUEIB), @F1A
如果将句点或逗号与 EXEC CICS 命令配合使用,那么下一行必须在列 2 和列 16 之间以第 72 列中的连续字符开头。 以下行不能在第 17 列之后开始。 如果未添加逗号或句点,那么下一行必须以第 2 列开头或之后的第 71 列结尾,并在第 72 列中使用连续字符。