Thema: Delphi Random() in PurePascal

Einzelnen Beitrag anzeigen

Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#1

Random() in PurePascal

  Alt 15. Mai 2009, 13:12
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
  Mit Zitat antworten Zitat