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, называемый табличным.