Простой рандомайзер - Assembler

Узнай цену своей работы

Формулировка задачи:

Уважаемые, доброго времени суток! Мне понадобилась реализация генератора псевдослучайных чисел от 0 до 8. Я придумал следующее:
invoke GetTickCount
.WHILE eax>8
    shr eax, 1
.ENDW
Проведя несколько экспериментов, я заметил, что программе требуется много итераций, прежде чем в еах окажется число от 0 до 8. Буду признателен всем, кто поможет придумать более изящный рандомайзер. Всем заранее спасибо.

Решение задачи: «Простой рандомайзер»

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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5