Важная информация

User Tag List

Показано с 1 по 4 из 4

Тема: Вычисление CRC

  1. #1
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,842
    Спасибо Благодарностей отдано 
    654
    Спасибо Благодарностей получено 
    1,814
    Поблагодарили
    1,043 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Вычисление CRC

    Планирую заменить в лоадере контрольную сумму на CRC, в связи с чем реализовал CRC-8/16/24/32/64. Обращаю внимание, что входные и выходные параметры у разных процедур передаются в разных регистрах.
    Процедуры не оптимизированные, но правильные (проверял по контрольным значениям). Может кто-нибудь оптимизирует или даст ссылку на более эффективные варианты.

    - - - Добавлено - - -

    Дополню - здесь вычисление без таблиц, вычисление crc-32 по таблице есть, например, в эксисайзере (и я эту процедуру потом использовал в тестах).

    - - - Добавлено - - -

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

    - - - Добавлено - - -

    В crc32 и 64 можно убрать push h и pop h
    Вложения Вложения
    • Тип файла: zip crc.zip (7.3 Кб, Просмотров: 88)
    Последний раз редактировалось ivagor; 09.03.2016 в 14:16. Причина: исправил про полиномы в таблице

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,842
    Спасибо Благодарностей отдано 
    654
    Спасибо Благодарностей получено 
    1,814
    Поблагодарили
    1,043 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Оптимизировал crc32, стало короче почти на 30 байт и быстрее более чем в полтора раза.

    - - - Добавлено - - -

    Но все равно медленно. Для размеров файлов до нескольких десятков Кб надо использовать как минимум crc24 и все же придется считать с использованием таблиц.
    Вложения Вложения

  4. #3
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,842
    Спасибо Благодарностей отдано 
    654
    Спасибо Благодарностей получено 
    1,814
    Поблагодарили
    1,043 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вычисление crc24 с использованием таблицы. Для сокращения программы таблица рассчитывается процедурой, а не задается массивом.
    Быстрее безтабличного варианта в 5 с лишним раз - 45 Кб пробегает за 2 с копейками секунды. Если скорость не очень важна (но все же хочется считать по таблице), то можно сократить процедуру, заменив проверку счетчика на традиционную и убрав "вторую серию".
    Последний раз редактировалось ivagor; 02.05.2022 в 11:08. Причина: удалил вложение, смотрите следующий пост

  5. #4
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,842
    Спасибо Благодарностей отдано 
    654
    Спасибо Благодарностей получено 
    1,814
    Поблагодарили
    1,043 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вернулся к crc, посмотрел табличный вариант из предыдущего поста, устыдился и решил оптимизировать. Новый табличный CRC24 на 37 байт короче и чуть быстрее. Еще добавил табличный CRC16.
    Вложения Вложения

  6. Эти 2 пользователя(ей) поблагодарили ivagor за это полезное сообщение:

    Improver (02.05.2022), svofski (11.05.2022)

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Вычисление числа Пи на ассемблере
    от perestoronin в разделе Разное
    Ответов: 311
    Последнее: 12.02.2024, 17:12

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •