Sample Program: Using an Array, Version 2

*
*  ARRAY EXAMPLE NUMBER 2
*
*   INT ARR[12];
*   FOR (I = 0 ; I < 12 ; I++)
*      ARR[I] = I * 2;
*   FOR (I = 0 ; I < 12 ; I++)
*      COUT << ARR[I] << ENDL;
*
*
ARRAY2   START
         STM   14,12,12(13)             SAVE REGISTERS
         BALR  12,0                     LOAD BASE ADDR IN R12
         USING *,12                     DESIGNATE R12 AS BASE REGISTER
         OPEN  ARRFILE,OUTPUT           OPEN OUTPUT FILE
*
* FIRST LOOP: ARR[I] = 2I
*
         SR    2,2               USE R2 FOR I (LOOP COUNTER)
         SR    3,3               USE R3 FOR INDEX REG
         L     5,=F'12'          R5 = 12 (LOOP LIMIT)
STORE    LR    4,2               R4 = I
         AR    4,2               R4 = I * 2
         ST    4,ARR(3)          ARR[I] = I * 2
         A     3,=F'4'           MOVE INDEX REG TO NEXT ARRAY ELEMENT
         A     2,=F'1'           I = I + 1
         CR    2,5               IF (I < 12)
         BL    STORE                LOOP AGAIN
*
* SECOND LOOP: COUT << ARR[I] << ENDL
*
         SR    3,3               SET UP INDEX REG AGAIN
         L     5,=F'48'          R5 = 48 (LOOP LIMIT IN BYTES)
PRINT    L     2,ARR(3)          LOAD ARR[I]
         CVD   2,ARRPACK         CONVERT ARR[I] TO DEC
         UNPK  ARROUT,ARRPACK    CONVERT ARR[I] TO EBCDIC
         OI    ARROUT+2,X'F0'    FIX SIGN OF ARR[I]
         PUT   ARRFILE,OUTREC    PRINT ARR[I]
         A     3,=F'4'           MOVE INDEX REG TO NEXT ARRAY ELEMENT
         CR    3,5               CHECK IF AT END OF ARRAY
         BL    PRINT             IF NOT, PRINT AGAIN
*
         CLOSE ARRFILE
         LM    14,12,12(13)
         BR    14
*
ARRFILE  DCB   LRECL=4,RECFM=F,MACRF=P,DDNAME=ARROUT
*
*  OUTPUT RECORD
*
OUTREC   DS    0CL4
         DC    CL1' '
ARROUT   DS    CL3
*
ARR      DS    12F
ARRPACK  DS    D
         END


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

© Copyright Emmi Schatz 2003