This sample was Assembled and tested during April 2002 on an OS/390 V2.R9 system.
NOGEN |
||||||
|   |
'EX3A - EXERCISE IN ADDRESSING' |
|||||
EX3A |
||||||
*,R15 |
INITIAL BASE REGISTER |
|||||
BEGIN |
START |
|||||
DC |
AL1(8),CL8'EX3A' |
PROGRAM NAME FOR DEBUGGING |
||||
DS |
0F |
MY SAVE AREA |
||||
DC |
||||||
PRESAVE |
DC |
AL4(*-*) |
ADDR OF PREVIOUS SAVE AREA |
|||
NEXTSAVE |
DC |
AL4(*-*) |
ADDR OF NEXT SAVE AREA |
|||
SREG14 |
DC |
AL4(*-*) |
GENERAL |
|||
SREG15 |
DC |
AL4(*-*) |
- - - ->PURPOSE |
|||
SREG0 |
DC |
13AL4(*-*) |
- - - - - - - ->REGISTER SAVE |
|||
SAVEEND |
DS |
0H |
END OF MY SAVE AREA |
|||
SPACE |
1 |
|||||
START |
EQU |
* |
||||
R15 |
DUMP INITIAL BASE REGISTER |
|||||
R14,R12,12(R13) |
SAVE THE REGISTERS ON ENTRY. |
|||||
LR |
R12,R15 |
SET UP MY |
||||
BEGIN,R12 |
- - - ->BASE REGISTER |
|||||
ST |
R13,PRESAVE |
PERFORM SAVE |
||||
LA |
R15,SAVEAREA |
- - - ->AREA |
||||
ST |
R15,8(R13) |
- - - - - - - ->CHAINING |
||||
LR |
R13,R15 |
R13 = ADDR OF MY SAVE AREA. |
||||
(INDCB,INPUT,OUTDCB,OUTPUT) |
||||||
EJECT |
||||||
* | ||||||
* |
PREPARE TO BUILD A LIST OF NAMES IN OUTAREA. |
|||||
* | ||||||
LA |
R4,NAMETAB |
R4 = START OF ARRAY. |
||||
READREC |
INDCB,INAREA |
READ A RECORD |
||||
* | ||||||
* |
RETRIEVE THE NAMES AND SORT THEM! |
|||||
* | ||||||
CLC |
=CL4'****',INAREA |
IS IT LAST INPUT RECORD? |
||||
BE |
READDONE |
YEP - STOP READING. |
||||
MVC |
0(8,R4),INAREA |
NO - SLOT NAME IN ARRAY, |
||||
LA |
R4,8(,R4) |
POINT TO NEXT ARRAY SLOT, |
||||
B |
READREC |
AND REPEAT TILL EXHAUSTED. |
||||
READDONE |
LA |
R4,NAMETAB |
R4 = START OF ARRAY. |
|||
LA |
R3,NAMETAB+8 |
R3 = START OF ARRAY + 1. |
||||
CLI |
FLAG,SORTED |
ARE NAMES IN ORDER? |
||||
BE |
INFORM |
YEP - GO TELL ABOUT IT. |
||||
MVI |
FLAG,SORTED |
NO - INDICATE IT IS. |
||||
SORT1 |
CLI |
0(R4),X'FF' |
END OF ARRAY? |
|||
BE |
READDONE |
YEP - CHECK ALL DONE, |
||||
CLC |
0(8,R4),0(R3) |
NO - IS FIRST > SECOND? |
||||
BH |
SWAP |
YEP - SWAP THEM |
||||
SORT2 |
LA |
R4,8(,R4) |
NO - MOVE TO |
|||
LA |
R3,8(,R3) |
- - - ->NEXT |
||||
B |
SORT1 |
- - - - - - - ->PAIR. |
||||
SWAP |
MVC |
TEMP,0(R4) |
SAVE FIRST NAME, THEN |
|||
MVC |
0(8,R4),0(R3) |
MOVE SECOND NAME FORWARD, |
||||
MVC |
0(8,R3),TEMP |
RETURN FIRST NAME TO ARRAY. |
||||
MVI |
FLAG,UNSORTED |
INDICATE NOT SORTED. |
||||
B |
SORT2 |
GO GET NEXT PAIR. |
||||
SPACE |
1 |
|||||
INFORM |
MVC |
OUTAREA+1(80),NAMETAB |
||||
OUTDCB,OUTAREA |
OUTPUT THE TABLE. |
|||||
3 |
||||||
EXIT |
(INDCB,,OUTDCB) |
CLOSE BOTH FILES |
||||
SR |
R15,R15 |
FORCE COND CODE ZERO |
||||
L |
R13,PRESAVE |
R13 = PREVIOUS SAVE AREA ADDR. |
||||
L |
R14,12(R13) |
RESTORE REGISTERS |
||||
R0,R12,20(R13) |
EXCEPT REGISTER 15 |
|||||
BR |
R14 |
RETURN TO CALLER (OS/390) |
||||
SPACE |
1 |
|||||
TEMP |
DS |
CL8 |
SWITCH NAME AREA. |
|||
SPACE |
1 |
|||||
INDCB |
MACRF=GM ,EODAD=READDONE ,DDNAME=INDD,LRECL=80, |
* | ||||
DSORG=PS |
||||||
INAREA |
DS |
CL80 |
||||
SPACE |
1 |
|||||
OUTDCB |
DCB |
|||||
OUTAREA |
DC |
CL133' ' |
||||
SPACE |
1 |
|||||
NAMETAB |
DC |
8X'FF' |
FIRST ENTRY - HIGH VALUES |
|||
DC |
8XL10'FFFFFFFFFFFFFFFF' FURTHER 8 ENTRIES. |
|||||
NAMETABE |
DC |
XL1'FF' |
END OF NAME TABLE. |
|||
FLAG |
DC |
C'N' |
INDICATE NOT SORTED |
|||
SORTED |
EQU |
C'Y' |
INDICATE SORTED. |
|||
UNSORTED |
EQU |
C'N' |
INDICATE NOT SORTED. |
|||
R0 |
0 |
|||||
R1 |
EQU |
1 |
||||
R2 |
EQU |
2 |
||||
R3 |
EQU |
3 |
||||
R4 |
EQU |
4 |
||||
R5 |
EQU |
5 |
||||
R6 |
EQU |
6 |
||||
R7 |
EQU |
7 |
||||
R8 |
EQU |
8 |
||||
R9 |
EQU |
9 |
||||
R10 |
EQU |
10 |
||||
R11 |
EQU |
11 |
||||
R12 |
EQU |
12 |
||||
R13 |
EQU |
13 |
||||
R14 |
EQU |
14 |
||||
R15 |
EQU |
15 |
||||
Copyright © KMS-IT Limited 2002