Blog. Just Blog

Образ мышления: Assembler

То, что не удается запрограммировать на Ассемблере, приходится паять
Образ мышления: Assembler - RSS-канал Образ мышления: Assembler - Карта сайта

Генератор XorShift128 на Ассемблере

09.06.2022 | Категория: Образ мышления: Assembler | Автор: ManHunter

Генератор XorShift128 на Ассемблере

Генератор случайных чисел XorShift128 напоминает уже известное вам семейство генераторов xoshiro128. Из названия понятно, что тут используются только команда XOR и сдвиговые команды SHL/SHR, а период равняется 2128-1. В алгоритме отсутствуют операции деления и умножения, поэтому его можно использовать в тех микроконтроллерах, где таких ассемблерных операций нет в принципе. Также генератор XorShift является одними из самых быстрых генераторов случайных чисел.

Читать статью целиком »
Просмотров: 365 | Комментариев: 0

Поиск подстроки в строке по алгоритму Карпа-Рабина

01.06.2022 | Категория: Образ мышления: Assembler | Автор: ManHunter

Поиск подстроки в строке по алгоритму Карпа-Рабина

Когда речь заходит об алгоритмах точного поиска подстроки в строке, то обычно все так или иначе сводится к последовательному сравнению символов. Но есть группа алгоритмов, которые основаны не на сравнении символов, а на сравнении числовых данных - хешей. Одним из таких алгоритмов является алгоритм Карпа-Рабина. Его принцип достаточно простой: вычисляется хеш от строки поиска, затем вычисляется хеш от фрагмента строки, в которой производится поиск. Длина фрагмента равна длине искомой строки. Если хеши равны, то выполняется дополнительное посимвольное сравнение, если не равны, то продвигаемся по строке дальше. Казалось бы, что выигрыша тут никакого быть не может, ведь вместо сравнения вычислительные ресурсы тратятся на хеширование. Однако, как показывает практика, для поиска совпадения это гораздо эффективнее, чем сравнение отдельных символов строк. Вместо O(n*m) операций можно добиться среднего результата O(n+m), где n - длина исходной строки, а m - длина искомой строки. К тому же алгоритм Карпа-Рабина не требует выделения дополнительной памяти для своей работы.

Читать статью целиком »
Просмотров: 893 | Комментариев: 2

Алгоритм быстрой сортировки на Ассемблере

19.05.2022 | Категория: Образ мышления: Assembler | Автор: ManHunter

Алгоритм быстрой сортировки на Ассемблере

Алгоритм быстрой сортировки появился еще на заре компьютерной эпохи в 1960 году. И до сих пор он остается одним из самых быстрых универсальных алгоритмов сортировки массивов. Несмотря на некоторые недостатки в виде наличия рекурсивных вызовов, алгоритм быстрой сортировки очень прост в реализации, не требует выделения дополнительной памяти и даже может быть распараллелен между несколькими подпроцессами.

Читать статью целиком »
Просмотров: 505 | Комментариев: 0

Использование системных функций хеширования

07.05.2022 | Категория: Образ мышления: Assembler | Автор: ManHunter

Использование системных функций хеширования

Я уже выкладывал на сайте ассемблерные реализации алгоритмов хеширования MD4, MD5 и SHA1. Но в Windows есть уже готовые функции для подсчета не только этих хешей, но и некоторых других. Конечно, делать все самому гораздо приятнее для души и полезнее для мозгов, но почему бы не переложить часть работы на систему? Как говорил один мой хороший товарищ: "У лошади голова большая, вот пусть она и думает".

Читать статью целиком »
Просмотров: 430 | Комментариев: 5

Как узнать сетевое имя компьютера и название домена

02.05.2022 | Категория: Образ мышления: Assembler | Автор: ManHunter
Маленький сниппет для получения сетевого имени компьютера и названия домена. Но сперва структура, которая нам понадобится для работы.
  1. struct WKSTA_INFO_100
  2.     wki100_platform_id  dd ?
  3.     wki100_computername dd ?
  4.     wki100_langroup     dd ?
  5.     wki100_ver_major    dd ?
  6.     wki100_ver_minor    dd ?
  7. ends
C помощью функции NetWkstaGetInfo можно получить информацию о рабочей станции. Полнота информации зависит от кода запрошенной структуры и уровня доступа пользователя. Самый низкий уровень - 100-й - доступен для всех. 101-й код требует как минимум авторизованного пользователя, выше уже необходим доступ с правами администратора.
  1.         ; Запросить данные
  2.         invoke  NetWkstaGetInfo,NULL,100,lpWKSTA
  3.         or      eax,eax
  4.         jnz     loc_errror
  5.  
  6.         ; Указатель на структуру WKSTA_INFO_100
  7.         mov     ebx,[lpWKSTA]
  8.         ; [ebx+WKSTA_INFO_100.wki100_langroup] -> название домена
  9.         ; [ebx+WKSTA_INFO_100.wki100_computername] -> имя компьютера
Обратите внимание, что саму структуру WKSTA_INFO_100 в приложении хранить не надо, она создается автоматически где-то в системе. Вся работа выполняется через указатель на эту структуру.

Читать статью целиком »
Просмотров: 407 | Комментариев: 2

Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2022
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0026 сек.) / Память: 4.75 Mb
Наверх