Mitenhän mahtaa saada aikaan satunnaislukuja assemblyllä ilman mitään lisäkirjastoja?
Keinoja on monia sanoi Pertti kun persekarvoja nyppi.
MASM32sta löytyi tällainen pätkä:
RAND32 PROTO :DWORD InitRand32 PROTO ; random number generator by NaN ; (modified a bit to make it a procedure by Exagone) .data? NaNRand dd ? .code SWAP MACRO M1:REQ, M2:REQ xor M1, M2 xor M2, M1 xor M1, M2 ENDM InitRand32 proc db 0fh,31h shr eax, 2 add eax, 1 mov NaNRand, eax ret InitRand32 endp RAND32 proc base:DWORD ; Random number generator based on the Real time clock ; and the Park, Miller random number algorithm ; ; Coded by NaN for WIN32ASM ; May 5, 2001 ; rev 2. push ecx push edx mov eax, NaNRand mov edx,0 mov ecx, 127773 ;q div ecx ; eax == floor( seed / q) ; edx == remainder SWAP eax, edx push edx mov ecx, 16807 mul ecx ; eax = mul of remainder * a pop edx ; edx == floor of seed/q SWAP eax, edx push edx mov ecx, 2836 mul ecx pop edx ; edx == mull of rem * a ; eax == mull of seed/q * r sub edx, eax mov eax, edx mov NaNRand, eax ; save next seed mov ecx, base mov edx, 0 div ecx mov eax, edx pop edx pop ecx ret RAND32 endp
InitRand32-funktiota voit muokata ellei RDTSC (eli tuo db 0fh,31h) ole käytettävissä (vanha prosessori tms). Kunhan saat "NaNRand"-muuttujaan jonkin seed-arvon niin homma toimii kivasti, DOSissa voit lukea perus-funktioilla aikaa tms. Park, Miller on algona ihan kelpo kamaa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.