SUBSCRIPT ROUTINE
  LOC  OBJECT CODE    ADDR1 ADDR2  STMT   SOURCE STATEMENT
000000                                2 P1       START
000000 05C0                           3          BALR  12,0
                            00002     4          USING *,12
                                      5 * YOUR PROGRAM GOES HERE
                                      6 * OBJECTIVE:  ANOTHER EXAMPLE TO ILLUSTRATE PARAMETERS
                                      7 * A SUBROUTINE TO GET THE ADDRESS OF AN ELEMENT (I,J) OF AN
                                      8 * TWO-DIMENSIONAL ARRAY
                                      9 * WE USE AN ARRAY CONTROL BLOCK CONTAINING THE FOLLOWING
                                     10 * INFORMATION
                                     11 * ADDRESS OF ARRAY ITSELF (ACB+0)
                                     12 * NUMBER  OF   ROWS (ACB+4)
                                     13 * NUMBER  OF  COLUMNS (ACB+8)
                                     14 * FIRST SUBSCRIPT (ACB+12)
                                     15 * SECOND  SUBSCRIPT (ACB+16)
                                     16 * NUMBERS ARE DECIMAL
                                     17 *
                                     18 * THE MULTIPLY SUBROUTINE IS IS USED
                                     19 * (ASSUME ALL SUBSCRIPTS BEGIN AT ZERO)
                                     20 *
                                     21 * TEST BY SETTING A[3,3] TO A[2,1]
000002 5810 C136            00138    22          L     1,=F'2'
000006 5010 C046            00048    23          ST    1,ROWNO
00000A 5810 C13A            0013C    24          L     1,=F'1'
00000E 5010 C04A            0004C    25          ST    1,COLNO
000012 4110 C03A            0003C    26          LA    1,ACB1
000016 4550 C08E            00090    27          BAL   5,SUBS
00001A 58A0 2000            00000    28          L     10,0(0,2)  R10=A[2,1]
00001E 5810 C13E            00140    29          L     1,=F'3'
000022 5010 C046            00048    30          ST    1,ROWNO
000026 5810 C13E            00140    31          L     1,=F'3'
00002A 5010 C04A            0004C    32          ST    1,COLNO
00002E 4110 C03A            0003C    33          LA    1,ACB1
000032 4550 C08E            00090    34          BAL   5,SUBS     GET R2 TO POINT TO A[3,3]
000036 50A0 2000            00000    35          ST    10,0(0,2)  A[3,3]=A[2,1] PREVIOUSLY STORED IN R10
00003A 07FE                          36          BR    14
                                     37 *
00003C                               38          DS    0F         NEEDED FOR ALIGNMENT
                            0003C    39 ACB1     EQU    *
00003C 00000050                      40 ADDR     DC     A(A)
000040 00000004                      41 NOROWS   DC     F'4'
000044 00000004                      42 NOCOLS   DC     F'4'
000048 00000000                      43 ROWNO    DC     F'0'
00004C 00000000                      44 COLNO    DC     F'0'
                            00050    45 A        EQU    *
000050 0000000000000001              46          DC     F'0',F'1',F'2',F'3'
000060 0000000400000005              47          DC     F'4',F'5',F'6',F'7'
000070 0000000800000009              48          DC     F'8',F'9',F'10',F'11'
000080 0000000C0000000D              49          DC     F'12',F'13',F'14',F'15'
         SUBSCRIPT ROUTINE
  LOC  OBJECT CODE    ADDR1 ADDR2  STMT   SOURCE STATEMENT
                                     51 *
                                     52 *  Routine to find  the address of a subscripted elemennt
                                     53 *
                            00090    54 SUBS     EQU   *
                                      55  * FIRST MULTIPLY # COLS BY FIRST SUBSCRIPT
000090 5820 1008            00008    56          L     2,8(0,1)
000094 5020 C0EE            000F0    57          ST    2,PCB+0
000098 5820 100C            0000C    58          L     2,12(0,1)
00009C 5020 C0F2            000F4    59          ST    2,PCB+4
0000A0 4120 C0EA            000EC    60          LA    2,SUBSTEMP
0000A4 5020 C0F6            000F8    61          ST    2,PCB+8
0000A8 5010 C0E6            000E8    62          ST    1,SUBSAV1    SAVE REGISTER ONE
0000AC 4110 C0EE            000F0    63          LA    1,PCB
0000B0 5050 C0E2            000E4    64          ST    5,SUBSAV5    SAVE REGISTER FIVE
0000B4 4550 C0FA            000FC    65          BAL   5,MULT
0000B8 5820 C0EA            000EC    66          L     2,SUBSTEMP
0000BC 5810 C0E6            000E8    67          L     1,SUBSAV1
0000C0 5A20 1010            00010    68          A     2,16(0,1)
0000C4 1A22                          69          AR    2,2
0000C6 1A22                          70          AR    2,2          R2=OFFSET MBYTES
0000C8 5A20 1000            00000    71          A     2,0(0,1)
0000CC 5850 C0E2            000E4    72          L     5,SUBSAV5
0000D0 07F5                          73          BR    5            SUBS ENDS
0000D4                               74          DS    4F
0000E4                               75 SUBSAV5  DS    F
0000E8                               76 SUBSAV1  DS    F
0000EC                               77 SUBSTEMP DS    F
0000F0                               78 PCB      DS    3F           PARAMETER CONTROL BLOCK FOR MULT
                                     79 *             FIRST WORD (+0) CONTAINS FIRST THING TO ADD
                                     80 *             SECOND WORD (+4) CONTAINS SECOND THING TO ADD
                                     81 *             THIRD WORD (+8) CONTAINS ADDRESS OF PLACE TO PUT
i                                    82 *                                                       ANSWER
         SUBSCRIPT ROUTINE
  LOC  OBJECT CODE    ADDR1 ADDR2  STMT   SOURCE STATEMENT
                            000FC    84 MULT     EQU   *
                                     85 *        ON  ENTRY  R1 CONTAINS ADDRESS OF PARAMETER CONTROL BLOCK
0000FC 5840 1000            00000    86          L     4,0(0,1)
000100 5040 C12E            00130    87          ST    4,MULTA    NOTE THAT THERE IS NO SUCH CONCEPT AS A LOCAL
                                     88 *                         VARIABLE IN ASSEMBLER, UNLESS WE USE SEPARATE
                                     89 *                         COMPILATION
000104 5840 1004            00004    90          L     4,4(0,1)   R4 NOW CONTAINS THE SUM
000108 5040 C132            00134    91          ST    4,MULTB
00010C 1B66                          92          SR    6,6        R6 CONTAINS THE COUNT
00010E 1B77                          93          SR    7,7        R7 CONTAINS THE SUM SO FAR OF A'S
                            00110    94 MULT1    EQU   *
000110 5960 C132            00134    95          C     6,MULTB
000114 4780 C122            00124    96          BE    MULT2
000118 5A70 C12E            00130    97          A     7,MULTA
00011C 5A60 C13A            0013C    98          A     6,=F'1'
000120 47F0 C10E            00110    99          B     MULT1
                            00124   100 MULT2    EQU   *
000124 5820 1008            00008   101          L      2,8(0,1)   R2 NOW CONTAINS ADDRESS OF PLACE TO PUT
000128 5070 2000            00000   102          ST     7,0(0,2)   PRODUCT
00012C 07F5                         103          BR     5          MULT ENDS
000130                              104 MULTA    DS    F
000134                              105 MULTB    DS    F
                                    106  *     END  OF  YOUR PROGRAM
                                    107          END
000138 00000002                     108                =F'2'
00013C 00000001                     109                =F'1'
000140 00000003                     110                =F'3'