![]() |
|
![]() ![]() ![]() |
|
ЭтоопятьИрина |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 19.8.2006 Репутация: нет Всего: нет |
Подскажите под MASM примерчик, пожалуйста:
Как можно осуществить случайный выбор процедуры (В делфи это randomize) примерно так: a1 proc ... a1 enmdp a2 proc ... a2 endp a3 proc ... a3 endp start: call случайный выбор из a1 .. a3 invoke Exitprocess, 0 Спасибо, Ирина. |
|||
|
||||
Damarus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 671 Регистрация: 6.5.2006 Репутация: нет Всего: 29 |
||||
|
||||
sgi1981 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 16.3.2006 Репутация: 2 Всего: 10 |
Тебе надо искать готовый или написать собственный генератор псевдослучайных чисел в виде функции. Причем такой, которая в качестве одного параметра принимает максимально возможное псевдослучайное число, а минимально возможное - 0.
Составить массив адресов случайно вызываемых подпрограмм, занести туда в элементы адреса точек входа в коды подпрограмм. Вызывать функцию генер. псевдослучайные числа с параметром {колич. элементов массива адресов - 1}. Причем дополнительно необходимо инициализировать генератор чисел и лучше всего значением от таймера компьютера или еще лучше от системных часов. -------------------- Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства. |
|||
|
||||
ЭтоопятьИрина |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 19.8.2006 Репутация: нет Всего: нет |
блин...
Добавлено @ 19:54 А почему не ноль а -1 ? Чтобы не вылезти за границы массива? |
|||
|
||||
Damarus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 671 Регистрация: 6.5.2006 Репутация: нет Всего: 29 |
||||
|
||||
ЭтоопятьИрина |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 19.8.2006 Репутация: нет Всего: нет |
Блин, вот рабочий код где-то откопала.
Но куда мне вставить else ? Не могу вообще тут понять... Кто-нибудь - добавте тут хотя бы основные комментарии, чтобы прояснить, что тут такое. и как его модернизировать мне? Я могу пока ещё только только с АПИ... Чистый асм для меня тяжело даётся... Помогите... .386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib .data random_seed dd ? res dd 0 sFmt db '%u',0DH,0AH,0 sBuf db 10 dup(0) .code Random proc dwBase:dword push ebx mov eax,dwBase xor ebx,ebx imul edx,random_seed,08088405h inc edx mov random_seed,edx mul edx mov eax,edx pop ebx ret Random endp Randomize proc invoke GetTickCount mov random_seed,eax ret Randomize endp start: invoke Randomize invoke Random,56 mov res,EAX invoke wsprintf,ADDR sBuf,ADDR sFmt,res ; или можно юзать макросы dwtoa,str$,etc invoke MessageBox,0,ADDR sBuf,0,0 invoke ExitProcess,0 end start |
|||
|
||||
sgi1981 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 16.3.2006 Репутация: 2 Всего: 10 |
Это сообщение отредактировал(а) sgi1981 - 10.9.2006, 03:08 -------------------- Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства. |
|||
|
||||
ЭтоопятьИрина |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 19.8.2006 Репутация: нет Всего: нет |
Спасибо, дорогой Сквай. ты уж очень подробно изложил...
Кое-что я и сама знаю - например end start: это я знаю... :-) Вообще здорово ты всё это знаешь - молодец. Можно мне к тебе если что за советом обращаться лично? |
|||
|
||||
sgi1981 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 16.3.2006 Репутация: 2 Всего: 10 |
Всегда рад.
Да. Меня звать Сахаров Григорий Иванович. E-mail [email protected] ICQ 194-333-217 Сайт http://sgi.bigtruck-canada.ca/ С удовольствием... Это сообщение отредактировал(а) sgi1981 - 10.9.2006, 07:12 -------------------- Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства. |
||||
|
|||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
||||
|
||||
mur |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 11.9.2006 Репутация: нет Всего: нет |
Код который ты нашла изрядно захламлён в нём ebx зачем-то сохраняется, обнуляется и ... не используется
А лучше так (один из вариантов):
Это сообщение отредактировал(а) mur - 12.9.2006, 07:55 |
|||
|
||||
sgi1981 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 16.3.2006 Репутация: 2 Всего: 10 |
to mur: Не буду спорить, насколько корреляция меньше будет у псевдослучайных чисел в вашем случае, но инструкция div ebx выполняться может в среднем за 15 тактов АЛУ. Избегать div там где это возможно. -------------------- Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства. |
|||
|
||||
mur |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 11.9.2006 Репутация: нет Всего: нет |
На счёт div согласен, внёс поправку !!!
А на счёт корелляции:
у Вас рассмотрен другой частный случай 08088405h и 1 По хорошему корелляцию нужно каждый раз тестировать, но приятно, что на одном движке можно строить целую кучу разных генераторов! |
|||
|
||||
ЭтоопятьИрина |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 19.8.2006 Репутация: нет Всего: нет |
Спасибо, Сквай, за помощь.
Написала тебе личное письмо. |
|||
|
||||
mur |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 11.9.2006 Репутация: нет Всего: нет |
Ответы на многие вопросы найдёшь в книге Зубкова, в частности раздел 5.7.1 про генераторы случайных чисел
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Asm для начинающих" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm для начинающих | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |