| Autor |
Nachricht |
supernicky2
Unregistrierter
|
supernicky2 Unregistrierter
00:26:25 15.01.2012 Titel: |
Zufallszahl |
Zitieren |
Guten Abend,
ich beschäftige mich zur Zeit mit der VGA Karte und deren Programmierung im Modus 12.
Das Zeichnen der Punkte funktioniert schonmal ganz gut. Nun möchte ich zufäll irgendwo auf dem Schirm Punkte zeichnen, was er auch bis zu einer gewissen Anzahl macht. Nach ca. 100 Durchgängen scheint er wohl wieder von vorn anzufangen und es werden nicht mehr Punkte.
Hier mal mein Code dafür:
Im Datenteil:
| Code: | zahl1 dd 11d
zahl2 dd 8711d
zahl3 dd 9111d | |
Im Codeteil:
| Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | zufallszahl proc
mov eax, zahl1
mov ebx, zahl2
mul ebx
mov zahl2, eax
mov eax, zahl1
mov ebx, zahl3
mul ebx
mov zahl3, eax
ret
zufallszahl endp | |
Zahl1 wird mit zahl2 multipliziert und das Ergebnis zurück nach Zahl2 geschrieben. Genauso mit zahl3.
Bevor ich den Punkt setze, hole ich mir über die AND Verknüpfung nur die letzten 9 Bit von zahl2 und die letzten 8 Bit von Zahl3.
Gibt es für Zufallszahlen noch eine effektivere Lösung oder habe ich keine guten Ausgangswerte dafür?
Gruß |
|
|
|
 |
abc.w
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.04.2008
Beiträge: 1366
|
abc.w Mitglied
03:16:39 15.01.2012 Titel: |
|
Zitieren |
Neuere CPUs sollen den neunen Befehl rdrand unterstützen, habe ich neulich in der aktuellen "Instruction Set Reference" von Intel gesehen. Vielleicht hast Du so eine CPU und kannst Dir die Mühe sparen.
Ansonsten ist das Thema recht komplex. In der c't 2009 Heft 2 gab es mal einen schönen Artikel über Zufallszahlen-Generatoren. Wichtig ist, dass man seinen Generator testet und es gibt viele statistische Tests, um die Zahlenfolge auf Zufälligkeit zu testen. Wer mag schon Statistik... |
_________________ E = int * char^2
|
|
 |
supernicky2
Unregistrierter
|
supernicky2 Unregistrierter
14:37:12 15.01.2012 Titel: |
gelöst: Zufallszahl + neue Frage |
Zitieren |
Der Weg von mir war schon ganz gut. Habe das Programm mehrmals nacheinander in Virtual PC gestartet und dann lief es.
Ich habe noch eine kleine Frage:
Der Bildspeicher wird mehrmals pro Sekunde von der GraKa ausgelesen.
Schreibe ich ein Byte in den Speicher ab 0A00h:0000h überträge die Karte es in alle 4 Latch Register und somit in die Bitplanes des Grafikspeichers.
Wenn ich nun ein Byte aus dem Speicher lese schreibt er auch alle 4 Byte aus den Bitplanes in die Latchregister... aber woher weiß die GraKa welches Byte ich gelesen habe?
Gruß |
|
|
|
 |
abc.w
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.04.2008
Beiträge: 1366
|
abc.w Mitglied
14:43:25 15.01.2012 Titel: |
Re: gelöst: Zufallszahl + neue Frage |
Zitieren |
| supernicky2 schrieb: | | Habe das Programm mehrmals nacheinander in Virtual PC gestartet und dann lief es. |
dann ist ja alles gut |
_________________ E = int * char^2
|
|
 |
Osbios
Mitglied
Benutzerprofil
Anmeldungsdatum: 12.10.2007
Beiträge: 176
|
Osbios Mitglied
10:52:00 17.01.2012 Titel: |
Re: gelöst: Zufallszahl + neue Frage |
Zitieren |
| supernicky2 schrieb: | Der Weg von mir war schon ganz gut. Habe das Programm mehrmals nacheinander in Virtual PC gestartet und dann lief es.
Ich habe noch eine kleine Frage:
Der Bildspeicher wird mehrmals pro Sekunde von der GraKa ausgelesen.
Schreibe ich ein Byte in den Speicher ab 0A00h:0000h überträge die Karte es in alle 4 Latch Register und somit in die Bitplanes des Grafikspeichers.
Wenn ich nun ein Byte aus dem Speicher lese schreibt er auch alle 4 Byte aus den Bitplanes in die Latchregister... aber woher weiß die GraKa welches Byte ich gelesen habe?
Gruß |
Der Speicherbereich von A0000 bis B0000 ist gemappt. Dh. wenn du darauf schreibst oder liest berührst du nicht den "normalen" Arbeitsspeicher sondern machst so etwas wie beim schreiben/lesen von Ports. Daher bekommt die Hardware auch etwas vom diesem Leseprozess mit bzw. die füttert den Prozessor dann mit Bits und nicht der normale Arbeitsspeicher. |
_________________ if(0=0){if(2&2==2){C--;}}
|
|
 |
abc.w
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.04.2008
Beiträge: 1366
|
abc.w Mitglied
21:25:50 24.03.2012 Titel: |
|
Zitieren |
| abc.w schrieb: | | Neuere CPUs sollen den neunen Befehl rdrand unterstützen... |
Kurze Anmerkung: Die neueren CPUs werden den Befehl rdrand unterstützen. Siehe http://en.wikipedia.org/wiki/RdRand |
_________________ E = int * char^2
|
|
 |
gargyle
Mitglied
Benutzerprofil
Anmeldungsdatum: 03.02.2006
Beiträge: 122
|
gargyle Mitglied
08:05:21 25.03.2012 Titel: |
|
Zitieren |
Wenn ich Zufallszahlen brauche benutze ich Uhrzeit und Datum als Basis.
Eine Userabfrage vorher nacht das ganze noch zufälliger. |
|
|
|
 |
nachtfeuer
Moderator
Benutzerprofil
Anmeldungsdatum: 08.04.2010
Beiträge: 1432
|
nachtfeuer Moderator
18:23:14 25.03.2012 Titel: |
|
Zitieren |
| gargyle schrieb: | Wenn ich Zufallszahlen brauche benutze ich Uhrzeit und Datum als Basis.
Eine Userabfrage vorher nacht das ganze noch zufälliger. |
Mit Datum hast du aber einen ziemlich langsamen bzw. statischen "Algorithmus".
@supernicky
http://www.df.lth.se/~john_e/gems/gem0002.html
Oder man könnte sich zum Auslesen auch eine Daten"rutsche" für seinen Zweck machen( z.B. http://www.linux-magazin. ....... n/2001/08/Viel-hilft-viel) machen, oder für jede Zahlenziffer je zwei unterschiedliche Algos bereitstellen, die unterschiedlich angeflogen werden (hm, aber effektiv??).
Für "effektivere" Algos sind aber auch vor allem größere Zahlen (64bit,FPU,SSE) sinnvoll und/oder eben klassische Anzätze und Algos
( z.B. http://en.wikipedia.org/wiki/Xorshift )
(und statt Multiplikationen eher Additionen und Shifts und so weiter)
Es ist aber auch keine Schande, einen guten Algo aus irgendeiner Bibliothek zu importieren.
Und der Witz ist eigentlich das Austesten, und von Zeit zu Zeit "optimieren". |
_________________ HhxV9rU5D8o236dZF7bMQ4Dys1_TuUmI4mZM.d2qD15ERi_0dgcHP0UViL3e-4WUi0nXXNwDYqA10sLEgjBVtdhE
tpehI7qHRZESiO_7LhPZFMQWNoiVrJDsEGD26n.H0lV8wOwYAe8UsbUJe5m65NyPaghnSoMzROo2gJ6nTeVSkxLk
a6hvNe11r9U7xddV9mq6NEi_V0C9k4augEKVSW3PV8LgCYum7KaXc9Ijq_ZT7zhspI.=-
|
|
 |
gargyle
Mitglied
Benutzerprofil
Anmeldungsdatum: 03.02.2006
Beiträge: 122
|
gargyle Mitglied
19:57:24 25.03.2012 Titel: |
|
Zitieren |
Bei mir hat die Verwendung von Uhrzeit/Datum (+Usereingabe) immer hervoragende Ergebnisse gebracht.
In der Regel brauche ich das ja nur zur Initialisierung (srand) |
|
|
|
 |
nachtfeuer
Moderator
Benutzerprofil
Anmeldungsdatum: 08.04.2010
Beiträge: 1432
|
nachtfeuer Moderator
22:26:05 25.03.2012 Titel: |
|
Zitieren |
| gargyle schrieb: | Bei mir hat die Verwendung von Uhrzeit/Datum (+Usereingabe) immer hervoragende Ergebnisse gebracht.
In der Regel brauche ich das ja nur zur Initialisierung (srand) |
Ja, aber dann fragt man sich, ob normale Zahlen wie 123456789 nicht genausogut sind, und die allein sind ja noch kein Zufallszahlengenerator. |
_________________ HhxV9rU5D8o236dZF7bMQ4Dys1_TuUmI4mZM.d2qD15ERi_0dgcHP0UViL3e-4WUi0nXXNwDYqA10sLEgjBVtdhE
tpehI7qHRZESiO_7LhPZFMQWNoiVrJDsEGD26n.H0lV8wOwYAe8UsbUJe5m65NyPaghnSoMzROo2gJ6nTeVSkxLk
a6hvNe11r9U7xddV9mq6NEi_V0C9k4augEKVSW3PV8LgCYum7KaXc9Ijq_ZT7zhspI.=-
|
|
 |