This sample was Assembled and tested during April 2002 on an OS/390 V2.R9 system.

PRINT

NOGEN

 

TITLE

'EX5 - EXERCISE IN PACKED DECIMAL ARITHMETIC.'

EX5

CSECT

USING

*,R15

INITIAL BASE REGISTER

BEGIN

B

START

DC

AL1(8),CL8'EX5'

PROGRAM NAME FOR DEBUGGING

SAVEAREA

DS

0F

MY SAVE AREA

DC

AL4(*-*)

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

*

DROP

R15

DUMP INITIAL BASE REGISTER

STM

R14,R12,12(R13)

SAVE THE REGISTERS ON ENTRY.

LR

R12,R15

SET UP MY

USING

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.

OPEN

(INDCB,INPUT,OUTDCB,OUTPUT)

EJECT

*

*

PREPARE TO BUILD A LIST OF NAMES IN OUTAREA.

*

READREC

GET

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

SRP

TOTAL,2,0

CONVERT TO STERLING

EDMK

PTOTAL,TOTAL

PRINT THE TOTAL.

BCTR

R1,0

INSERT CURRENCY

MVI

0(R1),C'$'

- - - -> SYMBOL

*

*

CONVERT AND PRINT THE NET AMOUNT WITH DECIMAL PLACES.

*

ZAP

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

PUT

OUTDCB,PLINE1

WRITE LINE TO PRINTER.

PUT

OUTDCB,PLINE2

WRITE LINE TO PRINTER.

SPACE

3

EXIT

CLOSE

(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

LM

R0,R12,20(R13)

EXCEPT REGISTER 15

BR

R14

RETURN TO CALLER (OS/390)

EJECT

LTORG

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

DCB

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

MACRF=PM, RECFM=F, LRECL=133,DDNAME=OUTDD,DSORG=PS

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

XL7'402021204B2020'

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

EQU

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

END

Copyright © KMS-IT Limited 2002