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



         

Прямой табличный алгоритм CRC32



Прямой табличный алгоритм CRC32

Как и любой табличный алгоритм, табличный алгоритм вычисления CRC32 требует задания CRC-таблицы. Ее можно задать в програм'ме статически, явно прописав значения элементов таблицы в сегменте кода, или динамически, вычислив значения элементов таблицы перед началом расчета CRC. Ниже приведена программа вычисления CRC-таблицы для полинома 04clldb7.

Прямой табличный алгоритм CRC32 удобно рассматривать со стороны участников процесса, как это мы делали выше. Источник выполняет следующие действия.

:prgO9_O5.asm - программа вычисления CRC-таблицы для полинома 04clldb7.

.data

;С1<С32-таблица для прямого табличного алгоритма вычисления CRC32

tabl_32_direct dd 256 dup (0)

len_tabl_32_direct =$-tabl_32_direct

adr_tabl_32_direct dd tabl_32_direct

polinom dd 04clldb7h

.code

les di.adr_tabl_32_direct

add di,len_tabl_32_direct-4

std :идем назад по таблице

mov ex,255

mov ebx.polinom /

ml: xor eax.eax

shrd eax.ecx,8

push ex сложенные циклы

mov ex.8 m2: shl eax.l

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

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

xor eax.ebx :ax XOR polinom

шЗ:loop m2

pop ex

  • 1. Делает начальную установку регистра, в котором будет производиться формирование CRC, значением OFFFFFFFFh.

    2. Вычисляет значение CRC для каждого байта исходной последовательности, принцип которой показан на схеме (см. Рисунок 9.9). Читатель понимает, что хотя эта схема иллюстрирует принцип вычисления CRC16, но для 32-разрядного алгоритма нужно только увеличить размер элементов таблицы до 32 бит и задействовать весь регистр ЕАХ.

    3. Объединяет по XOR итоговое значение в ЕАХ со значением OFFFFFFFFh.

    4. Добавляет вычисленное значение в конец двоичной исходной последовательности. После этого его можно передать по назначению.

  • Ниже приведена программа вычисления CRC32 по прямому табличному алгоритму.

    ;prg09_06.asm - программа вычисления CRC32 по прямому табличному алгоритму.

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




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