Простой рандомайзер - Assembler
Формулировка задачи:
Уважаемые, доброго времени суток! Мне понадобилась реализация генератора псевдослучайных чисел от 0 до 8. Я придумал следующее:
Проведя несколько экспериментов, я заметил, что программе требуется много итераций, прежде чем в еах окажется число от 0 до 8. Буду признателен всем, кто поможет придумать более изящный рандомайзер.
Всем заранее спасибо.
invoke GetTickCount .WHILE eax>8 shr eax, 1 .ENDW
Решение задачи: «Простой рандомайзер»
textual
Листинг программы
rand dd 125 ;начальное значение случайной величины ... ;ф-я мультипликативного генератора. Алгоритм взят из функции rand библиотеки си rnd proc push ecx ;сохранить регистры push edx mov eax,rand ;взять r(i) значение на предыдущем шаге mov ecx,15a4e53h ;коэффициент а mul ecx ;r(i)*a inc eax ;r(i)*a+1 mov rand,eax ;сохранить новое значение mov ax,word ptr rand+2 ;взять старшую часть произведения and ax,7fffh ;ограничить диапазон числа pop edx ;восстановить регистры pop ecx ret rnd endp
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д