в проблему вычисления CRC можно
std :идем назад по таблице
mov ex.255
mov bx.polinom
ml: xor ax,ax
mov ah.cl :индекс в таблице для вычисления CRC
push ex сложенные циклы
mov ex.8
m2: shi ax.l
jnc m3 ;старшие разряды не равны - выполняем сдвиг (частное нас не интересует)
:старшие разряды равны - выполняем XOR:
xor ax.bx :ax XOR polinom
тЗ: loop m2
pop ex
stosw
loop ml
-------------закончили расчет CRC-таблицы.........
хог ах,ах
xor bx.bx
Ids si.adrbitstring
mov cx.len_bit_string
m4: mov bl.ah
shl ax.8
xor bl.[si]
xor ax.tabl_16[bx]
inc si
1oop m4
;.........
Рассмотрением этого алгоритма введение в проблему вычисления CRC можно было бы и закончить. Все существующие алгоритмы вычисления CRC являются, по сути, различными модификациями описанного выше табличного алгоритма. Эти модификации преследуют разные цели, перечислим некоторые из них:
переход от цикла по всем битам к циклу по большим порциям данных — байтам, словам и т. д.;
повышение разрядности порождающего полинома;
отражение особенностей функционирования аппаратуры передачи данных (наличие этой цели обусловлено тем, что микросхемы, поддерживающие работу последовательного порта компьютера, передачу байта начинают с его младших битов, поэтому описанные ниже алгоритмы расчета CRC, учитывающие эту особенность, называются зеркальными).
Алгоритмы вычисления CRC получили свое закрепление в некоторых стандартах. Перечислим отличительные особенности основных алгоритмов вычисле-^ ния CRC. Итак, основные алгоритмы вычисления CRC различаются:
по значению и степени порождающего полинома, при этом значение полинома обычно указывается без ведущей единицы в старшем разряде;
по начальному содержимому регистра, в котором формируется значение CRC;
по тому, производится ли обращение битов каждого байта перед его обработкой;
по способу прохода байтов через регистр — способ может быть косвенным или прямым;
по тому, производится ли обращение конечного результата;
по конечному значению, с которым производится объединение по XOR результата вычисления CRC.
После появления 32-разрядных микропроцессоров наибольшей популярностью стали пользоваться 32-разрядные алгоритмы вычисления CRC. В различных источниках рассматривают два типа таких алгоритмов — прямой и зеркальный. Рассмотрим их конкретные реализации, рекомендуемые стандартами.
Содержание Назад Вперед