* * 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
15 -31 38 000038 38 72 -8 000072
Email Me |
Office Hours |
My Home Page |
Department Home |
MCC Home Page
© Copyright Emmi Schatz 2003