Сборник по задачам и примерам Assembler



       

Прямой алгоритм вычисления CRC - часть 3


jnc m5 ;старшие разряды не равны - выполняем сдвиг (частное нас не интересует)

;старшие разряды равны - выполняем XOR:

хог eax.ebx;eax(31. .16) XOR pollnom т5: loop m4

В результате вычисления CRC символьной последовательности "6476с8" получим CRC • 35dah.

Рисунок 9.6. Схема вычисления значения CRC прямым алгоритмом

Для того чтобы смоделировать действия стороны приемника, можно использовать ту же самую программу со слегка измененными исходными данными — к строке bitstring добавляем вычисленное значение CRC. После этого под отладчиком наблюдаем за процессом CRC-деления, причем контролируем остаток от деления. В определенный момент увидим, что он стал нулевым — это свидетельствует о том, что исходная последовательность не была изменена. Для эксперимента можно изменить значения одного или более битов исходной последовательности и посмотреть, что получится.

;prg09_02.asm - программа демонстрации прямого алгоритма вычисления CRC ;(сторона-приемник).

.data

исходная битовая последовательность в символах

bit_string db "6476c8",35h.0dah

1en_bit_stri ng=$-bi t_stri ng

adr_bit_string dd bit_string

polinomdw 4003h

.code

main:

:см. предыдущую программу

exit: :выход из программы

Очевидный недостаток прямого метода — большое количество операций сдвига, исключающих операций ИЛИ (XOR) и операций условного перехода, которые выполняются для каждого бита исходного сообщения. Поэтому на практике используется другой способ расчета CRC, называемый табличным.

 




Содержание  Назад  Вперед