* 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