Компрессор файлов в сборке - PullRequest
2 голосов
/ 02 июля 2010

Стремясь стать лучше в программировании на ассемблере и в качестве академического упражнения, я хотел бы написать нетривиальную программу на ассемблере x86. Поскольку сжатие файлов всегда интересовало меня, я хотел бы написать что-то вроде утилиты zip в сборке.

Я не совсем в своем уме, написав простой веб-сервер, использующий ассемблер и закодированный для встроенных устройств, я прочитал некоторые материалы для zlib (и других) и поиграл с его реализацией на языке Си.

Моя проблема заключается в поиске процедуры, достаточно простой для переноса в сборку. Многие из проверенных мной утилит полны #define и другого включенного кода. Так как это действительно для меня, я не очень интересуюсь супер-удивительными коэффициентами сжатия или чем-то подобным. Я просто ищу RC4 алгоритмов сжатия.

Кодирует ли Хаффман путь, по которому я должен смотреть вниз, или у кого-то есть другое предложение?

Ответы [ 4 ]

1 голос
/ 03 июля 2010

Взгляните на UPX исполняемый упаковщик.Он содержит некоторый низкоуровневый распаковывающий код как часть процедур распаковки ...

1 голос
/ 02 июля 2010

Я помню проект второго года вычислительной техники, который был чем-то похожим на это (в C).

По сути, сжатие включает в себя замену строки xxxxx (5 x) на @\005x (знак at, байт со значением 5, за которым следует повторный байт. Этот алгоритм очень прост. Он не ' Это работает хорошо для английского текста, но удивительно хорошо работает для растровых изображений.

Редактировать: я описываю кодирование длины пробега .

1 голос
/ 02 июля 2010

А вот более сложный алгоритм, который не должен быть слишком сложным для реализации: LZ77 (содержащий примеры сборки) или LZ77 (этот сайт содержит много различных алгоритмов сжатия) .

1 голос
/ 02 июля 2010

Один из вариантов - написать декомпрессор для DEFLATE (алгоритм zip и gzip).Реализация zlib будет сильно оптимизирована, но RFC предоставляет псевдокод для декодера.После того, как вы изучите сжатый формат, вы можете перейти к написанию компрессора на его основе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...