Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%;
- ; Интервал: [0..eax-1] ;
- ;------------------------------------------------------------------------------;
- ; Использование: call r_init ;
- ; mov eax,ГРАНИЦА ИНТЕРВАЛА ;
- ; call brandom32 ;
- ;------------------------------------------------------------------------------;
- ; Результат: число в интервале [0..ГРАНИЦА ИНТЕРВАЛА] ;
- ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%;
- ;----[Подпрограмма инициализации генератора случайных чисел]-------------------;
- r_init:
- push ebp eax edx ; Сохраняем в стэке ebp,
- ; eax, edx
- call __delta1_ ;
- __delta1_: pop ebp ; Получение дельта смещения
- sub ebp,offset __delta1_ ;
- db 0fh,031h ; Получаем случайное зерно
- mov rand_seed,eax ;
- pop edx eax ebp ; Восстанавливаем edx,
- ; eax, ebp
- ret ; Возврат из подпрограммы
- ;----[Подпрограмма генерации случаного чмсла в диапазоне]----------------------;
- brandom32: ; Эта подпрограмма
- ; возвращает случайное число
- ; в диапазоне 0..eax-1
- push edx ecx ebp ; Сохраняем в стэке edx,
- ; ecx, ebp
- call __delta2_ ;
- __delta2_: pop ebp ; Получение дельта смещения
- sub ebp,offset __delta2_ ;
- imul eax,eax,100 ; Умножаем eax на 100
- push eax ; и сохраняем eax в стэке
- call random32 ; Вызываем подпрограмму
- ; генерации случайного числа
- xor edx,edx ; Обнуляем edx
- pop ecx ; Восстанавливаем значение
- ; из стэка в ecx
- div ecx ; Делим eax на ecx
- xchg eax,edx ; Помещаем остаток в eax
- xor edx,edx ; Обнуляем edx
- push 100 ; Помещаем в ecx - 100
- pop ecx ;
- div ecx ; Делим eax на ecx
- pop ebp ecx edx ; Восстанавливаем ebp, ecx,
- ; edx
- ret ; Возврат из подпрограммы
- ;----[Подпрограмма генерации случайного числа]---------------------------------;
- random32:
- push ebp
- call
- __delta3_ ;
- __delta3_: pop ebp ; Получение дельта смещения
- sub ebp,offset __delta3_ ;
- mov eax,12345678h ;
- rand_seed= dword ptr $-4 ;
- imul eax,00019660Dh ;
- add eax,03C6EF35Fh ; Математические операции
- mov [ebp+rand_seed],eax ; для получения случайного
- shr eax,16 ; числа
- imul eax,[esp+4] ;
- pop ebp
- retn ; Возврат из подпрограммы
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement