Sample Program: Internal Subroutine Version 1 (Doesn't Use Standard Conventions for Calling, Returning, and Parameter List)

*
*  THIS PROGRAM COMPUTES NUM3 = |NUM1| + |NUM2|
*  SUBPGM ABS IS CALLED TO COMPUTE THE ABSOLUTE VALUES
*  STANDARD REGS FOR CALLING AND RETURNING ARE NOT USED
*
*  NOTE: LCR INSTRUCTION LOADS THE COMPLEMENT OF OP2 INTO OP1
*        IN OTHER WORDS, OP1 = -OP2
*
SUBEX    START 0
         STM   14,12,12(13)        SAVE CALLERS REGS
         BALR  12,0
         USING *,12
         L     0,NUM1              LOAD NUM1 INTO R0
         BAL   5,ABS               CALL ABS WITH NUM1
         ST    0,NUM3              STORE RESULT IN NUM3
         L     0,NUM2              LOAD NUM2 INTO R0
         BAL   5,ABS               CALL ABS WITH NUM2
         A     0,NUM3              ADD NUM3 TO RESULT
         ST    0,NUM3              STORE RESULT IN NUM3
         LM    14,12,12(13)        RESTORE CALLERS REGS
         BR    14
*
*  SUBPGM ABS COMPUTES ABSOLUTE VALUE OF THE VALUE IN R0
*  THE ABSOLUTE VALUE IS RETURNED IN R0
*
ABS      LTR   0,0                 TEST VALUE IN R0
         BNM   DONE                BRANCH IF VALUE IS NOT NEG
         LCR   0,0                 R0 = -R0
DONE     BR    5                   RETURN TO MAIN
*
*  END OF SUBPGM ABS
*
NUM1     DC    F'15'
NUM2     DC    F'-42'
NUM3     DS    F
         END

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

© Copyright Emmi Schatz 2003