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 的错误的主要内容,如果未能解决你的问题,请参考以下文章