Расчет Fletcher's Checksum на Ассемблере
Алгоритм Fletcher's Checksum был назван в честь его автора - Джона Флетчера (John Fletcher), который разрабатывал проекты для систем дальней связи, тяжелой промышленности, спутниковой навигации и даже NASA. Ему потребовался максимально быстрый и компактный алгоритм для контроля целостности передаваемых данных. Для обработки больших объемов данных Fletcher's Checksum не подходит, так как велика вероятность коллизий (количество возможных значений контрольной суммы всего 65535). Этот алгоритм наиболее эффективен для обнаружения погрешности в несколько бит, например, искажение пакета данных в случае помех при передаче по линии связи. Дальнейшее развитие алгоритма Fletcher's Checksum привело к появлению алгоритма Adler-32, о котором я писал раньше.Code (Assembler) : Убрать нумерацию
- ;-----------------------------------------------------------------------
- ; Функция вычисления контрольной суммы Флетчера
- ; by ManHunter / PCL
- ; http://www.manhunter.ru
- ;-----------------------------------------------------------------------
- ; Параметры:
- ; lpData - указатель на строку
- ; dSize - длина строки
- ; На выходе:
- ; AX = полученный хеш
- ;-----------------------------------------------------------------------
- proc fletcher lpData:DWORD, dSize:DWORD
- push ebx ecx esi
- ; Инициализация
- xor ebx,ebx
- ; Длина строки
- mov ecx,[dSize]
- or ecx,ecx
- jz .loc_ret
- ; Указатель на начало строки
- mov esi,[lpData]
- ; Хеширование
- .loc_checksum:
- lodsb
- add bl,al
- add bh,bl
- loop .loc_checksum
- .loc_ret:
- movzx eax,bx
- pop esi ecx ebx
- ret
- endp
В приложении пример программы с исходным текстом, в которой подсчитывается контрольная сумма введенной строки по алгоритму Fletcher's Checksum.
Просмотров: 2437 | Комментариев: 0
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Комментариeв нет
Добавить комментарий
Заполните форму для добавления комментария