65 lines
2.7 KiB
Plaintext
65 lines
2.7 KiB
Plaintext
* Combinations 26/05/2016
|
|
COMBINE CSECT
|
|
USING COMBINE,R13 base register
|
|
B 72(R15) skip savearea
|
|
DC 17F'0' savearea
|
|
STM R14,R12,12(R13) prolog
|
|
ST R13,4(R15) "
|
|
ST R15,8(R13) "
|
|
LR R13,R15 "
|
|
SR R3,R3 clear
|
|
LA R7,C @c(1)
|
|
LH R8,N v=n
|
|
LOOPI1 STC R8,0(R7) do i=1 to n; c(i)=n-i+1
|
|
LA R7,1(R7) @c(i)++
|
|
BCT R8,LOOPI1 next i
|
|
LOOPBIG LA R10,PG big loop {------------------
|
|
LH R1,N n
|
|
LA R7,C-1(R1) @c(i)
|
|
LH R6,N i=n
|
|
LOOPI2 IC R3,0(R7) do i=n to 1 by -1; r2=c(i)
|
|
XDECO R3,PG+80 edit c(i)
|
|
MVC 0(2,R10),PG+90 output c(i)
|
|
LA R10,3(R10) @pgi=@pgi+3
|
|
BCTR R7,0 @c(i)--
|
|
BCT R6,LOOPI2 next i
|
|
XPRNT PG,80 print buffer
|
|
LA R7,C @c(1)
|
|
LH R8,M v=m
|
|
LA R6,1 i=1
|
|
LOOPI3 LR R1,R6 do i=1 by 1; r1=i
|
|
IC R3,0(R7) c(i)
|
|
CR R3,R8 while c(i)>=m-i+1
|
|
BL ELOOPI3 leave i
|
|
CH R6,N if i>=n
|
|
BNL ELOOPBIG exit loop
|
|
BCTR R8,0 v=v-1
|
|
LA R7,1(R7) @c(i)++
|
|
LA R6,1(R6) i=i+1
|
|
B LOOPI3 next i
|
|
ELOOPI3 LR R1,R6 i
|
|
LA R4,C-1(R1) @c(i)
|
|
IC R3,0(R4) c(i)
|
|
LA R3,1(R3) c(i)+1
|
|
STC R3,0(R4) c(i)=c(i)+1
|
|
BCTR R7,0 @c(i)--
|
|
LOOPI4 CH R6,=H'2' do i=i to 2 by -1
|
|
BL ELOOPI4 leave i
|
|
IC R3,1(R7) c(i)
|
|
LA R3,1(R3) c(i)+1
|
|
STC R3,0(R7) c(i-1)=c(i)+1
|
|
BCTR R7,0 @c(i)--
|
|
BCTR R6,0 i=i-1
|
|
B LOOPI4 next i
|
|
ELOOPI4 B LOOPBIG big loop }------------------
|
|
ELOOPBIG L R13,4(0,R13) epilog
|
|
LM R14,R12,12(R13) "
|
|
XR R15,R15 "
|
|
BR R14 exit
|
|
M DC H'5' <=input
|
|
N DC H'3' <=input
|
|
C DS 64X array of 8 bit integers
|
|
PG DC CL92' ' buffer
|
|
YREGS
|
|
END COMBINE
|