Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: Assembler ::  Zufallszahl  
Gehen Sie zu Seite 1, 2  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
supernicky2
Unregistrierter




Beitrag 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
Beitrag 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




Beitrag 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
Beitrag 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: 174
Beitrag 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
Beitrag 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
Beitrag 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
Beitrag 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
Beitrag 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
Beitrag 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.=-
c++.de :: Assembler ::  Zufallszahl  
Gehen Sie zu Seite 1, 2  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.