Suche: Zufallsroutine für 8086

  • Hallo,


    da mich das Thema Weihnachtswichteln beschäftigt, und ich das Video dazu auch interessant finde (denn erstaunlicherweise besteht die Wahrscheinlichkeit, dass mind. 1 Teilnehmer sich selbst bewichtelt, bei 63%), habe ich ein 8086-Assembler-Programm geschrieben. Das Problem der fehlenden Zufälligkeit habe ich dabei erstmal ausgelassen, denn das scheint doch länger zu dauern. Stattdessen werden die Paarungen durch Tastendruck ermittelt, was aufgrund der hohen Geschwindigkeit ausreichend zufällig sein sollte.


    Dennoch hätte ich gerne eine brauchbare Zufallsroutine, um den "Zufall" auch programmgesteuert ablaufen zu lassen. Hat zufällig jemand eine akzeptable Routine für 8086-Assembler oder einen Link zu passendem Code ?

  • Du kannst via "INT 1A" Dir die Systemzeit ins Register CX:DX holen, und machst danach mit Hilfe eines SEED-Werts eine MODULO Kalkulation.

    Also so in etwa:

    "Ich habe keine Zeit mich zu beeilen." (Igor Strawinsky)


    ... und schaut auch mal bei meinem Blog vorbei ...

  • Da die Routine Zufallsziffern zwischen 0 und 9 liefert, wollte ich den Bereich variabilisieren. Dabei kam Überraschendes zu Tage.


    Ein Test mit 2.000 Ziffern lieferte, wie zu erwarten, ziemlich unterschiedliche Ziffernfolgen (Bild 1).

    Eine Zählroutine mit je 60.000 Aufrufen zeigte auch eine passable Gleichverteilung der Ziffern (Bild 2).

    Doch ein Test von Un -/Gerade, was mir als erster Ansatzpunkt zur Variabilisierung des Bereichs einfiel, zeigte einen konsequenten Wechsel von Ungerade und Gerade (Bild 3). Bei genauerer Betrachtung der Zufallsziffernfolgen sticht das dann auch ins Auge.




  • Na dass die Routine nicht wirklich zufällige Werte auf einen großen Zahlenraum bietet, war eigentlich schon vorher klar. Du kannst für bessere Zufälligkeit auch bestimmte Register von Grafikkarten nehmen, aber wirklich bessere Werte kriegst Du nur mit größeren Zahlen (also nicht 32 Bit Werte wie von dem Timer) hin, die Du Modulo (Nachkommastellen sozusagen) nach einer arithmetische Operation betrachtest.

    Besser wären auf jeden Fall auch Seed-Werte, die durch Mausbewegungen des Benutzers bspw. ermittelst.

    "Ich habe keine Zeit mich zu beeilen." (Igor Strawinsky)


    ... und schaut auch mal bei meinem Blog vorbei ...