
Быстрый поиск
Введите фрагмент названия статьи для поиска

Генератор случайных чисел на Ассемблере
03.09.2008 | Категория: Образ мышления: Assembler | Автор: ManHunter
При написании программ часто возникает необходимость получить последовательность случайных чисел. В языках высокого уровня существуют штатные функции, а для Ассемблера я использую так называемый "Минимальный генератор Парка-Миллера" (Minimal portable random generator by Park and Miller). От аналогичных алгоритмов его отличает очень малый размер и равномерное распределение получаемых случайных чисел. Математическую модель и описание работы алгоритма можно без труда найти в интернете, поэтому эту информацию я здесь не привожу.Code (Assembler) : Убрать нумерацию
- ;---------------------------------------------
- ; Park Miller random number algorithm
- ; Получить случайное число 0 ... 99999
- ; stdcall WRandom
- ; на выходе EAX - случайное число
- ;---------------------------------------------
- proc WRandom
- push edx ecx
- mov eax,[random_seed]
- xor edx,edx
- mov ecx,127773
- div ecx
- mov ecx,eax
- mov eax,16807
- mul edx
- mov edx,ecx
- mov ecx,eax
- mov eax,2836
- mul edx
- sub ecx,eax
- xor edx,edx
- mov eax,ecx
- mov [random_seed],ecx
- mov ecx,100000
- div ecx
- mov eax,edx
- pop ecx edx
- ret
- endp
- ;---------------------------------------------
- ; Получить случайное число в нужном интервале
- ; Требуется процедура WRandom
- ; stdcall WIRandom,min,max
- ; на выходе EAX - случайное число
- ;---------------------------------------------
- proc WIRandom rmin:dword,rmax:dword
- push edx ecx
- mov ecx,[rmax]
- sub ecx,[rmin]
- inc ecx
- stdcall WRandom
- xor edx,edx
- div ecx
- mov eax,edx
- add eax,[rmin]
- pop ecx edx
- ret
- endp
- ;---------------------------------------------
- ; Инициализация генератора случайных чисел
- ; stdcall WRandomInit
- ;---------------------------------------------
- proc WRandomInit
- push eax edx
- rdtsc
- xor eax,edx
- mov [random_seed],eax
- pop edx eax
- ret
- endp
Читать статью целиком »
Просмотров: 31498 | Комментариев: 7

Нестандартный способ определения браузера Internet Explorer
02.09.2008 | Категория: Web-мастеру и не только | Автор: ManHunter
Начиная с версии 1.2 в языке JavaScript есть интересный метод работы с функциями - arguments.callee. Откроем почитать документацию.
arguments.callee
Специфицирует тело исполняемой в данный момент функции. Свойство callee доступно только в теле функции. Ключевое слово this не относится к исполняемой в данный момент функции. Используйте свойство callee для обращения к функции в теле этой функции.
Проще говоря, результатом выполнения arguments.callee внутри какой-нибудь функции будет тело этой функции. Для наглядного примера код:
Code (JavaScript) : Убрать нумерацию
- function myFunc() {
- return arguments.callee;
- }
- alert(myFunc());

Результат arguments.callee
то есть в точности код вызванной функции. "Ага!" - подумали суровые уральские мужики. - "А если мы поместим в тело функции что-нибудь еще, например
Читать статью целиком »
Просмотров: 6581 | Комментариев: 5

Новость номер 1
01.09.2008 | Категория: Всякая всячина | Автор: ManHunter

Моя территория. Мои правила
Все должно с чего-то начинаться. Этой новостью открывается личный блог ManHunter'а. Мне кажется символичным, что блог открывается именно 1 сентября в День Знаний, ведь я планирую через него поделиться с вами различной полезной информацией. Что из этого получится не знаю даже я сам, но дорогу осилит только идущий по ней. Начинать новое всегда тяжело и я надеюсь на вашу поддержку.
Основной движок блога написан и уже работает, остальные функции будут добавляться по мере их написания. Скоро заработает RSS-канал и вы сможете получать все новости в режиме реального времени.
В статьях иногда будут встречаться куски кода, для удобства восприятия строки в них пронумерованы:
Code (Assembler) : Убрать нумерацию
- xor eax,eax ; Zero register
- inc eax
- cmp dword [edx],eax ; [edx]=1?
- je loc_1
Все статьи авторские, написаны лично мной для этого сайта. При использовании сторонних материалов указаны первоисточники, упоминаемые торговые марки принадлежат их владельцам. Вся информация на сайте выложена исключительно в образовательных целях, является личным мнением автора и не должна быть использована для совершения противозаконных действий. Автор не несет никакой ответственности за результаты применения знаний, полученных на этом сайте. При копировании или использовании материалов ссылка на сайт обязательна.
Просмотров: 8276 | Комментариев: 5
