Random-Funktion unter Assembler

xerses

Mitglied
Hi..
Ich habe kleines Problem. Ich brauche eine Random Funktion, wie man diese z.B. aus Pascal/Delphi her kennt, nur das diese in Assembler geschrieben sein sollte. Ich bin grad am Programmieren einer Seminaraufgabe und diese soll zu 100% aus reinem Assemblercode bestehen. :-(
Wenn ich schon dabei bin, kennt sich jemand mit BMP Dateien aus? Ich würde gern den Inhalt einer solchen Datei binär auslesen und diesen Inhalt in das Assemblerprogramm Hardcodieren. Gibt es evtl. tools dafür?
Kennt sich da evtl. jemand mit aus? Ich wäre dankbar für jede Antwort!

MFG

xerses
 
Hallo,

Ich habe kleines Problem. Ich brauche eine Random Funktion, wie man diese z.B. aus Pascal/Delphi her kennt, nur das diese in Assembler geschrieben sein sollte. Ich bin grad am Programmieren einer Seminaraufgabe und diese soll zu 100% aus reinem Assemblercode bestehen.

es gibt verschiedene Möglichkeiten Zufallszahlen zu generieren, je "zufälliger" dabei die Zahlen sein sollen, desto komplexer ist meist auch der Algorithmus.

Die einfachsten und effizientesten Zufallszahlengeneratoren sind sogenannte "Lineare Kongruenzgeneratoren". Sie arbeiten rekursiv, dass heißt, dass ein Startwert einer Berechnung unterzogen wird. Das Ergebnis ist die Zufallszahl, die gleichzeitig wieder als Wert für die nächste Berechnung der nächsten Zufallszahl dient.

Die Formel lautet:

xn = (a * xn-1 + b) mod m

a, b und m sind natürliche Zahlen und sind bei jeder Berechnung gleich. Von ihnen hängt ab, wie gestreut die Zufallszahlen generiert werden. xn ist die generierte Zufallszahl, die bei der nächsten Berechnung als Grundlage dient (xn-1). Damit der Generator bei jedem Programmlauf andere Zahlen generiert, muss x0 (also der Startwert bei der ersten Berechnung) bei jedem Programmlauf unterschiedlich sein. Meist wird hierfür die Uhrzeit des Rechners benutzt.

Die generierten Zufallszahlen müssen dann noch auf den gewünschten Wertebereich normiert werden, dies geschieht mit einer Modulo-Division. Wenn der Wertebereich also z.B. 0 bis 999 ist, muss noch xn mod 1000 gerechnet werden.

Bei den Konstanten a, b und m ist ein bisschen Probiererei nötig. Allerdings kann man sich auch an die Empfehlungen von Bruce Schneier halten. Er empfiehlt für 32-bit Integer Zahlen die Werte a=7141, b=54773 und m=259200.

Der Nachteil dieser Generatoren ist, dass die Zufallszahlen vorhersehbar sind, was allerdings nur bei bestimmten Anwendungen (z.B. Verschlüsselung) wirklich kritisch ist.

Wenn du dich mehr mit dem Thema beschäftigen willst, kann ich dir das Buch "Angewandte Kryptographie" von Wolfgang Ertel empfehlen. Hier werden auch komplexere und "zufälligere" Generatoren vorgestellt.

Grüße Thomas
 
Hi..
Jo danke für den Formelerstmal, werd ich denn so gleich mal versuchen umzusetzen. Andere Algorithmen brauch ich vorerst nicht, da ich nur ganz kleine Zahlen generieren möchte. Das soll alles nur in einem Bereich von +2 bis -2 und ganzen natürlichen Zahlen ablaufen. Ich hätte nicht gedacht, das mir dazu jemand überhaupt was sagt. ;)
(!) dickes THX.. (!)

mfg

xerses
 

Neue Beiträge

Zurück