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



         

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


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. В различных источниках рассматривают два типа таких алгоритмов — прямой и зеркальный. Рассмотрим их конкретные реализации, рекомендуемые стандартами.

     




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