【问题标题】:What is the underlying cause of an Undefined Operation Code error for Assembly on MVS?MVS 上的 Assembly 出现未定义操作代码错误的根本原因是什么?
【发布时间】:2017-10-29 03:38:11
【问题描述】:

我有以下 JCL 来编译一个汇编语言程序:-

//JRETEST JOB (A925,22360679777),'AESANJA',NOTIFY=&SYSUID,
//        MSGLEVEL=(1,1)
//PROCLID JCLLIB ORDER=IBMUSER,LEARN.ASMJCL
//     EXEC ASMACL
//SYSOUT DD SYSOUT=*
//C.SYSIN DD *
TEST   START 0
       PRINT NOGEN
*      SAMPLE PROGRAM
       BASR 15,0
       USING *,15
       PRINTOUT MYNAME,*
MYNAME DC C'ADRIAN EKA SANJAYA'
       END TEST
/*

当我运行它时,我得到一个“未定义的操作字段”错误,表明 PRINTOUT 是未定义的操作。

Screen showing undefined operation field.

我很困惑,因为我正在关注guide,代码相似:-

//JRETEST JOB (A925,2236067977),′ J.EHRMAN′
// EXEC ASMACLG
//C.SYSIN DD *
Test Start 0 First line of program
       Print NoGen
* Sample Program
       BASR 15,0 Establish a base register
       Using *,15 Inform the Assembler
       PRINTOUT MyName,* Print name and stop
MyName DC C′ John R. Ehrman′ Define constant with name
       END Test Last statement
/* 

【问题讨论】:

标签: assembly zos jcl


【解决方案1】:

PRINTOUT 不是z/OS Principles of Operation 中定义的操作码。 PRINTOUT 显然也不是在 ASMACL 编目过程中执行 ASMA90 程序的步骤的 SYSLIB 级联库中定义的宏。

您的讲师可能是故意这样做的,以开始教您如何使用汇编清单诊断代码问题。 IBM 高级汇编程序 (HLASM) 的文档是 here。该文档包含有关如何使用程序集清单诊断代码问题的信息。

【讨论】:

  • 对不起,先生,IBM z System™ 服务器的汇编语言编程link 代码就像打印输出一样是汇编中的操作
  • PRINTOUT 不是命令,它是一个 MACRO 指令 表示将所述宏合并/扩展到代码中。 MACRO 必须是为汇编程序 (ASMA90) 分配给 SYSLIB ddname 的库中的成员。如果不是,那么汇编程序将无法解释它认为是操作代码的内容。这就是问题和原因。因此,您需要确定包含 PRINTOUT 宏的宏库是否已分配给 ASMACL 过程中的ddname SYSLIB。见 6.1.1
  • @AdrianEka 仅仅因为宏出现在 John Ehrman 的优秀著作中的示例代码中并不意味着它已经在您的系统中实现。您所参考的书包含宏源,该宏源必须存在于执行 ASMA90 的步骤的 SYSLIB 连接中的库中。
【解决方案2】:

根本原因是 Ehrman 书中使用的宏未包含在任何标准宏库中。您可以从书中复制它们,也可以从 https://idcp.marist.edu/documents/33945/44724/Macros+%281%29.zip/b268c9c7-c9c5-32a5-d078-072131ef4625?t=1551806362564 获取它们并将它们复制到某个 maclib 以供以后使用。

【讨论】:

    【解决方案3】:

    在我看来,您在 JCL 中使用了小写字母。因此,将 //c.SYSIN 更正为 //C.SYSIN 应该可以完成这项工作。 铜安德烈亚斯

    【讨论】:

    • 不是 //c.SYSIN 注释吗?
    • @Vega,不,这不是评论,它是对 STEP CSYSIN DDNAME 的覆盖,它将以下代码传递到/* 分隔符,进入 SYSIN DDNAME 作为所谓的流内数据。重新大写/小写 C,屏幕截图显示大写 C,my 错误,因为我从屏幕截图中复制了代码,我将相应地修改问题。
    猜你喜欢
    • 2019-01-29
    • 1970-01-01
    • 2021-04-09
    • 2019-10-23
    • 2017-03-18
    • 1970-01-01
    • 2023-03-29
    • 2020-12-10
    • 2012-03-16
    相关资源
    最近更新 更多