#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; }