| Il numero casuale è generato con l'aiuto di un
algoritmo basato su
somme, moltiplicazioni,
divisioni e spostamenti dei valori di volta in volta
coinvolti nel calcolo, a partire dal numero a 32 bit ottenuto mettendo in
sequenza i 4 bytes corrispondenti al tempo
corrente, nel momento della prima
chiamata, letti dalla memoria CMOS di sistema. |
| L'analisi del codice mette in evidenza il suo sofisticato
modo di operare:
| preleva il numero iniziale (seme)
della procedura leggendo l'orologio di sistema, con l'aiuto della
Funzione DOS 2CH dell'INT
21H; il valore del
tempo corrente è
lasciato dalla funzione nei registri CH (Ore, da 0 a
23), CL
(Minuti, da 0 a 59), DH (Secondi, da 0 a
59) e DL (Centesimi di secondi, da 0 a
99); in pratica questo pezzo di programma implementa la procedura
RANDOMIZE di Turbo Pascal. |
| per la precisione il numero iniziale è la
sequenza dei 4 bytes di
Secondi,
Centesimi di secondo, Ore e
Minuti, dal più significativo
al meno significativo. |
| con un artificio evita di assumere di nuovo il seme per
tutta la sessione di esecuzione del programma |
| va ricordato che non è detto che il secondo bytes esprima con certezza i
Centesimi di Secondo; in taluni ambienti operativi probabilmente esprime
semplicemente un numero da 0 a 17, frutto del conteggio dei
Ticks prodotti in un secondo (ogni 54,925493
ms)
piuttosto che dei centesimi (10ms).
|
| per certi versi questo rende ancora più imprevedibile il numero casuale generato
da questa procedura. |
|