Blog. Just Blog

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читать статью целиком »
Просмотров: 753 | Комментариев: 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 в приложении хранить не надо, она создается автоматически где-то в системе. Вся работа выполняется через указатель на эту структуру.

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

Как сделать ProgressBar с надписью

21.04.2022 | Категория: Образ мышления: Assembler | Автор: ManHunter
Не перестаю удивляться, почему разработчики Microsoft с самого начала не реализовали "из коробки" очевиднейшие решения. Например, есть хороший и удобный элемент диалоговых окон - Progress Bar. Легко реализовать, удобно управлять, но по какой-то причине нет никаких инструментов, чтобы системными средствами наложить на индикатор прогресса какую-нибудь надпись типа "42% завершено". Градиентный ProgressBar мы уже делали, настала очередь реализовать ProgressBar с надписью.


ProgressBar с надписью

Использовать стандартный элемент msctls_progress32 не будем, вместо него возьмем элемент EDIT или STATIC, как и в предыдущем примере. Полоса индикатора и надпись реализуется путем рисования прямо на канве элемента диалогового окна, которое выделено под индикатор.

Основная загвоздка заключается в том, что при отрисовке текста поверх индикатора прогресса, надо учитывать разницу в цвете фона и полосы выполненной части. Посмотрите на скриншоте, чтобы стало понятно, о чем идет речь. В некоторых случаях при определенной комбинации цветов можно использовать единый цвет, но это не самое хорошее решение. Так что сделаем все правильно.

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

prev 01 ... 10 11 12 13 14 15 16 ... 68 next
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.1 сек. / MySQL: 2 (0.0036 сек.) / Память: 4.5 Mb
Наверх