Blog. Just Blog

Быстрый поиск

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

Парсинг метаданных файлов MO3 на Ассемблере

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

Парсинг метаданных файлов MO3 на Ассемблере

Нашел тут в закромах еще один формат трекерной музыки - MO3 (MOdule with MP3) за авторством известного Ian Luck, написавшего музыкальную библиотеку BASS. Вроде бы логично было добавить его в общий список трекерной музыки. Но в процессе исследования выяснились некоторые подробности, которые, я считаю, достойны отдельной статьи. Дело в том, что все данные, в том числе и заголовок, в котором содержится название композиции, упакованы по алгоритму LZ (Lempel-Ziv). Соответственно, чтобы их получить, требуется сперва этот заголовок распаковать. Вот этим и займемся.

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

Эффект пламени на Ассемблере

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

Эффект пламени на Ассемблере

Классический эффект горящего пламени используется в различных интро и демонстрашках еще со времен MS-DOS, а может быть и раньше. Алгоритм достаточно простой, но при этом выглядит очень красиво. Суть его заключается в следующем. Сперва создается палитра, в ней должны быть только оттенки белого, желтого, красного и черный цвет. Далее создается массив, который соответствует размеру изображения и содержит значения цветов его пикселов. По нижней строчке записываются в случайном порядке пикселы или пропуски, после этого по таймеру запускается основной цикл обработки.

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

Парсинг метаданных файлов MPEG-4 на Ассемблере

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

Парсинг метаданных файлов MPEG-4 на Ассемблере

Формат MPEG-4 появился еще в 1998 году и включает в себя группу стандартов сжатия цифрового аудио и видео. Это могут быть аудиофайлы M4A и ALAC, видеоролики MP4 и M4V, видео с YouTube M4S, рингтоны для гейфонов M4R, защищенные аудиозаписи iTunes M4P, аудиокниги M4B и, возможно, другие. За счет контейнерной структуры этот формат позволяет хранить внутри файлов не только аудио- и видео-потоки, но и шрифты, 3D-объекты, субтитры, статичные изображения и т.п. Сегодня разберем, как можно извлечь из этих файлов метаданные.

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

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

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

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

Алгоритм Кнута-Морриса-Пратта, он же классический "КМП-алгоритм" - один из самых эффективных алгоритмов поиска подстроки в строке. Оптимизация достигается за счет того, что при возникновении несоответствия само искомое слово содержит достаточно информации, чтобы определить, где может начаться следующее совпадение, минуя лишние проверки. Скорость работы алгоритма линейно зависит от объема входных данных, то есть невозможно разработать более эффективный алгоритм с точки зрения вычислительной сложности.

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

Сортировка перемешиванием на Ассемблере

26.05.2024 | Категория: Образ мышления: Assembler | Автор: ManHunter
Сортировка перемешиванием, она же шейкерная или двунаправленная сортировка - оптимизированная разновидность алгоритма пузырьковой сортировки. В процессе сортировки выполняется многократный проход по массиву, соседние элементы сравниваются и, в случае необходимости, меняются местами. Массив просматривается поочередно справа налево и слева направо, из-за этого алгоритм получил свое название. В результате каждого прогона крупные и мелкие элементы массива поочередно перемещаются в конец и начало массива соответственно. Границы рабочей части массива, то есть той части массива, где происходит движение, устанавливаются в месте последнего обмена на каждой итерации.
  1. ;----------------------------------------------------------------
  2. ; Функция сортировки массива DWORD перемешиванием
  3. ; by ManHunter / PCL (www.manhunter.ru)
  4. ;----------------------------------------------------------------
  5. ; Параметры:
  6. ;   lpArray - указатель на массив DWORD
  7. ;   dLen - количество элементов в массиве
  8. ;----------------------------------------------------------------
  9. proc shaker_sort lpArray:DWORD, dLen:DWORD
  10.         pusha
  11.  
  12.         mov     esi,[lpArray]
  13.         ; left
  14.         mov     eax,1
  15.         ; right
  16.         mov     ebx,[dLen]
  17.         cmp     ebx,2
  18.         jb      .loc_ret
  19.  
  20.         dec     ebx
  21.  
  22. .loc_loop_main:
  23.         ; swap_flag = false
  24.         xor     edi,edi
  25.  
  26.         mov     ecx,eax
  27. .loc_loop_1:
  28.         cmp     ecx,ebx
  29.         ja      .loc_done_1
  30.  
  31.         mov     edx,dword [esi+ecx*4-4]
  32.         cmp     dword [esi+ecx*4],edx
  33.         ; Для сортировки по возрастанию заменить на ja
  34.         jna     @f
  35.  
  36.         push    dword [esi+ecx*4-4]
  37.         push    dword [esi+ecx*4]
  38.         pop     dword [esi+ecx*4-4]
  39.         pop     dword [esi+ecx*4]
  40.  
  41.         ; swap_flag = true
  42.         inc     edi
  43. @@:
  44.         inc     ecx
  45.         jmp     .loc_loop_1
  46. .loc_done_1:
  47.         dec     ebx
  48.  
  49.         mov     ecx,ebx
  50. .loc_loop_2:
  51.         cmp     ecx,eax
  52.         jb      .loc_done_2
  53.  
  54.         mov     edx,dword [esi+ecx*4]
  55.         cmp     dword [esi+ecx*4-4],edx
  56.         ; Для сортировки по возрастанию заменить на jb
  57.         jnb     @f
  58.  
  59.         push    dword [esi+ecx*4-4]
  60.         push    dword [esi+ecx*4]
  61.         pop     dword [esi+ecx*4-4]
  62.         pop     dword [esi+ecx*4]
  63.  
  64.         ; swap_flag = true
  65.         inc     edi
  66. @@:
  67.         dec     ecx
  68.         jmp     .loc_loop_2
  69. .loc_done_2:
  70.         inc     eax
  71.  
  72.         or      edi,edi
  73.         jnz     .loc_loop_main
  74.  
  75. .loc_ret:
  76.         popa
  77.         ret
  78. endp
Как и с любыми другими разновидностями пузырьковой сортировки, время выполнения сильно зависит от упорядоченности исходного массива и от количества элементов в нем. Но в любом случае при сортировке перемешиванием сумма сравнений одинакова с пузырьковой сортировкой, а сумма обменов меньше.

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

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