Ich muss die Beschreibung des MOV Befehls korrigieren (ist schon 'ne Weile her mit
ASM): Die Richtung ist anders herum
Delphi-Quellcode:
asm
PUSH EAX
{Parameter 1 = Range auf Stack sichern}
CALL genrand_MT19937
{Random Longint aufrufen, Ergebnis steht in EAX (keine Parameter)}
POP EDX
{Range vom Stack in EDX holen}
MUL EDX
{EAX mit EDX multiplizieren, Ergebnis steht in EDX,EAX }
MOV EAX,EDX
{Die höheren 32-Bits in EDX als result in EAX zurückgeben }
end;
Der Delphi-Code sähe dann so aus:
Delphi-Quellcode:
Result := Int64Rec(Int64(Range) * genrand_MT19937).Hi;