Assembly PC/370 IBM大型机程序集-程序链接工作不正常
我一直在尝试创建一个调用另一个程序的主程序,向它发送两个变量。然后,被调用的程序应该打开一个输出文件,并将传递的变量打印到输出文件,然后将控制返回主程序 我已经创建了主程序和子程序。它们都编译无误。子程序作为独立程序工作,但当我运行主程序时,程序分支到子程序,然后在尝试打开输出文件时失败 代码如下。任何关于我做错了什么的意见都将不胜感激。非常感谢。 呼叫程序: MAIN START 0 PRINT NOGEN SUPPRESS GENERATED INSTRUCTIONS STM 14,12,12(13) BALR 12,0 USING *,12Assembly PC/370 IBM大型机程序集-程序链接工作不正常,assembly,Assembly,我一直在尝试创建一个调用另一个程序的主程序,向它发送两个变量。然后,被调用的程序应该打开一个输出文件,并将传递的变量打印到输出文件,然后将控制返回主程序 我已经创建了主程序和子程序。它们都编译无误。子程序作为独立程序工作,但当我运行主程序时,程序分支到子程序,然后在尝试打开输出文件时失败 代码如下。任何关于我做错了什么的意见都将不胜感激。非常感谢。 呼叫程序: MAIN START 0 PRINT NOGEN SUPPRESS GENERATED INST
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
困难的一个——可能这里没有多少BAL程序员了 我假设您正确地执行了子程序输入协议(我只知道一次),但您可能希望检查一下,并查看是否有使用WTO和OPEN宏的子程序调用/输入(寄存器保存等)的附加要求调用程序: 搜索开始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 结束搜索
<对代码> OI输出+ 10,x'08 '/CODE >有点怀疑——在DCB的中间,像这样使用一个宏或至少引用一个标签,似乎很奇怪。 < P>我意识到这个问题一直没有得到解答。我终于明白了如何在PC-370中正确执行汇编程序链接 大多数情况下,输出都会被注释。我给出这段代码是希望帮助另一个学生处理这个概念 如果有人遇到这个问题,并发现一个错误的逻辑,请PM我,我会修复它 我希望这能帮助那些需要帮助的人 SUBCAN 这是调用SUBPRG.MLC程序的MAIN.MLC程序这就是所谓的程序,SUBPRG.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
你有什么症状?它怎么会失败?当我运行主程序时,它链接到子程序,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