Sample Program: Subroutine Call with Parameter Passing and Saved Registers

*
*  THIS PROGRAM CONTAINS A SUBPGM WHICH COMPUTES THE MAX OF ITS
*  3 PARMS. THE SUBPGM IS CALLED A COUPLE OF TIMES WITH DIFFERENT
*  PARMS. PARMS ARE PASSED USING THE STANDARD PARAMETER PASSING
*  CONVENTIONS
*  STANDARD RETURN VALUE CONVENTION IS USED: MAX IS RETURNED IN R0
*
*  STANDARD CONVENTION USED FOR SAVING REGISTERS AND CALLING SUBPGM
*
MAXSUB   START 0
         STM   14,12,12(13)        SAVE CALLERS REGS
         BALR  12,0
         USING *,12
         ST    13,SAVEAREA+4       SAVE ADDR OF CALLER'S SAVEAREA
         LA    13,SAVEAREA         LOAD ADDR OF OUR SAVEAREA IN R13
         OPEN  OUTFILE,OUTPUT      OPEN OUTPUT FILE
         LA    1,NUM1              LOAD PARMS NUM1 NUM2 NUM3 IN PLIST
         ST    1,PLIST
         LA    1,NUM2
         ST    1,PLIST+4
         LA    1,NUM3
         ST    1,PLIST+8
         LA    1,PLIST             LOAD ADDRESS OF PARM LIST IN R1
         BAL   14,MAX              CALL MAX FOR NUM1 NUM2 NUM3
         CVD   0,PNUM              CONVERT RESULT TO DECIMAL
         UNPK  MAXOUT,PNUM         UNPACK RESULT
         OI    MAXOUT+5,X'F0'      FIX SIGN
         PUT   OUTFILE,OUTREC      WRITE NUMS AND MAX
*
         LA    1,NUM3              LOAD PARMS NUM3 NUM4 NUM5 IN PLIST
         ST    1,PLIST
         LA    1,NUM4
         ST    1,PLIST+4
         LA    1,NUM5
         ST    1,PLIST+8
         LA    1,PLIST             LOAD ADDRESS OF PARM LIST IN R1
         BAL   14,MAX              CALL MAX FOR NUM3 NUM4 NUM5
         MVC   OUTNUM1,ONUM3       COPY NUM3 TO OUTPUT
         MVC   OUTNUM2,ONUM4       COPY NUM4 TO OUTPUT
         MVC   OUTNUM3,ONUM5       COPY NUM5 TO OUTPUT
         CVD   0,PNUM              CONVERT RESULT TO DECIMAL
         UNPK  MAXOUT,PNUM         UNPACK RESULT
         OI    MAXOUT+5,X'F0'      FIX SIGN
         PUT   OUTFILE,OUTREC      WRITE NUMS AND MAX
*
         CLOSE OUTFILE
         L     13,SAVEAREA+4        LOAD ADDR OF CALLER'S SAVE AREA
         LM    14,12,12(13)        RESTORE CALLERS REGS
         BR    14                  EXIT
*
* I/O ERROR
*
OUTERR   WTO   'ERROR CREATING OUTPUT FILE'
         LM    14,12,12(13)
         BR    14
*
NUM1     DC    F'15'
NUM2     DC    F'-31'
NUM3     DC    F'38'
NUM4     DC    F'72'
NUM5     DC    F'-8'
ONUM3    DC    CL6'    38'
ONUM4    DC    CL6'    72'
ONUM5    DC    CL6'    -8'
PNUM     DS    D
*
PLIST    DS    3F                  PARM LIST
SAVEAREA DS    18F                 SAVE AREA FOR SUBPGM
*
*  OUTPUT FILE
*
OUTFILE  DCB   LRECL=39,RECFM=F,SYNAD=OUTERR,MACRF=P,DDNAME=MAXOUT
*
OUTREC   DS    0CL39
OUTNUM1  DC    CL6'    15'
         DC    CL5' '
OUTNUM2  DC    CL6'   -31'
         DC    CL5' '
OUTNUM3  DC    CL6'    38'
         DC    CL5' '
MAXOUT   DS    CL6
*
*  SUBPGM MAX FINDS THE MAX OF THE PARMS AND RETURNS MAX IN R0
*
MAX      STM   14,12,12(13)        SAVE CALLERS REGS
         L     2,0(1)              LOAD ADDR OF 1ST PARM INTO R2
         L     2,0(2)              LOAD 1ST PARM INTO R2
         L     3,4(1)              LOAD ADDR OF 2ND PARM INTO R3
         L     3,0(3)              LOAD 2ND PARM INTO R3
         CR    2,3                 COMPARE 1ST TWO PARMS
         BL    NEXT                BRANCH IF 1ST PARM LOWER
         LR    3,2                 1ST IS HIGHER - SAVE IN R3
NEXT     L     2,8(1)              LOAD ADDR OF 3RD PARM INTO R2
         L     2,0(2)              LOAD 3RD PARM INTO R2
         CR    2,3                 COMPARE LAST AND BIGGER OF 1ST TWO
         BL    LOWER               BRANCH IF 3RD PARM LOWER
         ST    2,RETVAL            3RD IS MAX
         B     DONE
LOWER    ST    3,RETVAL            BIGGER OF 1ST TWO IS MAX
DONE     LM    14,12,12(13)        RESTORE CALLER'S REGS
         L     0,RETVAL            PUT RETURN VALUE IN R0
         BR    14                  RETURN TO CALLER
RETVAL   DS    F
         END

Output:

    15        -31         38     000038
    38         72         -8     000072


Email Me | Office Hours | My Home Page | Department Home | MCC Home Page

© Copyright Emmi Schatz 2003