Assembly PC/370 IBM大型机程序集-程序链接工作不正常

Assembly PC/370 IBM大型机程序集-程序链接工作不正常,assembly,Assembly,我一直在尝试创建一个调用另一个程序的主程序,向它发送两个变量。然后,被调用的程序应该打开一个输出文件,并将传递的变量打印到输出文件,然后将控制返回主程序 我已经创建了主程序和子程序。它们都编译无误。子程序作为独立程序工作,但当我运行主程序时,程序分支到子程序,然后在尝试打开输出文件时失败 代码如下。任何关于我做错了什么的意见都将不胜感激。非常感谢。 呼叫程序: MAIN START 0 PRINT NOGEN SUPPRESS GENERATED INST

我一直在尝试创建一个调用另一个程序的主程序,向它发送两个变量。然后,被调用的程序应该打开一个输出文件,并将传递的变量打印到输出文件,然后将控制返回主程序

我已经创建了主程序和子程序。它们都编译无误。子程序作为独立程序工作,但当我运行主程序时,程序分支到子程序,然后在尝试打开输出文件时失败

代码如下。任何关于我做错了什么的意见都将不胜感激。非常感谢。 呼叫程序: MAIN START 0 PRINT NOGEN SUPPRESS GENERATED INSTRUCTIONS STM 14,12,12(13) BALR 12,0 USING *,12

     MVC   MONTH1,=C'March'     
     MVC   MONTH2,=C'June'
     LA    9,=A(MONTH1,MONTH2)  Parameters to pass stored in R9
     SR    1,1
     LOAD  EP='SEARCH.COM'
     ST    13,SAVMAIN+4

     LA    13,SAVMAIN
     LR    15,0
     BALR  14,15
     WTO   'Subprogram was successful in finding data passed'

     RETURNPT WTO   'AND IT RETURNED'

     RETURN 

     MONTH1   DS    CL12        
     MONTH2   DS    CL12
     DS   0F
     SAVMAIN  DS  18F

     END   MAIN

调用程序:

搜索开始0 雷格斯 打印生成的指令 STM R14,R12,12(R13) BALR R12,R0 使用*,R12将基址寄存器设置为R12 ST R13,保存+4 LA R13,救命 世贸组织“达成子计划” ******** *或用于读写的即时文件。仅在PC/370上需要 ******** OI输出+10,X'08' 世贸组织“OI加工” ******** *打开编程分配所需的所有文件 ******** 开放输出 WTO“输出文件已打开” * ********************************************************* ***主代码*** ********************************************************* * L R8,0(R0,R9) MVC FIND1,0(R8) lR8,4(R0,R9) MVC FIND2,0(R8) 世贸组织调查结果1 世贸组织调查结果2 MVC CTEMP,FIND1 MVC OWORD,=C'WORD 1:' 投入产出 MVC CTEMP,FIND2 MVC OWORD,=C'WORD 2:' 投入产出 * ********************************************************* ***EOJ处理*** ********************************************************* * ******** *关闭编程分配所需的所有文件 ******** * 阿滕德埃科* 关闭输出 WTO“子程序成功打印通过的数据” ********************************************************* ***结束程序*** ********************************************************* * 出口设备* 返回 阿尔托格 ********************************************************* ****文件定义*** ********************************************************* 输出DCB LRECL=29,RECFM=F,MACRF=P,DDNAME='MAINOUT.TXT' OREC DS 0CL29 奥沃德DS CL12 DC CL3“ ORESULT DS CL12 DC X'0D25' FIND1 DS CL12 FIND2 DS CL12 CTEMP DS CL12 DS 0F 保存DS 18F 结束搜索
困难的一个——可能这里没有多少BAL程序员了

我假设您正确地执行了子程序输入协议(我只知道一次),但您可能希望检查一下,并查看是否有使用WTO和OPEN宏的子程序调用/输入(寄存器保存等)的附加要求


<对代码> OI输出+ 10,x'08 '/CODE >有点怀疑——在DCB的中间,像这样使用一个宏或至少引用一个标签,似乎很奇怪。

< P>我意识到这个问题一直没有得到解答。我终于明白了如何在PC-370中正确执行汇编程序链接

大多数情况下,输出都会被注释。我给出这段代码是希望帮助另一个学生处理这个概念

如果有人遇到这个问题,并发现一个错误的逻辑,请PM我,我会修复它

我希望这能帮助那些需要帮助的人

SUBCAN

这是调用SUBPRG.MLC程序的MAIN.MLC程序

*******************************************************************
*        FILENAME  :  SUBPRG.MLC                                  *
*        AUTHOR    :  Subcan                                      *
*        PROFESSOR :  X                                           *
*        SYSTEM    :  ASUS P8Z68-Vpro w/I7-2600k CPU, PC/370 R4.2 *
*        REMARKS   :  Coding two programs. A Main program and a   *
*                     Subprogram. The main program will establish *
*                     itself without using BEGIN, START, OR RETURN*
*                     Macros. The main program will define two    *
*                     Parameters to be passed to the subprogram.  *
*                     The subprogram will then print these        *
*                     parameters to an output file, then return   *
*                     control back to calling program             *
*******************************************************************
*********************************************************
***                 PROGRAM ENTRY POINT               ***
*********************************************************
*
SUBPRG   CSECT
         REGS
         PRINT NOGEN        SUPPRESS GENERATED INSTRUCTIONS
         STM   14,12,12(13)
         BASR  12,0
         USING *,12
         ST    13,SAVE+4
         LA    13,SAVE
*
*********************************************************
***                 MAIN CODE                         ***
*********************************************************
* 
         LA    R2,=C'Sub program reached$'
         SVC   209                  Write to operator
************
* Use the Assist Macros to perform open and writing of files
* Look to PC-370 DOCS\USER.DOC for more info
* XFILO - This extended instruction redirects the output from XPRNT.
* XPRNT - Print record. Ends with ,length to set length of record.
*           Character string always ends with $ to show end of line.
************
         XFILO =C'SUBOUT.TXT'

         LA    R2,=C'Output file opened$'
         SVC   209                  Write to operator

         L     R8,0(R1)
         MVC   PARAM1(12),0(R8)
         L     R8,4(R1)
         MVC   PARAM2(12),0(R8)

         XPRNT =CL51' The following are words passed by Calling Program.',51
         XPRNT =C'  ',2                 SKIP ONE LINE
         MVC   ORESULT,PARAM1
         MVC   OWORD,=CL12' WORD 1:'
         XPRNT OREC,27

         MVC   ORESULT,PARAM2
         MVC   OWORD,=CL12' WORD 2:'
         XPRNT OREC,27

         MVI   PARAM1+11,C'$'       MVI $ to provide end of line
         LA    R2,PARAM1
         SVC   209                  Write to operator

         MVI   PARAM2+11,C'$'       MVI $ to provide end of line    
         LA    R2,PARAM2
         SVC   209                  Write to operator

         LA    R2,=C'Subprogram was successful in printing passed data$'
         SVC   209                  Write to operator
*        
*********************************************************
***                 END PROGRAM                       ***
*********************************************************
*
EXIT     EQU   *
         L     R13,SAVE+4
         LM    R14,R12,12(R13)  
         LA    R15,0
         BR    R14
*
*********************************************************
***                 ANY LITERALS                      ***
*********************************************************
*
         LTORG
*
*********************************************************
***                 OUTPUT FIELD DEFINITIONS          ***
*********************************************************
*
OREC     DS   0F
OWORD    DS    CL12
         DC    CL3' '
ORESULT  DS    CL12
*
*********************************************************
***                 CHARACTER FIELD DEFINITIONS       ***
*********************************************************
*
PARAM1   DS    CL12     
PARAM2   DS    CL12
*
*********************************************************
***                 RETURN ADDRESSES                  ***
*********************************************************
*
         DS   0F
SAVE     DS  18F
         END   SUBPRG
这就是所谓的程序,SUBPRG.MLC


你有什么症状?它怎么会失败?当我运行主程序时,它链接到子程序,WTO的“OI处理”然后崩溃。我们正在使用PC-370仿真器。我非常确定崩溃表明开放输出是故障点。我花了大约20个小时试图让它工作。在这个过程中学到了很多东西,但仍然无法使其正常工作。您需要对输出文件进行OI操作,以便将其从EBCDIC更改为ASCII。这仅适用于PC-370仿真器。我已经尝试了我能想到的一切,以确保我已经解释了所有的注册问题。谢谢你的意见。如果我得到它,我一定会发布结果。
*******************************************************************
*        FILENAME  :  SUBPRG.MLC                                  *
*        AUTHOR    :  Subcan                                      *
*        PROFESSOR :  X                                           *
*        SYSTEM    :  ASUS P8Z68-Vpro w/I7-2600k CPU, PC/370 R4.2 *
*        REMARKS   :  Coding two programs. A Main program and a   *
*                     Subprogram. The main program will establish *
*                     itself without using BEGIN, START, OR RETURN*
*                     Macros. The main program will define two    *
*                     Parameters to be passed to the subprogram.  *
*                     The subprogram will then print these        *
*                     parameters to an output file, then return   *
*                     control back to calling program             *
*******************************************************************
*********************************************************
***                 PROGRAM ENTRY POINT               ***
*********************************************************
*
SUBPRG   CSECT
         REGS
         PRINT NOGEN        SUPPRESS GENERATED INSTRUCTIONS
         STM   14,12,12(13)
         BASR  12,0
         USING *,12
         ST    13,SAVE+4
         LA    13,SAVE
*
*********************************************************
***                 MAIN CODE                         ***
*********************************************************
* 
         LA    R2,=C'Sub program reached$'
         SVC   209                  Write to operator
************
* Use the Assist Macros to perform open and writing of files
* Look to PC-370 DOCS\USER.DOC for more info
* XFILO - This extended instruction redirects the output from XPRNT.
* XPRNT - Print record. Ends with ,length to set length of record.
*           Character string always ends with $ to show end of line.
************
         XFILO =C'SUBOUT.TXT'

         LA    R2,=C'Output file opened$'
         SVC   209                  Write to operator

         L     R8,0(R1)
         MVC   PARAM1(12),0(R8)
         L     R8,4(R1)
         MVC   PARAM2(12),0(R8)

         XPRNT =CL51' The following are words passed by Calling Program.',51
         XPRNT =C'  ',2                 SKIP ONE LINE
         MVC   ORESULT,PARAM1
         MVC   OWORD,=CL12' WORD 1:'
         XPRNT OREC,27

         MVC   ORESULT,PARAM2
         MVC   OWORD,=CL12' WORD 2:'
         XPRNT OREC,27

         MVI   PARAM1+11,C'$'       MVI $ to provide end of line
         LA    R2,PARAM1
         SVC   209                  Write to operator

         MVI   PARAM2+11,C'$'       MVI $ to provide end of line    
         LA    R2,PARAM2
         SVC   209                  Write to operator

         LA    R2,=C'Subprogram was successful in printing passed data$'
         SVC   209                  Write to operator
*        
*********************************************************
***                 END PROGRAM                       ***
*********************************************************
*
EXIT     EQU   *
         L     R13,SAVE+4
         LM    R14,R12,12(R13)  
         LA    R15,0
         BR    R14
*
*********************************************************
***                 ANY LITERALS                      ***
*********************************************************
*
         LTORG
*
*********************************************************
***                 OUTPUT FIELD DEFINITIONS          ***
*********************************************************
*
OREC     DS   0F
OWORD    DS    CL12
         DC    CL3' '
ORESULT  DS    CL12
*
*********************************************************
***                 CHARACTER FIELD DEFINITIONS       ***
*********************************************************
*
PARAM1   DS    CL12     
PARAM2   DS    CL12
*
*********************************************************
***                 RETURN ADDRESSES                  ***
*********************************************************
*
         DS   0F
SAVE     DS  18F
         END   SUBPRG