Образ мышления: Assembler
То, что не удается запрограммировать на Ассемблере, приходится паять
Образ мышления: Assembler - RSS-канал
Образ мышления: Assembler - Карта сайта
Парсинг метаданных MIDI-файлов на Ассемблере
29.10.2024 | Категория: Образ мышления: Assembler | Автор: ManHunter
Парсинг метаданных MIDI-файлов на Ассемблере
MIDI - "цифровой интерфейс музыкальных инструментов" - стандарт цифровой звукозаписи на формат обмена данными между электронными музыкальными инструментами. В отличие от других форматов это не оцифрованный звук, а наборы команд (проигрываемые ноты, ссылки на проигрываемые инструменты, значения изменяемых параметров звука), которые могут воспроизводиться по-разному в зависимости от устройства воспроизведения. Это позволяет реализовывать устройства, производящие аранжировку по заданным аккордам, а также приложения для воспроизведения и визуализации звука.
Читать статью целиком »
Просмотров: 323 | Комментариев: 6
Парсинг метаданных файлов RealMedia на Ассемблере
21.10.2024 | Категория: Образ мышления: Assembler | Автор: ManHunter
Парсинг метаданных файлов RealMedia на Ассемблере
Формат RealMedia уже давно используется для потокового вещания. В свое время этот формат обеспечивал приемлемое качество звука и видео при сравнительно небольшом размере файла. Но главным плюсом RealMedia является возможность перемотки при воспроизведении файлов, находящихся на сервере. Это обеспечило не только популярность, но сделало RealMedia практически стандартом для трансляции медиапотоков по каналам связи.
Читать статью целиком »
Просмотров: 254 | Комментариев: 2
Алгоритм хеширования MaHash8 на Ассемблере
28.09.2024 | Категория: Образ мышления: Assembler | Автор: ManHunter
MaHash8 - эффективная функция с высокой производительностью, которая позволяет выполнять операции хеширования с минимальным количеством коллизий. Она основана на простых операциях, имеет очень понятную структуру и легко реализуется на различных языках программирования.В алгоритме MaHash8 для хеширования используется таблица подстановки, позаимствованная из криптоалгоритма Skipjack. Если не хотите таскать готовую таблицу, то ее можно создавать динамически, используя формулы по приведенной ссылке.
Code (Assembler) : Убрать нумерацию
- sTable db 0a3h,0d7h,009h,083h,0f8h,048h,0f6h,0f4h,0b3h,021h,015h,078h
- db 099h,0b1h,0afh,0f9h,0e7h,02dh,04dh,08ah,0ceh,04ch,0cah,02eh
- db 052h,095h,0d9h,01eh,04eh,038h,044h,028h,00ah,0dfh,002h,0a0h
- db 017h,0f1h,060h,068h,012h,0b7h,07ah,0c3h,0e9h,0fah,03dh,053h
- db 096h,084h,06bh,0bah,0f2h,063h,09ah,019h,07ch,0aeh,0e5h,0f5h
- db 0f7h,016h,06ah,0a2h,039h,0b6h,07bh,00fh,0c1h,093h,081h,01bh
- db 0eeh,0b4h,01ah,0eah,0d0h,091h,02fh,0b8h,055h,0b9h,0dah,085h
- db 03fh,041h,0bfh,0e0h,05ah,058h,080h,05fh,066h,00bh,0d8h,090h
- db 035h,0d5h,0c0h,0a7h,033h,006h,065h,069h,045h,000h,094h,056h
- db 06dh,098h,09bh,076h,097h,0fch,0b2h,0c2h,0b0h,0feh,0dbh,020h
- db 0e1h,0ebh,0d6h,0e4h,0ddh,047h,04ah,01dh,042h,0edh,09eh,06eh
- db 049h,03ch,0cdh,043h,027h,0d2h,007h,0d4h,0deh,0c7h,067h,018h
- db 089h,0cbh,030h,01fh,08dh,0c6h,08fh,0aah,0c8h,074h,0dch,0c9h
- db 05dh,05ch,031h,0a4h,070h,088h,061h,02ch,09fh,00dh,02bh,087h
- db 050h,082h,054h,064h,026h,07dh,003h,040h,034h,04bh,01ch,073h
- db 0d1h,0c4h,0fdh,03bh,0cch,0fbh,07fh,0abh,0e6h,03eh,05bh,0a5h
- db 0adh,004h,023h,09ch,014h,051h,022h,0f0h,029h,079h,071h,07eh
- db 0ffh,08ch,00eh,0e2h,00ch,0efh,0bch,072h,075h,06fh,037h,0a1h
- db 0ech,0d3h,08eh,062h,08bh,086h,010h,0e8h,008h,077h,011h,0beh
- db 092h,04fh,024h,0c5h,032h,036h,09dh,0cfh,0f3h,0a6h,0bbh,0ach
- db 05eh,06ch,0a9h,013h,057h,025h,0b5h,0e3h,0bdh,0a8h,03ah,001h
- db 005h,059h,02ah,046h
Code (Assembler) : Убрать нумерацию
- ;-----------------------------------------------------------------------
- ; Функция вычисления хеша MaHash8
- ; Автор: ManHunter / PCL
- ; https://www.manhunter.ru
- ;-----------------------------------------------------------------------
- ; Параметры:
- ; lpData - указатель на строку
- ; dSize - длина строки
- ; На выходе:
- ; EAX = полученный хеш
- ;-----------------------------------------------------------------------
- proc MaHash8 lpData:DWORD, dSize:DWORD
- locals
- hash1 dd ?
- hash2 dd ?
- endl
- push ebx ecx edx esi edi
- mov esi,[lpData]
- mov eax,[dSize]
- mov [hash1],eax
- mov [hash2],eax
- xor ecx,ecx
- .loc_loop:
- cmp ecx,[dSize]
- je .loc_done
- mov al,byte[esi]
- add eax,ecx
- movzx eax,al
- movzx edx,byte[sTable+eax]
- add [hash1],edx
- mov edx,[hash1]
- shl edx,6
- mov eax,[hash1]
- shr eax,11
- xor eax,edx
- add eax,[hash1]
- rol eax,14
- mov [hash1],eax
- lodsb
- add eax,ecx
- movzx eax,al
- movzx edx,byte[sTable+eax]
- add [hash2],edx
- mov edx,[hash2]
- shl edx,6
- mov eax,[hash2]
- shr eax,11
- xor eax,edx
- add eax,[hash2]
- rol eax,18
- mov [hash2],eax
- mov ebx,[hash1]
- mov edi,[hash2]
- mov eax,ebx
- shr eax,16
- movzx edx,ax
- mov eax,edi
- shl eax,16
- or eax,edx
- mov [hash1],eax
- mov eax,edi
- shr eax,16
- movzx edx,ax
- mov eax,ebx
- shl eax,16
- or eax,edx
- mov [hash2],eax
- inc ecx
- jmp .loc_loop
- .loc_done:
- mov eax,[hash2]
- xor eax,[hash1]
- pop edi esi edx ecx ebx
- ret
- endp
Читать статью целиком »
Просмотров: 273 | Комментариев: 3
Как сделать окно размером больше монитора
17.09.2024 | Категория: Образ мышления: Assembler | Автор: ManHunter
Для изменения размера окна в WinAPI используется функции SetWindowPos или MoveWindow, два параметра которых как раз и отвечают за размер. Обе функции прекрасно работают с окнами, размер которых не превышает размер монитора. Но есть неприятная особенность. При попытке увеличить окно до размеров, значительно превышающих размер монитора, оно действительно увеличится, но при любом последующем действии с окном оно тут же будет принудительно уменьшаться до максимально допустимого размера. Затрудняюсь сказать, с чем это связано, но факт имеет место быть. Таким образом, если ваше приложение подразумевает работу с большим окном, но оно запущено на компьютере с маленьким монитором, то с отображением возникнут проблемы. Не буду рассуждать на тему самой необходимости подобных действий, перейду сразу к реализации решения этой проблемы. Оно основано на обработке сообщения WM_GETMINMAXINFO.Code (Assembler) : Убрать нумерацию
- cmp [msg],WM_GETMINMAXINFO
- je .minmax
- ...
- ...
- .minmax:
- ; В регистре EDI указатель на структуру координат окна
- mov edi,[lparam]
- ; Принудительно прописать размеры окна
- mov [edi+MINMAXINFO.ptMaxSize.x],7000
- mov [edi+MINMAXINFO.ptMaxTrackSize.x],7000
- mov [edi+MINMAXINFO.ptMinTrackSize.x],7000
- mov [edi+MINMAXINFO.ptMaxSize.y],7000
- mov [edi+MINMAXINFO.ptMaxTrackSize.y],7000
- mov [edi+MINMAXINFO.ptMinTrackSize.y],7000
- jmp .processed
Читать статью целиком »
Просмотров: 252 | Комментариев: 1
Парсинг метаданных MMF-файлов на Ассемблере
03.09.2024 | Категория: Образ мышления: Assembler | Автор: ManHunter
Парсинг метаданных MMF-файлов на Ассемблере
SMAF (Synthetic Music Mobile Application File), он же MMF - мультимедийный формат данных, разработанный компанией Yamaha. В эпоху кнопочных сотовых телефонов этот формат использовался для создания очень компактных по размеру мелодий, хоть и невысокого качества звучания. Формат MMF может содержать не только мелодии, но и голоса, целые песни, и даже команды управления подсветкой телефона, если таковые поддерживаются аппаратом. Сейчас этот формат потерял актуальность, даже официальный сайт проекта окончательно закрылся несколько лет назад и доступен только в архиве. Описаний внутреннего формата MMF-файлов тоже практически нет, всю информацию пришлось собирать по крупицам из разных источников, в том числе и на основе анализа файлов "из дикой природы".
Читать статью целиком »
Просмотров: 300 | Комментариев: 1