![]() |
Re: Random ist kein reiner Zufall
Zitat:
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 |
Re: Random ist kein reiner Zufall
Moin Dino,
Zitat:
|
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 |
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 |
Re: Random ist kein reiner Zufall
Zitat:
Was in Randomize passiert, wurde hier jetzt auch schon n paar mal gesagt. |
Re: Random ist kein reiner Zufall
oh tschuldige, so wollte ich das net gesagt haben
ich meinte
Delphi-Quellcode:
ist nur random(3) z.b. oder?
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; finde ich im debugger auch den code für randomize? |
Re: Random ist kein reiner Zufall
Zitat:
Delphi-Quellcode:
, also auch z.B. Random(4). Die Funktion unterscheidet sich aber natürlich leicht von
function Random(const ARange: Integer): Integer;
Delphi-Quellcode:
, falls du die meinst.
function Random: Extended;
Zitat:
|
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?) |
Re: Random ist kein reiner Zufall
Zitat:
Zitat:
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. |
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 |
Re: Random ist kein reiner Zufall
Zitat:
Zitat:
|
Re: Random ist kein reiner Zufall
ja eigentlich meine ich das, aber da kommt bei mir immer 0 raus
|
Re: Random ist kein reiner Zufall
Also zunächst mal: Bei MUL EDX wird ja EAX mit EDX multipliziert. Das Ergebnis einer Multiplikation zweier 32Bit-Zahlen kann allerdings bis zu 64Bit beanspruchen. Deswegen wird das Ergebnis ins Registerpaar EDX:EAX geschrieben. Die 32 höherwertigen Bits stehen dabei in EDX.
Ursache dafür, dass das Result bei dir 0 ist, könnte sein: Der Parameter ist 1 :lol:, es ist Zufall (:wink:) oder du rufst Randomize nicht auf. Denn wenn Randomize nirgendwo im Programm aufgerufen wird, ist RandSeed ja beim ersten Random-Aufruf 0. Nach folgenden 3 Zeilen ist RandSeed dann 1:
Code:
Dann wird EDX (=1) mit EAX (=Parameter, Größe: 32Bit) multipliziert. Das Ergebnis ist also EAX. Da die 32 niedrigwertigen Bits des Ergebnisses in EAX geschrieben werden, bleibt EAX unverändert (=Parameter) und EDX wird genullt.
imul edx,[RandSeed],$0808804 // EDX := RandSeed(=0)*Konstante => EDX=0
inc edx // => EDX=1 mov [RandSeed],edx // => RandSeed = 1 Am Ende wird EDX (=0) dann in EAX kopiert und zurückgegeben. Deswegen ist die erste erzeugte Zufallszahl immer null, wenn Randomize nicht aufgerufen wurde. |
Re: Random ist kein reiner Zufall
gehts auch mit Randomize?
schliesslich muss Random(3) ja seinen wert haben |
Re: Random ist kein reiner Zufall
Zitat:
|
Re: Random ist kein reiner Zufall
Nachfolgend mal ein Beitrag aus google Groups
Das sollte dann wohl alle fragen beantworten. Zitat:
hier die Quelle ![]() Noch etwas in Delphi kann auf mod 2^32 verzichtet werden da Variablen einfach überlaufen. |
Re: Random ist kein reiner Zufall
der spricht da nirgendswo von mod 3 (oder meinst du mod3^32?)
|
Re: Random ist kein reiner Zufall
naja jedenfalls habe ich mit sachen wie Random := (n*Seed) div 2^32 { Wert aus {0,...,n-1} herrumgespielt doch habs immernoch nicht raus(wie gesagt: den neuen randseed kriege ich schon nur result nicht)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:31 Uhr. |
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