Сижу с генераторами ПСЧ8 для Вектор-06Ц.
Написалось три генератора, все 3 - отстой и работают кое-как, но делюсь.
Если у кого-то есть лучше - дайте знать.
Код:; random_xorshift ; вход: E - верхняя граница ; выход: A - псевдослучайное число [0, E] RND8: push h push d lhld SEED ; Загружаем состояние ; XOR-shift алгоритм mov a, h rrc ; Сдвиг вправо mov h, a mov a, l rlc ; Сдвиг влево mov l, a xra h ; XOR между H и L mov h, a shld SEED ; Сохраняем новое состояние mov a, l ; Берем случайное число cmp e ; Ограничиваем диапазоном [0, E] jc RDONE MLX: sub e cmp e jnc MLX RDONE: pop d pop h ret SEED: db 13hКод:; RND Дениса Попова переводим на 8080, вариант №1 ; вход: E - верхняя граница ; выход: A - псевдослучайное число [0, E] RND8: lda SEED mov B,A stc ; rrca 1 cma rar cma stc ; rrca 2 cma rar cma stc ; rrca 3 cma rar cma xri 0x1f ; A=A xor 0x1f add B ; A=A+B sbi 255 ; A=A-255-CY sta SEED cmp E jnc RND8 ; если >= E, генерим по новой ret SEED: db 13h- - - Добавлено - - -Код:; RND Дениса Попова переводим на 8080, вариант №2 ; вход: E - верхняя граница ; выход: A - псевдослучайное число [0, E] RND8: lda SEED mov B,A rar ; rrca 1 jnc RR2 ori 80h RR2: rar ; rrca 2 jnc RR3 ori 80h RR3: rar ; rrca 3 jnc RR4 ori 80h RR4: xri 0x1f add b sbi 255 ; приплыли sta SEED cmp E jnc RND8 ; если >= E, генерим по новой ret SEED: db 13h
Есть ещё инновационный подход.
1) Пишем за минуту программу на питоне
2) Генерируем нужное нам кол-во псевдослучайных чисел в нужном диапазоне
3) Загоняем в таблицу
4) По этой таблице и ходим в своей программе, чтобы не иметь себе мозг. Enjoy
![]()




Ответить с цитированием