108 lines
4.6 KiB
Text
108 lines
4.6 KiB
Text
* Hamming numbers 12/03/2017
|
|
HAM CSECT
|
|
USING HAM,R13 base register
|
|
B 72(R15) skip savearea
|
|
DC 17F'0' savearea
|
|
STM R14,R12,12(R13) save previous context
|
|
ST R13,4(R15) link backward
|
|
ST R15,8(R13) link forward
|
|
LR R13,R15 set addressability
|
|
LA R6,1 ii=1
|
|
DO WHILE=(C,R6,LE,=F'20') do ii=1 to 20
|
|
BAL R14,PRTHAM call prtham
|
|
LA R6,1(R6) ii++
|
|
ENDDO , enddo ii
|
|
LA R6,1691 ii=1691
|
|
BAL R14,PRTHAM call prtham
|
|
L R13,4(0,R13) restore previous savearea pointer
|
|
LM R14,R12,12(R13) restore previous context
|
|
XR R15,R15 rc=0
|
|
BR R14 exit
|
|
PRTHAM EQU * ---- prtham
|
|
ST R14,R14PRT save return addr
|
|
LR R1,R6 ii
|
|
XDECO R1,XDEC edit
|
|
MVC PG+2(4),XDEC+8 output ii
|
|
LR R1,R6 ii
|
|
BAL R14,HAMMING call hamming(ii)
|
|
XDECO R0,XDEC edit
|
|
MVC PG+8(10),XDEC+2 output hamming(ii)
|
|
XPRNT PG,L'PG print buffer
|
|
L R14,R14PRT restore return addr
|
|
BR R14 ---- return
|
|
HAMMING EQU * ---- hamming(ll)
|
|
ST R14,R14HAM save return addr
|
|
ST R1,LL ll
|
|
MVC HH,=F'1' h(1)=1
|
|
SR R0,R0 0
|
|
ST R0,I i=0
|
|
ST R0,J j=0
|
|
ST R0,K k=0
|
|
MVC X2,=F'2' x2=2
|
|
MVC X3,=F'3' x3=3
|
|
MVC X5,=F'5' x5=5
|
|
LA R7,1 n=1
|
|
L R2,LL ll
|
|
BCTR R2,0 -1
|
|
ST R2,LLM1 ll-1
|
|
DO WHILE=(C,R7,LE,LLM1) do n=1 to ll-1
|
|
L R4,X2 m=x2
|
|
IF C,R4,GT,X3 THEN if m>x3 then
|
|
L R4,X3 m=x3
|
|
ENDIF , endif
|
|
IF C,R4,GT,X5 THEN if m>x5 then
|
|
L R4,X5 m=x5
|
|
ENDIF , endif
|
|
LR R1,R7 n
|
|
SLA R1,2 *4
|
|
ST R4,HH(R1) h(n+1)=m
|
|
IF C,R4,EQ,X2 THEN if m=x2 then
|
|
L R1,I i
|
|
LA R1,1(R1) i+1
|
|
ST R1,I i=i+1
|
|
SLA R1,2 *4
|
|
L R2,HH(R1) h(i+1)
|
|
MH R2,=H'2' *2
|
|
ST R2,X2 x2=2*h(i+1)
|
|
ENDIF , endif
|
|
IF C,R4,EQ,X3 THEN if m=x3 then
|
|
L R1,J j
|
|
LA R1,1(R1) j+1
|
|
ST R1,J j=j+1
|
|
SLA R1,2 *4
|
|
L R2,HH(R1) h(j+1)
|
|
MH R2,=H'3' *3
|
|
ST R2,X3 x3=3*h(j+1)
|
|
ENDIF , endif
|
|
IF C,R4,EQ,X5 THEN if m=x5 then
|
|
L R1,K k
|
|
LA R1,1(R1) k+1
|
|
ST R1,K k=k+1
|
|
SLA R1,2 *4
|
|
L R2,HH(R1) h(k+1)
|
|
MH R2,=H'5' *5
|
|
ST R2,X5 x5=5*h(k+1)
|
|
ENDIF , endif
|
|
LA R7,1(R7) n++
|
|
ENDDO , enddo n
|
|
L R1,LL ll
|
|
SLA R1,2 *4
|
|
L R0,HH-4(R1) return h(ll)
|
|
L R14,R14HAM restore return addr
|
|
BR R14 ---- return
|
|
R14HAM DS A return addr of hamming
|
|
R14PRT DS A return addr of print
|
|
LL DS F ll
|
|
LLM1 DS F ll-1
|
|
I DS F i
|
|
J DS F j
|
|
K DS F k
|
|
X2 DS F x2
|
|
X3 DS F x3
|
|
X5 DS F x5
|
|
PG DC CL80'H(xxxx)=xxxxxxxxxx'
|
|
XDEC DS CL12 temp
|
|
LTORG positioning literal pool
|
|
HH DS 1691F array h(1691)
|
|
YREGS
|
|
END HAM
|