38 lines
1.5 KiB
Text
38 lines
1.5 KiB
Text
* Linear congruential generator 07/03/2017
|
|
LINCONG CSECT
|
|
USING LINCONG,R12
|
|
LR R12,R15 set base register
|
|
BEGIN SR R5,R5 bsdseed=0
|
|
SR R7,R7 msseed=0
|
|
LA R8,1 i=1
|
|
L R9,=F'10' number of loop
|
|
LOOP M R4,=F'1103515245' bsdseed*=1103515245
|
|
A R5,=F'12345' bsdseed+=12345
|
|
LR R3,R5 bsdrand=bsdseed
|
|
LTR R5,R5 if bsdseed<0
|
|
BP CONT then
|
|
L R3,COMP2 -2**31
|
|
SR R3,R5 -bsdseed
|
|
LPR R3,R3 bsdrand=abs(-2**31-bsdseed)
|
|
CONT M R6,=F'214013' msseed*=214013
|
|
A R7,=F'2531011' msseed+=2531011
|
|
XR R6,R6
|
|
D R6,TWO16 /2**16
|
|
XDECO R8,XDEC i
|
|
MVC PG(4),XDEC+8
|
|
XDECO R3,XDEC bsdrand
|
|
MVC PG+4(12),XDEC
|
|
XDECO R7,XDEC msseed
|
|
MVC PG+16(7),XDEC+5
|
|
XPRNT PG,L'PG print buffer
|
|
LA R8,1(R8) i=i+1
|
|
BCT R9,LOOP loop
|
|
RETURN XR R15,R15 set return code
|
|
BR R14 return to caller
|
|
DS 0F alignment
|
|
TWO16 DC XL4'00010000' 2**16
|
|
COMP2 DC XL4'80000000' -2**31
|
|
PG DC CL80' '
|
|
XDEC DS CL12
|
|
YREGS
|
|
END LINCONG
|