MVS上装配的未定义操作代码错误的根本原因是什么?

问题描述:

我有以下JCL编译汇编语言程序: -MVS上装配的未定义操作代码错误的根本原因是什么?

//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 
/* 
+1

http://idownvotedbecau.se/imageofcode –

+0

欢迎来到*.com。请花一些时间阅读[帮助页面](https://*.com/help),尤其是名为[“我可以询问什么主题?”](https://*.com/help/讨论话题)和[“我应该避免问什么类型的问题?”](https://*.com/help/dont-ask)。请参阅[tour](https://*.com/tour)并阅读[如何提出良好问题](https://*.com/help/how-to-ask)。最后,请学习如何创建[最小,完整和可验证示例](https://*.com/help/mcve)。 – cschneid

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

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

+0

对不起,先生,但书汇编语言编程 为 IBM到Z体系™服务器 [链接](https://www.google.co.id/search?safe=off&dcr=0&ei=8VP3Wam0GJaavQT1wp6oBg&q=assembler+language+为+ IBM + Z +系统编程+ +服务器和OQ =汇编语言+ +编程&gs_l = PSY-ab.1.4.0i13k1j0i203k1j0i13k1l2j0i203k1j0i13k1l2j0i13i30k1l3.439369.443935.0.445514.27.19.2.0.0.0.272.2224.2j6j5.13.0 .... 0 ... 1.1 .64.psy-ab..12.15.2228 ... 0j​​35i39k1j0i10k1.0.WipYdhwQsrg) 代码就像打印输出是程序集 –

+0

中的操作** PRINTOUT **不是命令,而是** MACRO指令**表示将所述宏合并/扩展到代码中。 A ** MACRO **必须是为汇编程序(ASMA90)分配给** SYSLIB **'ddname'的库中的成员。如果不是,那么汇编将无法解释它认为是操作代码的内容。这是问题和原因。因此,您需要确定包含** PRINTOUT **宏的宏库是否分配给** ASMACL **过程中的'ddname' ** SYSLIB **。请参阅6.1.1 – MikeT

+0

@AdrianEka仅仅是因为这个宏在John Ehrman出色的书中的示例代码中存在并不意味着它已经在您的系统中实现。您参考的书中包含的宏源必须存在于执行ASMA90的步骤的SYSLIB并置库中。 – cschneid

在我看来,你在你的JCL中使用了一个小写字母。因此,将//c.SYSIN更正为//C.SYSIN应该完成这项工作。 CU Andreas

+2

是不是//c.SYSIN的评论? – Vega

+0

@Vega,不,它不是一个注释,它是** STEP C **中的** SYSIN DDNAME **的重写,它将以下代码传递给*'/ *'**分隔符, * SYSIN DDNAME **被称为instream数据。重新显示UpperCase/LowerCase ** C **,屏幕截图显示大写C,** my **错误,因为我从屏幕截图中复制了代码,我将相应地修改相应的问题。 – MikeT