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


     организация мероприятий в Алматы, zoom. | литий-ионные батареи оптом, комплексное решение. |     

В заключение данного раздела обсудим



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

В заключение данного раздела обсудим «зеркальный» вариант табличного алгоритма — алгоритм CRC32 (V.42 МККТТ). Этот вариант вычисления CRC обязан своим возникновением существованию последовательного интерфейса, который посылает биты, начиная с наименее значимого (бит 0) и заканчивая самым старшим (бит 7), то есть в обратном порядке. В «зеркальном» регистре все биты отражены относительно центра. Например, 10111011001 есть отражение значения 10011011101.

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

направление расчетов поменяется — байты теперь будут сдвигаться вправо, полином 04clldb7h зеркально отразится относительно его центра, в результате получится значение 0edb88320h. С11С32-таблица будет зеркальным отражением аналогичной таблицы для прямого алгоритма (Рисунок 9.10).



Рисунок 9.10. Схема «Зеркального» табличного алгоритма

Для зеркального алгоритма вычисления CRC32 процесс вычисления такой же, за исключением порядка — сдвиги и заполнение регистра осуществляются вправо. Ниже приведена программа вычисления таблицы для зеркального алгоритма CRC32 и полинома 0EDB88320h.

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

.data

:СРС32-таблица для зеркального табличного алгоритма вычисления CRC32

tabl_32_mirror dd 256 dup (0)

len_tabl_32jrrirror=$-tabl_32_mirror

adr_tabl_32jTrirror dd tabl_32_mirror

polinom dd 0EDB88320h

.code

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 ex stosd

loop ml

Для того, кто обладает солидным багажом знаний по проблеме CRC-вычис-лений, написание программы, реализующей зеркальный алгоритм, — дело техники. На стороне источника код будет выглядеть так:


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