RosettaCodeData/Task/Linear-congruential-generator/360-Assembly/linear-congruential-generator.360
2017-09-25 22:28:19 +02:00

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