Встроенный ассемблер

Д) в результате в регистре остается значение CRC, которое необходимо добавить к исходной строке и передать приемнику.

Б) при появлении в 31 бите регистра еах единицы все содержимое регистра подвергается операции XOR со значением полинома без старшего бита. Результат операции XOR записывается в еах.

Если остаток от деления нулевой, то исходная последовательность не была нарушена во время передачи. В противном случае - нарушена.

Выполняется CRC-деление полученной последовательности на полином и анализируется остаток.

Рис. 10. Схема формирования выходного сообщения из исходного с использованием CRC-алгоритма.


На стороне приёмника:

 


Для компьютерной реализации алгоритмов вычисления CRC выбирают полиномы со степенями, кратными 8 (то есть размерности регистров) — 8, 16, 24, 32 или 64. Пример: в качестве полинома выберем полином 4003h.

Cтепень полинома определяет размерность регистра, используемого в алгоритме, при этом считается, что старший (всегда единичный) бит полинома находится сразу за левой границей регистра.

Программа реализации прямого алгоритма вычисления CRC функционирует следующим образом:

А) в регистр побитно вдвигаются биты исходной строки (рис. 11). Это происходит до тех пор, пока при очередном сдвиге слева появится единичный бит.

В) процесс сдвига и анализа выдвигаемого бита продолжается до тех пор, пока не будет выдвинут очередной единичный бит, и повторяется пункт (б).

Г) если последний бит данных вдвинут в регистр, в него вдвигается количество нулевых битов, равное степени полинома и повторяется алгоритм начиная с пункта (б).

 

Рис. 11. Схема вычисления значения CRC прямым алгоритмом

 

В результате вычисления CRC символьной последовательности "6476с8" получим CRC 35dah.

 

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

 


Стыковка ассемблера с языками высокого уровня основывается на трех китах: