RosettaCodeData/Task/Hofstadter-Q-sequence/360-Assembly/hofstadter-q-sequence.360
2023-07-01 13:44:08 -04:00

51 lines
2 KiB
Text

* Hofstrader q sequence for any n - 18/10/2015
HOFSTRAD CSECT
USING HOFSTRAD,R15 set base register
MVC Q,=F'1' q(1)=1
MVC Q+4,=F'1' q(2)=1
LA R4,1 i=1
LOOPI C R4,N do i=1 to n
BH ELOOPI
C R4,=F'3' if i>=3 then
BL NOTREC
LR R1,R4 i
SLA R1,2 i*4
L R2,Q-8(R1) q(i-1)
LR R1,R4 i
SR R1,R2 i-q(i-1)
SLA R1,2 *4
L R2,Q-4(R1) r2=q(i-q(i-1))
LR R1,R4 i
SLA R1,2 i*4
L R3,Q-12(R1) q(i-2)
LR R1,R4 i
SR R1,R3 i-q(i-2)
SLA R1,2 *4
L R3,Q-4(R1) r3=q(i-q(i-2))
AR R2,R3 r2=r2+r3
LR R1,R4 i
SLA R1,2 i*4
ST R2,Q-4(R1) q(i)=q(i-q(i-1))+q(i-q(i-2))
NOTREC C R4,=F'10' if i<=10
BNH PRT
C R4,N or i=n then
BNE NOPRT
PRT XDECO R4,XD edit i
MVC PG+2(4),XD+8 output i
LR R1,R4 i
SLA R1,2 i*4
L R2,Q-4(R1) q(i)
XDECO R2,XD edit q(i)
MVC PG+10(4),XD+8 output q(i)
XPRNT PG,80 print buffer
NOPRT LA R4,1(R4) i=i+1
B LOOPI
ELOOPI XR R15,R15 set return code
BR R14 return to caller
PG DC CL80'n=...., q=....' buffer
XD DS CL12 temporary variable
LTORG insert literals for addressability
N DC F'1000' n=1000
Q DS 1000F array q(1000)
YREGS
END HOFSTRAD