CONCATENATE TWO CHARACTER STRINGS
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: TO ILLUSTRATE THE USE OF CHARACTER STRING
7 * OUR FORMAT IS THAT A CHARACTER STRING IS A POINTER TO THE
8 * BEGINNING OF THE CHARACTER STRING
9 * AT THE POINTER -4 IS THE LENGTH (OR ACTUAL NUMBER OF CHARS IN
10 * THE STRING)
11 * AT THE POINTER -8 IS THE MAXIMUM LENGTH (OR SPACE ALLOCATTED)
000002 4110 C022 00024 12 LA 1,STRING1
000006 5010 C036 00038 13 ST 1,CSCB
00000A 4110 C032 00034 14 LA 1,STRING2
00000E 5010 C03A 0003C 15 ST 1,CSCB+4
000012 4110 C036 00038 16 LA 1,CSCB
000016 45F0 C03E 00040 17 BAL 15,CS
00001A 07FE 18 BR 14
19 *
00001C 00000006 20 DC A(STRING1L)
000020 00000003 21 DC A(STRING1A)
000024 C1C2C3 22 STRING1 DC C'ABC'
00003 23 STRING1A EQU *-STRING1 ACTUAL LENGTH OF STRING TO START
000027 404040 24 DC C' '
00006 25 STRING1L EQU *-STRING1 HOW MUCH ROOM WE HAVE
00002A 0000
00002C 00000004 26 DC A(STRING2L)
000030 00000004 27 DC A(STRING2L)
000034 C4C5C6C7 28 STRING2 DC C'DEFG'
00004 29 STRING2L EQU *-STRING2
i000038 30 CSCB DS 2F
CONCATENATE TWO CHARACTER STRINGS
LOC OBJECT CODE ADDR1 ADDR2 STMT SOURCE STATEMENT
00040 32 CS EQU *
33 * CONCATENATES STRING1 AND STRING2, PUTTING THE RESULT IN
34 * STRING1
35 * IF THERE IS INSUFFICIENT ROOM IN STRING1 (AS DETERMINED BY
36 * ITS MAXIMUM LENGTH), THE RESULT WILL BE TRUNCATED
37 * APPROPRIATELY
38 *
39 * ON ENTRY R1 WILL POINT TO A CSCB (CONCATENATE STRING CONTROL
40 * BLOCK)
41 * ITS WORDS WILL BE (+0) POINTER TO FIRST STRING
42 * (+4) POINTER TO SECOND STRING
43 *
44 * REGISTER USAGE
45 * R1 - POINTER TO CSCB
46 * R15 - RETURN ADDRESS
47 * NOTE, WE ARE NOT USING IBM CALL/RETURN CONVENTIONS
48 * R2 - I
49 * R3 - J
50 * R4 - ADDRESS IN FIRST STRING, CORRESPONDING TO ADDRESS OF
51 * STRING1.CHARS[I]
52 * R5 - ADDRESS IN SECOND STRING, CORRESPONDING TO ADDRESS OF
53 * STRING2.CHARS[J]
54 * R6 - MAXIMUM LENGTH OF STRING1
55 * R7 - NUMBER OF CHARACTERS IN STRING2
56 * R8 - ADDRESS OF FIRST STRING
57 * R9 - ADDRESS OF SECOND STRING
58 * R10 - TEMPORARY STORAGE
59 * R11 - INITIAL VALUE FOR ACTUAL LENGTH OF STRING1
60 *
000040 5880 1000 00000 61 L 8,0(0,1)
000044 5890 1004 00004 62 L 9,4(0,1)
63 * GET MAXIMUM LENGTH OF STRING 1
000048 18A8 64 LR 10,8
00004A 5AA0 C0AE 000B0 65 A 10,=F'-8'
00004E 5860 A000 00000 66 L 6,0(0,10)
67 * GET ACTUAL LENGTH OF STRING 2
000052 18A9 68 LR 10,9
000054 5AA0 C0B2 000B4 69 A 10,=F'-4'
000058 5870 A000 00000 70 L 7,0(0,10)
71 * GET ACTUAL LENGTH OF STRING 1
00005C 18A8 72 LR 10,8
00005E 5AA0 C0B2 000B4 73 A 10,=F'-4'
000062 58B0 A000 00000 74 L 11,0(0,10)
75 * I:=STRING1.ACTUALLENGTH+1
000066 182B 76 LR 2,11
000068 5A20 C0B6 000B8 77 A 2,=F'1'
78 * J:=1
00006C 5830 C0B6 000B8 79 L 3,=F'1'
80 *
000070 1848 81 LR 4,8
000072 1A4B 82 AR 4,11 R4 NOW POINTS TO PLACE TO PUT FIRST CHAR OF STRING2
83 *
000074 1859 84 LR 5,9 R5 NOW POINTS TO FIRST CHAR TO MOVE
85 * WHILE
i 86 * CONCATENATE TWO CHARACTER STRINGS
LOC OBJECT CODE ADDR1 ADDR2 STMT SOURCE STATEMENT
00076 87 CS001 EQU *
88 *
89 * (I<=STRING1.MAXLENGTH) AND
000076 1926 90 CR 2,6
000078 4720 C09C 0009E 91 BC 2,CS001E
92 * (J<=STRING2.ACTUALLENGTH)
00007C 1937 93 CR 3,7
00007E 4720 C09C 0009E 94 BC 2,CS001E
95 * STRING1.CHARS[I]:=STRING2.CHARS[J]
000082 43A0 5000 00000 96 IC 10,0(0,5)
000086 42A0 4000 00000 97 STC 10,0(0,4)
98 * INCREMENT I,J AND ADDRESS POINTERS
00008A 5A20 C0B6 000B8 99 A 2,=F'1'
00008E 5A30 C0B6 000B8 100 A 3,=F'1'
000092 5A40 C0B6 000B8 101 A 4,=F'1'
000096 5A50 C0B6 000B8 102 A 5,=F'1'
103 * END WHILE
00009A 47F0 C074 00076 104 B CS001
0009E 105 CS001E EQU *
106 * STORE NEW ACTUAL LENGTH
00009E 18A8 107 LR 10,8
0000A0 5AA0 C0B2 000B4 108 A 10,=F'-4'
0000A4 5A20 C0BA 000BC 109 A 2,=F'-1'
0000A8 5020 A000 00000 110 ST 2,0(0,10)
111 * END SUBROUTINE
0000AC 07FF 112 BR 15
113 END
0000B0 FFFFFFF8 114 =F'-8'
0000B4 FFFFFFFC 115 =F'-4'
0000B8 00000001 116 =F'1'
0000BC FFFFFFFF 117 =F'-1'