Hallo,
ich habe mir gerade die Random-Funktion einmal näher angeschaut und mir sind 2 Fragen in den Sinn gekommen.
Wieso wird EBX auf Null gesetzt, und dann versucht den Speicher von [EBX+@RandSeed] zu lesen? Das XOR ist doch hier vollkommen überflüssig (Bzw. EBX).
Random funktion aus der System.pas:
Delphi-Quellcode:
function Random(
const ARange: Integer): Integer;
asm
PUSH EBX
XOR EBX, EBX
//<<<<<<
IMUL EDX,[EBX].RandSeed,08088405H
INC EDX
MOV [EBX].RandSeed,EDX
MUL EDX
MOV EAX,EDX
POP EBX
end;
Meine übersetzte Funktion gibt andere Werte zurück als die Funktion aus der System.pas. Ich könnte mir Vorstellen, dass es an dem mod liegt. Aber was anderes macht hier doch keinen Sinn, oder?
MUL EDX //EAX := EAX * EDX und EDX = ?
Meine Übersetzung:
Delphi-Quellcode:
function MyRandom2(const ARange: Cardinal): Cardinal;
begin
result := Cardinal(RandSeed * $08088405 + 1) mod aRange;
RandSeed := result;
end;
Gruß,
Win32