MVS 上的程序集出现未定义操作代码错误的根本原因是什么?

What is the underlying cause of an Undefined Operation Code error for Assembly on MVS?

我有以下 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
/*

当我 运行 时,我得到一个 "undefined operation field" 错误,表明 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
/* 

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

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

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

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