This sample was Assembled and tested during April 2002 on an OS/390 V2.R9 system.
NOGEN |
|||||
|   | 'EX5 - EXERCISE IN PACKED DECIMAL ARITHMETIC.' |
||||
EX5 |
|||||
*,R15 |
INITIAL BASE REGISTER |
||||
BEGIN |
START |
||||
DC |
AL1(8),CL8'EX5' |
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) |
|||||
* | |||||
* |
PREPARE TO BUILD A LIST OF NAMES IN OUTAREA. |
||||
* | |||||
READREC |
INDCB,INAREA |
READ A RECORD |
|||
* | |||||
* |
ADD THE RETRIEVED NAME TO THE LIST. |
||||
* | |||||
PACK |
PWORK,AMOUNT |
ACCUMULATE |
|||
AP |
TOTAL,PWORK |
- - - -> FEES. |
|||
AP |
PAYEES,=PL1'1' |
INCREMENT NUMBER OF PAYEES. |
|||
B |
READREC |
AND REPEAT TILL FILE EXHAUSTED. |
|||
SPACE |
1 |
||||
* | |||||
* |
CONVERT AND PRINT THE TOTAL VALUE. |
||||
* | |||||
READDONE |
TOTAL,2,0 |
CONVERT TO STERLING |
|||
PTOTAL,TOTAL |
PRINT THE TOTAL. |
||||
R1,0 |
INSERT CURRENCY |
||||
MVI |
0(R1),C'$' |
- - - -> SYMBOL |
|||
* | |||||
* |
CONVERT AND PRINT THE NET AMOUNT WITH DECIMAL PLACES. |
||||
* | |||||
AMNT,TOTAL |
CALCULATE |
||||
SRP |
AMNT,3,0 |
- - - -> THE |
|||
DP |
AMNT,=PL3'1175' |
- - - - - ->NET |
|||
EDMK |
PAMNT,AMNT |
PRINT THE NET AMOUNT. |
|||
BCTR |
R1,0 |
INSERT CURRENCY |
|||
MVI |
0(R1),C'$' |
- - - -> SYMBOL |
|||
* | |||||
* |
CONVERT AND PRINT VAT AMOUNT WITH DECIMALS. |
||||
* | |||||
ZAP |
DISC,TOTAL |
CALCULATE |
|||
SP |
DISC,AMNT(3) |
- - - -> THE VAT. |
|||
EDMK |
PDISC,DISC |
PRINT THE VAT. |
|||
BCTR |
R1,0 |
INSERT CURRENCY |
|||
MVI |
0(R1),C'$' |
- - - -> SYMBOL |
|||
ZAP |
AVERAGE,TOTAL |
CALCULATE |
|||
DP |
AVERAGE,PAYEES |
- - - -> THE AVERAGE PER PAYEE |
|||
EDMK |
PAV,AVERAGE |
||||
BCTR |
R1,0 |
INSERT CURRENCY |
|||
MVI |
0(R1),C'$' |
- - - -> SYMBOL |
|||
OUTDCB,PLINE1 |
WRITE LINE TO PRINTER. |
||||
PUT |
OUTDCB,PLINE2 |
WRITE LINE TO PRINTER. |
|||
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) |
|||
EJECT |
|||||
SPACE |
1 |
||||
TOTAL |
DC |
PL4'0' |
ACCUMULATED TOTAL. |
||
DISC |
DC |
PL3'0' |
VALUE OF DISCOUNT. |
||
AMNT |
DC |
PL6'0' |
TOTAL - DISC = AMNT |
||
PWORK |
DC |
PL2'0' |
WORK AREA FOR PACKING. |
||
PAYEES |
DC |
PL2'0' |
NUMBER OF PAYEES. |
||
AVERAGE |
DC |
PL5'0' |
AVERAGE PAID PER PAYEE. |
||
SPACE |
1 |
INDCB |
MACRF=GM, EODAD=READDONE, DDNAME=INDD,LRECL=80, |
* |
|
DSORG=PS |
|||||
INAREA |
DS |
0CL80 |
|||
NAME |
DC |
CL9' ' |
|||
AMOUNT |
DC |
CL2' ' |
INPUT AMOUNT |
||
DS |
CL69 |
||||
SPACE |
1 |
OUTDCB |
DCB |
||
PLINE1 |
DS |
0C |
OVERLAY FOR OUTPUT RECORD. |
||
DC |
CL2' ' |
||||
DC |
C'TOTAL =' |
||||
PTOTAL |
DC |
XL9'4020202021204B2020' |
|||
DC |
C' LESS VAT AT 17.5% ' |
||||
PDISC |
DC |
XL7'402020214B2020' |
|||
DC |
C' FINAL AMOUNT' |
||||
PAMNT |
DC |
||||
DC |
CL1' ' |
||||
DC |
CL67' ' |
* |
|||
PLINE1E |
DS |
0C |
END OF OUTPUT RECORD |
||
PL1L |
EQU |
PLINE1E-PLINE1 |
LENGTH OF OUTPUT RECORD. |
||
SPACE |
1 |
||||
PLINE2 |
DS |
0C |
OVERLAY FOR OUTPUT RECORD. |
||
DC |
CL2' ' |
||||
DC |
C'AVERAGE PAID PER PAYEE = ' |
||||
PAV |
DC |
XL6'402021204B2020' |
|||
DC |
CL100' ' |
||||
PLINE2E |
DS |
0C |
END OF OUTPUT RECORD |
||
PL2L |
EQU |
PLINE2E-PLINE2 |
LENGTH OF OUTPUT RECORD. |
||
SPACE |
1 |
||||
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