PC / 370 IBM Mainframe Assembly - Программа работает неправильно - PullRequest
2 голосов
/ 28 ноября 2011

Я пытался создать программу Main, которая вызывает другую программу, посылая ей две переменные. Затем вызываемая программа должна открыть выходной файл и распечатать переданные переменные в выходной файл, а затем вернуть управление в основную программу.

Я создал Основную программу и Подпрограмму. Оба компилируются без ошибок. Подпрограмма работает как отдельная программа, но когда я запускаю основную программу, программа переходит к подпрограмме, а затем завершается ошибкой при попытке открыть выходной файл.

Код выглядит следующим образом. Любой вклад в то, что я сделал неправильно, будет принята с благодарностью. Спасибо. ПРОГРАММА ВЫЗОВА:

         MAIN     START 0
         PRINT NOGEN        SUPPRESS GENERATED INSTRUCTIONS
         STM   14,12,12(13)
         BALR  12,0
         USING *,12</p>

<pre><code>     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
</code>

</p> <p>CALLED PROGRAM:</p> SEARCH START 0 REGS PRINT NOGEN SUPPRESS GENERATED INSTRUCTIONS STM R14,R12,12(R13) BALR R12,R0 USING *,R12 Set base register to R12 ST R13,SAVE+4 LA R13,SAVE WTO 'SUB PROGRAM REACHED' ******** * Or Immediate files for reading and writing. Needed only on PC/370 ******** OI OUTPUT+10,X'08' WTO 'OI PROCESSED' ******** * Open all files needed for programming assignment ******** OPEN OUTPUT WTO 'OUTPUT FILE OPENED' * ********************************************************* *** MAIN CODE *** ********************************************************* * L R8,0(R0,R9) MVC FIND1,0(R8) L R8,4(R0,R9) MVC FIND2,0(R8) WTO FIND1 WTO FIND2 MVC CTEMP,FIND1 MVC OWORD,=C'WORD 1:' PUT OUTPUT,OREC MVC CTEMP,FIND2 MVC OWORD,=C'WORD 2:' PUT OUTPUT,OREC * ********************************************************* *** EOJ PROCESSING *** ********************************************************* * ******** * Close all files needed for programming assignment ******** * ATEND EQU * CLOSE OUTPUT WTO 'Subprogram was successful in printing passed data' ********************************************************* *** END PROGRAM *** ********************************************************* * EXIT EQU * RETURN LTORG ********************************************************* **** FILE DEFINITIONS *** ********************************************************* OUTPUT DCB LRECL=29,RECFM=F,MACRF=P,DDNAME='MAINOUT.TXT' OREC DS 0CL29 OWORD DS CL12 DC CL3' ' ORESULT DS CL12 DC X'0D25' FIND1 DS CL12 FIND2 DS CL12 CTEMP DS CL12 DS 0F SAVE DS 18F END SEARCH

Ответы [ 2 ]

1 голос
/ 03 мая 2012

Я понял, что этот вопрос остался без ответа. Наконец-то я разобрался, как правильно выполнить связывание программ сборки в PC-370.

Вывод по большей части прокомментирован. Я даю этот код в надежде помочь другому студенту разобраться с этой концепцией.

Если кто-то сталкивается с этим и находит ошибку в логике, пожалуйста, напишите мне в личку, и я исправлю это.

Надеюсь, это поможет нуждающимся.

SUBCAN

Это программа MAIN.MLC, которая вызывает программу SUBPRG.MLC.

*******************************************************************
*        FILENAME  :  MAIN.MLC                                    *
*        AUTHOR    :  Subcan                                      *
*        PROFESSOR :  X                                           *
*        SYSTEM    :  ASUS P8Z68-Vpro w/I7-2600k CPU, PC/370 R4.2 *
*        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               ***
*********************************************************
*
MAIN     CSECT
         PRINT NOGEN        SUPPRESS GENERATED INSTRUCTIONS
         REGS
         STM   14,12,12(13)
         BASR  12,0
         USING *,12
         ST    13,SAVMAIN+4
         LA    13,SAVMAIN
*
*********************************************************
***                 MAIN CODE                         ***
*********************************************************
*
************
* Load passing parameters to respective variables
************
         MVC   PARAM1,=CL12'March'      
         MVC   PARAM2,=CL12'June'
************
* Load address of SUBPRG.COM into R1 then perform SVC 25
* load parameter addresses into R1 to pass to called program
************
         LA    R1,=C'SUBPRG.COM'
         SVC   25                   Load file
         LR    15,0
         LA    15,X'0210'(0,15)
         LA    R1,=A(PARAM1,PARAM2)

         LA    R2,=C'LOADED PARAMETERS TO R1$'
         SVC   209                  Write to operator

         BALR  R14,R15              Branch to SUBPRG

         LA    R2,=C'And it returned$'
         SVC   209                  Write to operator
*        
*********************************************************
***                 END PROGRAM                       ***
*********************************************************
*
         L     R13,SAVMAIN+4
         LM    R14,R12,12(R13)  
         LA    R15,0
         BR    R14
*
*********************************************************
***                 ANY LITERALS                      ***
*********************************************************
*
         LTORG
*
*********************************************************
***                 OUTPUT FIELD DEFINITIONS          ***
*********************************************************
*
PARAMS   DS   0F     
PARAM1   DS    CL12     
PARAM2   DS    CL12
*
*********************************************************
***                 RETURN ADDRESSES                  ***
*********************************************************
*
         DS   0F
SAVMAIN  DS  18F

         END   MAIN

Это вызываемая программа, 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
0 голосов
/ 28 ноября 2011

Трудный вопрос - вероятно, здесь осталось не так много программистов BAL.

Я предполагаю, что вы правильно выполнили протокол входа в подпрограмму (я только однажды знал это), но вы можете проверить это итакже посмотрите, есть ли какие-либо дополнительные требования к вызову / записи подпрограммы (сохранение регистров и т. п.) для использования макросов WTO и OPEN.

Немного подозрительно к OI OUTPUT+10,X'08' - кажется странным, что ORingнемного в середине DCB, например, против использования некоторого макроса или по крайней мере ссылки на метку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...