Delphi-PRAXiS
Seite 13 von 14   « Erste     3111213 14      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Random ist kein reiner Zufall (https://www.delphipraxis.net/89462-random-ist-kein-reiner-zufall.html)

Der_Unwissende 3. Apr 2007 18:47

Re: Random ist kein reiner Zufall
 
Zitat:

Zitat von dino
"Der Zieloperand ist sowohl beim mul wie beim imul Befehl immer das AL oder AX Register."

EAX = 32 Bit
AX = 16 Bit
AL = 8 Bit

Das sind nur 3 Bezeichner für das gleiche Register (mehr oder weniger). EAX wäre auf 32-Bit CPUs das volle 32 bittige Register, AX ist ein Teil dieses Registers (die unteren 16 Bit), AL wiederum ist ein Teil des AL-Registers (die unteren 8 Bit). AX würde sich aus AH und AL zusammensetzen.
Für aktuelle 32-Bitter sollte es also EAX sein

Christian Seehase 3. Apr 2007 18:52

Re: Random ist kein reiner Zufall
 
Moin Dino,

Zitat:

Zitat von dino
und um die Frage zu beantworten gucke ich mir nun an, wie Random programmiert ist

womit sich, IMHO, in diesem Thread kein Assembler Grundkurs rechtfertigt.

dino 3. Apr 2007 18:54

Re: Random ist kein reiner Zufall
 
random ist doch in assembler sprache geschrieben

den assembler grundkurs von hier habe ich mir bereits durchgelesen und ich wollte nurnoch hinausgehende sachen fragen, de aus dem kurs nciht hervorgingen

dino 4. Apr 2007 09:00

Re: Random ist kein reiner Zufall
 
könnte jemand noch den restlichen code posten?

ich weiss ja nciht, was das ist aber Random ist das nicht
und Randomize auch nicht

Cöster 4. Apr 2007 14:05

Re: Random ist kein reiner Zufall
 
Zitat:

Zitat von dino
könnte jemand noch den restlichen code posten?

ich weiss ja nciht, was das ist aber Random ist das nicht
und Randomize auch nicht

Selbstverständlich ist das Random. Wieso sollte es das nicht sein? Und wenn du es nicht glaubst, ich kann mich ein drittes Mal wiederholen, wechsel beim Debuggen einfach mal ins CPU-Fenster, dann siehst du den Code selbst.
Was in Randomize passiert, wurde hier jetzt auch schon n paar mal gesagt.

dino 4. Apr 2007 14:40

Re: Random ist kein reiner Zufall
 
oh tschuldige, so wollte ich das net gesagt haben

ich meinte
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;
ist nur random(3) z.b. oder?

finde ich im debugger auch den code für randomize?

Cöster 4. Apr 2007 15:43

Re: Random ist kein reiner Zufall
 
Zitat:

Zitat von dino
ist nur random(3) z.b. oder?

Hm? Also es ist die Funktion
Delphi-Quellcode:
function Random(const ARange: Integer): Integer;
, also auch z.B. Random(4). Die Funktion unterscheidet sich aber natürlich leicht von
Delphi-Quellcode:
function Random: Extended;
, falls du die meinst.

Zitat:

Zitat von dino
finde ich im debugger auch den code für randomize?

Ja, allerdings nur in ASM. Um seine Implementierung in Delphi-Language anzugucken, kannst du dir hier den Turbo Exlorer (kostenlos) runterladen, da ist das alles drin enthalten. Soweit ich weiß ist es aber illegal, Delphis Implementierungen zu veröffentlichen (was ich nicht verstehen kann, weil sie sich ja eh jeder angucken kann. Also korrigiert mich, wenn ich falsch liege), weswegen ich Randomize hier nicht schon längst gepostet habe.

dino 4. Apr 2007 15:53

Re: Random ist kein reiner Zufall
 
joa ASM komme ich ja nun ein bisschen mit klar

also Randseed wird durch die Funktion richtig geliefert, doch kriege ich hier kein ergebnis raus

und das mit dem code angucken hab ich noch nciht rausgekriegt(hab auf F9 gedrückt und dann auf Strg+Alt+C richtig?)

Cöster 4. Apr 2007 16:11

Re: Random ist kein reiner Zufall
 
Zitat:

Zitat von dino
joa ASM komme ich ja nun ein bisschen mit klar

Gut, aber Randomize ist in Delphi Language (eine If-Abfrage und die Zuweisung von RandSeed) deutlich leichter zu verstehen als in ASM.

Zitat:

Zitat von dino
und das mit dem code angucken hab ich noch nciht rausgekriegt

Ok, also:
  • Neues Projekt
  • Randomize ins FormCreate schreiben
  • Haltepunkt bei Randomize setzen (auf den linken Rand des Quelltext-Editors klicken, sodass die Zeile rot markiert wird)
  • F9
  • Strg+Alt+C (jetzt ist das CPU-Fenster geöffnet. Die aktuelle Codezeile (call Randomize) ist markiert)
  • F7 um eine Anweisung weiter zu springen (in das aufgerufene Randomize). Hier siehst du Randomize in Assembler-Form

Mit F7 kannst du dann die Zeilen einzeln durchgehen und dabei den Stack, die Register und die Flags beobachten (rechts). Das könnte bei der Analyse von Random sehr hilfreich sein.

dino 4. Apr 2007 16:31

Re: Random ist kein reiner Zufall
 
joa habs nun(obwohl Random bei mir wesentlich kleiner ausfällt, aber das Ergebnis bleibt das selbe)

ich bin nun auf der Suche nach result


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:12 Uhr.
Seite 13 von 14   « Erste     3111213 14      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz