Встроенный ассемблер
Д) в результате в регистре остается значение 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 бит.
Стыковка ассемблера с языками высокого уровня основывается на трех китах: