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

         

«Зеркальный» табличный алгоритм CRC32 - часть 2


;prgO9_O9.asm - программа вычисления кода CRC32 на стороне источника :для зеркального алгоритма CRC32 и полинома 0EDB88320h.

.data

исходная битовая последовательность в символах bit_stnng db "123456789" 1en_bi t_string=$-bi t_string

crc_32 dd 0 :сюда мы поместим рассчитанное значение CRC32 adr_bit_string dd bit_string

:СРС32-таблица для зеркального табличного алгоритма вычисления CRC32 .. tab1_32_mirror dd 256 dup (0) len_tabl_32_mirror=$-tabl_32_mirror adr_tabl_32_mirror dd tabl_32_mirror polinom dd 0EDB88320h .code

:-------......расчитываем зеркальную СКС32-таблицу.........

les di.adr_tabl_32_mirror

add di,len_tabl_32_mirror-4

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

mov ex.255

mov ebx.polinom

ml: xor eax.eax

mov al.cl ;индекс в таблице для вычисления CRC

push ex ;вложенные циклы

mov ex.8

m2: shr eax.l

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

xor eax.ebx:ax XOR polinom

m3: loop m2

pop сх

stosd ' '

loop ml закончили расчет СРС32-таблицы

xor bx.bx

mov eax. OFFFFFFFFh

Ids si,adr_bit_string

mov cx,len_bit_string

m4: mov Ы .al

shr eax.8

xor bl.[si]

xor eax.tabl_32_mirror[bx]

inc si

1 oop m4

xor eax. OFFFFFFFFh ;запишем сгс-32 в конец последовательности:

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

Для исходной строки "123456789" получили CRC=lb948a57h. Теперь осталось приемнику проверить целостность полученной им строки. Приемник работает по второму варианту и выполняет действия, иллюстрируемые следующей программой. Если полученная им строка совпадает с исходной, то результатом работы программы должно быть значение 6b202ca2h.

:prg09_10.asm - программа вычисления кода CRC32 на стороне приемника ;для зеркального алгоритма CRC32 и полинома 0EDB88320h.

1

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

bit_string db "123456789"

1en_bit_string=$-bit_string

сгс_32 dd Ib948a57h :сюда мы поместили рассчитанное значение CRC32

adr_bit_string dd bit_string




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