49 lines
2.1 KiB
Plaintext
49 lines
2.1 KiB
Plaintext
* Fibonacci sequence 31/07/2018
|
|
* packed dec (PL8) = 15 decimals => max fibo(73)
|
|
FIBOWTOP CSECT
|
|
USING FIBOWTOP,R13 base register
|
|
B 72(R15) skip savearea
|
|
DC 17F'0' savearea
|
|
SAVE (14,12) save previous context
|
|
ST R13,4(R15) link backward
|
|
ST R15,8(R13) link forward
|
|
LR R13,R15 set addressability
|
|
* ----
|
|
ZAP FNM2,=P'0' f(0)=0
|
|
ZAP FNM1,=P'1' f(1)=1
|
|
LA R4,2 n=2
|
|
LA R6,1 step
|
|
LH R7,NN limit
|
|
LOOP EQU * for n=2 to nn
|
|
ZAP FN,FNM1 f(n)=f(n-2)
|
|
AP FN,FNM2 f(n)=f(n-1)+f(n-2)
|
|
CVD R4,PW n
|
|
MVC ZN,EM load mask
|
|
ED ZN,PW packed dec (PL8) to char (CL16)
|
|
MVC WTOBUF+5(2),ZN+L'ZN-2 output
|
|
MVC ZN,EM load mask
|
|
ED ZN,FN packed dec (PL8) to char (CL16)
|
|
MVC WTOBUF+9(L'ZN),ZN output
|
|
WTO MF=(E,WTOMSG) write buffer
|
|
ZAP FNM2,FNM1 f(n-2)=f(n-1)
|
|
ZAP FNM1,FN f(n-1)=f(n)
|
|
BXLE R4,R6,LOOP endfor n
|
|
* ----
|
|
L R13,4(0,R13) restore previous savearea pointer
|
|
RETURN (14,12),RC=0 restore registers from calling sav
|
|
* ---- DATA
|
|
NN DC H'73' nn
|
|
FNM2 DS PL8 f(n-2)
|
|
FNM1 DS PL8 f(n-1)
|
|
FN DS PL8 f(n)
|
|
PW DS PL8 15num
|
|
ZN DS CL20
|
|
* ' b 0 0 0 , 0 0 0 , 0 0 0 , 0 0 0 , 0 0 0' 15num
|
|
EM DC XL20'402020206B2020206B2020206B2020206B202120' mask
|
|
WTOMSG DS 0F
|
|
DC H'80',XL2'0000'
|
|
* fibo(73)=806515533049393
|
|
WTOBUF DC CL80'fibo(12)=123456789012345 '
|
|
REGEQU
|
|
END FIBOWTOP
|