z/OS 上的 HLASM 问题有关 Invalid OpCode 的错误

Posted

技术标签:

【中文标题】z/OS 上的 HLASM 问题有关 Invalid OpCode 的错误【英文标题】:HLASM on z/OS Issues errors about Invalid OpCode 【发布时间】:2019-06-21 00:58:48 【问题描述】:

我正在尝试添加两个数字并减去两个数字,但是当我编译我的代码时它显示“无效的操作码”(我正在使用辅助 (IBM))

MAIN               CSECT
                   USING MAIN,15
->invalid op-code  NUM1 DC F'67'
->invalid op-code  NUM2 DC F'203'
                   L    0,NUM1
                   L    1,NUM2
                   AR   0,1
                   L    2,NUM1
                   L    3,NUM2
                   SR   2,3
                   XDUMP
                   END MAIN

【问题讨论】:

@lurker, none 在该链接中的dc 示例中以= 开头。 这是什么架构? IBM POWER / PowerPC?还是S/390之类的? (如果是后者,用[zos] 标记它)。如果它在运行时使用无效的操作码组装并出错,那可能是因为将文字数据放在 CPU 将作为代码执行的位置,在您的 main 函数中。 它只说 z/OS 谢谢大家。我想通了。 NUM1 和 NUM2 必须在 XDUMP 之后声明。 @PeterCordes 我不太喜欢[mainframe] 标签的使用方式,但它是IBM S/360 衍生计算机的大多数装配问题在这里使用的。 【参考方案1】:

一些事情。首先,数据项的位置很重要,因为它将与代码列表合并。与自动组织数据类型声明的高级语言不同。

其次,您错误地声明了数据项。该名称应从第 1 列开始,数据类型为 DC next,然后是数据。这将简单地包含与其他代码内联的数据,这将导致您的程序因异常结束 S0C1 而失败。

这是一种建议的数据声明方式

Columns    
0        1         2         3         4
1234567890123456789012345678901234567890

MAIN     CSECT  
         USING MAIN,15  
         L    0,NUM1
         L    1,NUM2
         AR   0,1
         L    2,NUM1
         L    3,NUM2
         SR   2,3
         XDUMP
NUM1     DC   F'67'
NUM2     DC   F'203'
         END  MAIN

将数据移出代码路径并将其名称放在右栏中表示您的数据标签不是操作码。

【讨论】:

【参考方案2】:

您已将数据放在汇编器期望指令的位置。您需要了解如何指定数据或文字区域并将数据放在那里。或者重写您的代码以使用立即类型数据,其中值位于 itext 中。

【讨论】:

以上是关于z/OS 上的 HLASM 问题有关 Invalid OpCode 的错误的主要内容,如果未能解决你的问题,请参考以下文章

IBM z/os 上的 teradata xml 服务

是否可以使用通配符删除 z/OS 上的数据集

如何从 z/OS 调用远程服务器上的 python 脚本?

从 z/OS 上的 C 语言可执行文件中删除符号信息

在 Z/OS 上的 db2 的 JDBC URL 中设置默认表空间?

使用 JZOS 工具包的 JCL 作业中所有 z/OS DD 语句的列表