#include<stdio.h>
typedef unsigned int uint;
uint seed = 2037280626;
const uint park1 = 127773;
const uint park2 = 16807;
const uint park3 = 2836;
/*
random PROC base:DWORD ; Park Miller random number algorithm
mov eax, seed ; from M32lib/nrand.asm
xor edx, edx
mov ecx, 127773
div ecx
mov ecx, eax
mov eax, 16807
mul edx
mov edx, ecx
mov ecx, eax
mov eax, 2836
mul edx
sub ecx, eax
xor edx, edx
mov eax, ecx
mov seed, ecx
div base
mov eax, edx
ret
random ENDP
*/
uint random(uint base)
{
uint a,b;
uint r;
a = seed % park1 * park2;
b = seed / park1 * park3;
a -= b;
seed = a;
r = a % base;
return r;
}
uint asmrandom(uint base)
{
__asm{
mov eax, seed
xor edx, edx
mov ecx, park1
div ecx
mov ecx, eax
mov eax, park2
mul edx
mov edx, ecx
mov ecx, eax
mov eax, park3
mul edx
sub ecx, eax
xor edx, edx
mov eax, ecx
mov seed, ecx
div base
mov eax, edx
}
}
int main()
{
int i;
for(i=0;i<150;i++){
if(i%10==0)
puts("");
printf("%4d",asmrandom(100));
}
puts("");
seed = 2037280626;
for(i=0;i<150;i++){
if(i%10==0)
puts("");
printf("%4d",random(100));
}
puts("");
return 0;
}