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



         

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


bit_string db "123456789"

len_bit_string=$-bit_string

сгс_32 dd 0 ;сюда мы поместим рассчитанное значение CRC32

adr_bit_string dd bit_string

;СЯС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

:----.........расчитываем CRC32 таблицу

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

m3: loop m2

pop ex

stosd

loop ml

:.....--......закончили расчет CRC32 таблицы

mov eax, OFFFFFFFFh

Ids si.adr_bit_string

mov cx.len_bit_string

m4: xor ebx.ebx

shld ebx.eax.8

shl eax.8

xor bl.[si]

xor eax. tabl_32_direct[bx]

inc si

1 oop m4 :запишем crc-32 в конец (или начало, см. обсуждение ниже) последовательности:

xor eax. OFFFFFFFFh

mov crc_32.eax ;добавляем в конец исходной последовательности

Значение CRC32 для строки "123456789" равно 9c970409h.

Если для источника стандарт определяет практически однозначную последовательность действий, то для приемника возможны несколько вариантов поведения. Отметим два из них.

В первом варианте критерием для вывода о целостности полученного приемником сообщения является результат сравнения или нулевой результат.

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

    2. Вычислить значение CRC для каждого байта полученной последовательности, принцип которой показан на схеме (см. Рисунок 9.9 и замечания выше о различиях CRC16 и CRC32).

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

    4. Далее можно сделать одно из двух действий:

    1. сравнить значение в ЕАХ со значением CRC, полученным вместе с сообщением, — если они равны, то полученное сообщение идентично исходному;



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