Delphi-Quellcode:
procedure _RandInt;
asm
{ ->EAX Range }
{ <-EAX Result }
PUSH EBX
{$IFDEF PIC}
PUSH EAX
CALL GetGOT
MOV EBX,EAX
POP EAX
MOV ECX,[EBX].OFFSET RandSeed
IMUL EDX,[ECX],08088405H
INC EDX
MOV [ECX],EDX
{$ELSE}
XOR EBX, EBX
IMUL EDX,[EBX].RandSeed,08088405H
INC EDX
MOV [EBX].RandSeed,EDX
{$ENDIF}
MUL EDX
MOV EAX,EDX
POP EBX
end;
procedure _RandExt;
const two2neg32: double = ((1.0/$10000) / $10000);
// 2^-32
asm
{ FUNCTION _RandExt: Extended; }
PUSH EBX
{$IFDEF PIC}
CALL GetGOT
MOV EBX,EAX
MOV ECX,[EBX].OFFSET RandSeed
IMUL EDX,[ECX],08088405H
INC EDX
MOV [ECX],EDX
{$ELSE}
XOR EBX, EBX
IMUL EDX,[EBX].RandSeed,08088405H
INC EDX
MOV [EBX].RandSeed,EDX
{$ENDIF}
FLD [EBX].two2neg32
PUSH 0
PUSH EDX
FILD qword ptr [ESP]
ADD ESP,8
FMULP ST(1), ST(0)
POP EBX
end;
ACH KLAR !! jetz wo dus sagst
aber danke schonmal für die erläuterung, hätt ich nich gedacht ..
@ Sharky .. naja, das sie nich 100 % zufall sind war relativ klar, aber ich hätt nich erwartet das sie von so nem unsicheren faktor wie systemzeit abhängen, zumindest nimmer heutzutage ..