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'