Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
99
Task/Ackermann-function/360-Assembly/ackermann-function.360
Normal file
99
Task/Ackermann-function/360-Assembly/ackermann-function.360
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
* Ackermann function 07/09/2015
|
||||
&LAB XDECO ®,&TARGET
|
||||
.*-----------------------------------------------------------------*
|
||||
.* THIS MACRO DISPLAYS THE REGISTER CONTENTS AS A TRUE *
|
||||
.* DECIMAL VALUE. XDECO IS NOT PART OF STANDARD S360 MACROS! *
|
||||
*------------------------------------------------------------------*
|
||||
AIF (T'® EQ 'O').NOREG
|
||||
AIF (T'&TARGET EQ 'O').NODEST
|
||||
&LAB B I&SYSNDX BRANCH AROUND WORK AREA
|
||||
W&SYSNDX DS XL8 CONVERSION WORK AREA
|
||||
I&SYSNDX CVD ®,W&SYSNDX CONVERT TO DECIMAL
|
||||
MVC &TARGET,=XL12'402120202020202020202020'
|
||||
ED &TARGET,W&SYSNDX+2 MAKE FIELD PRINTABLE
|
||||
BC 2,*+12 BYPASS NEGATIVE
|
||||
MVI &TARGET+12,C'-' INSERT NEGATIVE SIGN
|
||||
B *+8 BYPASS POSITIVE
|
||||
MVI &TARGET+12,C'+' INSERT POSITIVE SIGN
|
||||
MEXIT
|
||||
.NOREG MNOTE 8,'INPUT REGISTER OMITTED'
|
||||
MEXIT
|
||||
.NODEST MNOTE 8,'TARGET FIELD OMITTED'
|
||||
MEXIT
|
||||
MEND
|
||||
ACKERMAN CSECT
|
||||
USING ACKERMAN,R12 r12 : base register
|
||||
LR R12,R15 establish base register
|
||||
ST R14,SAVER14A save r14
|
||||
LA R4,0 m=0
|
||||
LOOPM CH R4,=H'3' do m=0 to 3
|
||||
BH ELOOPM
|
||||
LA R5,0 n=0
|
||||
LOOPN CH R5,=H'8' do n=0 to 8
|
||||
BH ELOOPN
|
||||
LR R1,R4 m
|
||||
LR R2,R5 n
|
||||
BAL R14,ACKER r1=acker(m,n)
|
||||
XDECO R1,PG+19
|
||||
XDECO R4,XD
|
||||
MVC PG+10(2),XD+10
|
||||
XDECO R5,XD
|
||||
MVC PG+13(2),XD+10
|
||||
XPRNT PG,44 print buffer
|
||||
LA R5,1(R5) n=n+1
|
||||
B LOOPN
|
||||
ELOOPN LA R4,1(R4) m=m+1
|
||||
B LOOPM
|
||||
ELOOPM L R14,SAVER14A restore r14
|
||||
BR R14 return to caller
|
||||
SAVER14A DS F static save r14
|
||||
PG DC CL44'Ackermann(xx,xx) = xxxxxxxxxxxx'
|
||||
XD DS CL12
|
||||
ACKER CNOP 0,4 function r1=acker(r1,r2)
|
||||
LR R3,R1 save argument r1 in r3
|
||||
LR R9,R10 save stackptr (r10) in r9 temp
|
||||
LA R1,STACKLEN amount of storage required
|
||||
GETMAIN RU,LV=(R1) allocate storage for stack
|
||||
USING STACK,R10 make storage addressable
|
||||
LR R10,R1 establish stack addressability
|
||||
ST R14,SAVER14B save previous r14
|
||||
ST R9,SAVER10B save previous r10
|
||||
LR R1,R3 restore saved argument r1
|
||||
START ST R1,M stack m
|
||||
ST R2,N stack n
|
||||
IF1 C R1,=F'0' if m<>0
|
||||
BNE IF2 then goto if2
|
||||
LR R11,R2 n
|
||||
LA R11,1(R11) return n+1
|
||||
B EXIT
|
||||
IF2 C R2,=F'0' else if m<>0
|
||||
BNE IF3 then goto if3
|
||||
BCTR R1,0 m=m-1
|
||||
LA R2,1 n=1
|
||||
BAL R14,ACKER r1=acker(m)
|
||||
LR R11,R1 return acker(m-1,1)
|
||||
B EXIT
|
||||
IF3 BCTR R2,0 n=n-1
|
||||
BAL R14,ACKER r1=acker(m,n-1)
|
||||
LR R2,R1 acker(m,n-1)
|
||||
L R1,M m
|
||||
BCTR R1,0 m=m-1
|
||||
BAL R14,ACKER r1=acker(m-1,acker(m,n-1))
|
||||
LR R11,R1 return acker(m-1,1)
|
||||
EXIT L R14,SAVER14B restore r14
|
||||
L R9,SAVER10B restore r10 temp
|
||||
LA R0,STACKLEN amount of storage to free
|
||||
FREEMAIN A=(R10),LV=(R0) free allocated storage
|
||||
LR R1,R11 value returned
|
||||
LR R10,R9 restore r10
|
||||
BR R14 return to caller
|
||||
LTORG
|
||||
DROP R12 base no longer needed
|
||||
STACK DSECT dynamic area
|
||||
SAVER14B DS F saved r14
|
||||
SAVER10B DS F saved r10
|
||||
M DS F m
|
||||
N DS F n
|
||||
STACKLEN EQU *-STACK
|
||||
YREGS
|
||||
END ACKERMAN
|
||||
Loading…
Add table
Add a link
Reference in a new issue