ГЕНЕРАТОРЫ ПСЕВДОСЛУЧАЙНЫХ ПОСЛЕДОВАТЕЛЬНОСТЕЙ © Колотов Сергей, г. Шадринск 1996.
В ZX РЕВЮ 95/6 я с огромным интересом прочитал статью "Быстродействующий генератор псевдослучайных чисел". Получение случайных (точнее псевдослучайных) чисел на компьютере - довольно увлекательная задачка. Примеры её решения неоднократно публиковались и раньше.
Метод, предложенный Сергеем Астровым довольно-таки интересен и поучителен, но с новым алгоритмом появились и новые ограничения в использовании (невозможность получения нулевого значения, периодичность). Напоминаю, по алгоритму в регистре сдвига HL ксорятся биты, отмеченные на схеме, затем регистр сдвигается от младших номеров битов к старшим, а в
нулевой бит записывается результат ксорки.
Н L
![]()
Чтобы "перексорить" эти биты, достаточно "вращать" аккумулятор влево командой RLCA (в сторону возрастания номеров битов), выполняя команду XOR в нужный момент (один раз с регистром L и три раза с регистром H). Неважно, что портятся остальные биты аккумулятора, ведь нас интересует только один. Последней командой RLCA нужный нам бит попадает в флаг переноса и затем командой ADC HL,HL попадет в нулевой бит регистровой пары HL после ее сдвига влево.
Новая процедура занимает всего 25 байт. Ее листинг:
RND 31
Читатель - читателю - генераторы псевдослучайных последовательностей.
HL,(SEED) A, H L
NZ,NOZERO L
A, L H
LD
LD
OR
JR
INC
LD
RLCA XOR
NOZERO
RLCA
RLCA
XOR
RLCA
XOR
RLCA
ADC
LD
RET
DEFW