Вычисление контрольных сумм CRC-16 и CRC-32


Главная / ЭКВМ / Программы для ЭКВМ / Прикладные задачи

Описание

Программы предназначены для вычисления контрольных сумм CRC-16 и CRC-32 при помощи ЭКВМ.

Алгоритм вычисления циклического избыточного кода CRC (Cyclic Redundancy Code) основан на свойствах деления двоичных многочленов. Значение CRC является остатком от деления входного многочлена на фиксированный порождающий многочлен.

Для реализации на ЭКВМ выбраны CRC-16 с порождающим многочленом x16 + x15 + x2 + 1, который используется как контрольная сумма в ANSI, Modbus, USB и CRC-32 с многочленом x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1, который используется в POSIX, V.42 и IEEE 802.3.

Примечание. Оба полинома включены в ГОСТ 17422-82 "Системы передачи данных. Скорости передачи данных и основные параметры помехоустойчивых циклических кодов". Первый является допустимым для использования в технически обоснованных случаях при длине блока не более 215 бит. Второй - установленным для использования при длине блока до 232 бит.

Полином CRC-16 также используется в соответствии с ГОСТ 34.402-91 "Обмен информацией на кассете с магнитной лентой шириной 3,81 мм (0,15 дюйма) с плотностью записи 4 символа/мм (100 символов/дюйм) способом фазового кодирования при 63 переходах потоков/мм (1600 переходов потока/дюйм)".

Правила циклического кодирования-декодирования изложены в ГОСТ 25873-83 "Процедура управления звеном передачи данных. Структура кадра".

Для быстрого вычисления контрольных сумм используются предварительно вычисленные значения, занесённые в таблицу.

После запуска программ в строке комментариев выводится краткая подсказка о назначении программы и способе ввода значений.

Очередной байт входной последовательности вводится в RX. После нажатия С/П в RX выводится количество обработаных байтов, в строке комментариев - значение контрольной суммы. Повторять ввод следует до исчерпания ряда входных значений - итоговое значение CRC будет являться контрольной суммой всей последовательности. В случае ввода ошибочного значения следует нажать В/О, С/П и повторить ввод последовательности начиная с первого байта.

Перевод чисел из шестнадцатеричной и восьмеричной системы в десятичную

Данные в регистр X стека вводятся в десятичном виде. При необходимости обработки ряда шестнадцатеричных чисел можно воспользоваться приложением к руководству по эксплуатации ЭКВМ или следующей таблицей.

Здесь в начале строки записана старшая шестнадцатеричная цифра, в столбцах - младшая. Десятичное число считывается из клетки, находящейся на пересечении нужной строки и столбца. Например: 9816 = 15210 - число находится на пересечении строки 9 и столбца 8.

ст\мл 0 1 2 3 4 5 6 7 8 9 A B C D E F
0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
2 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
3 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
4 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
5 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
6 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
7 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
8 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
9 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
A 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
B 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
C 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207
D 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
E 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239
F 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255

Для перевода восьмеричных чисел в десятичные можно использовать следующую таблицу

Здесь в начале строки записаны старшие восьмеричные цифры, в столбцах - младшая. Десятичное число считывается из клетки, находящейся на пересечении нужной строки и столбца. Например: 2418 = 16110 - число находится на пересечении строки 248 и столбца 1.

ст\мл 0 1 2 3 4 5 6 7
0 0 1 2 3 4 5 6 7
1 8 9 10 11 12 13 14 15
2 16 17 18 19 20 21 22 23
3 24 25 26 27 28 29 30 31
4 32 33 34 35 36 37 38 39
5 40 41 42 43 44 45 46 47
6 48 49 50 51 52 53 54 55
7 56 57 58 59 60 61 62 63
10 64 65 66 67 68 69 70 71
11 72 73 74 75 76 77 78 79
12 80 81 82 83 84 85 86 87
13 88 89 90 91 92 93 94 95
14 96 97 98 99 100 101 102 103
15 104 105 106 107 108 109 110 111
16 112 113 114 115 116 117 118 119
17 120 121 122 123 124 125 126 127
20 128 129 130 131 132 133 134 135
21 136 137 138 139 140 141 142 143
22 144 145 146 147 148 149 150 151
23 152 153 154 155 156 157 158 159
24 160 161 162 163 164 165 166 167
25 168 169 170 171 172 173 174 175
26 176 177 178 179 180 181 182 183
27 184 185 186 187 188 189 190 191
30 192 193 194 195 196 197 198 199
31 200 201 202 203 204 205 206 207
32 208 209 210 211 212 213 214 215
33 216 217 218 219 220 221 222 223
34 224 225 226 227 228 229 230 231
35 232 233 234 235 236 237 238 239
36 240 241 242 243 244 245 246 247
37 248 249 250 251 252 253 254 255

Для удобства использования к программам ЭКВМ прилагаются файлы таблиц в нескольких форматах: ODT, FODT, DOC, PDF.


Программа "CRC-16"

Программа размещается в памяти программ ЭКВМ с нулевой страницы. Запуск производится нажатием клавиш "В/О", "С/П". Останов выполнения программы - нажатием "С/П".

Пример. Для строки "123456789" или эквивалентной последовательности {49, 50, 51, 52, 53, 54, 55, 56, 57} значение CRC-16 составляет 4B3716.

Файл crc16.mkp (КС 64834/36)

  0 1 2 3 4 5 6 7 8 9
000 Cx П 4 2 5 5 П A П B 1 + П 6
010 0 0 8 3 П E 2 PP П 91 00 0
020 0 6 1 PP П 90 26 Cx С/П ИП B K XOR
030 2 × ИП E + PP П 90 42 PP ИП 90 44
040 П 9 PP ИП 90 44 ИП A K XOR П B ИП 9 П A ИП 6
050 × + PP П 91 02 ИП 4 1 + П 4 БП
060 27 43h 'C' 52h 'R' 43h 'C' 31h '1' 36h '6' 3Ah ':' 20h ' ' A2h 'в' A2h 'в'
070 AEh 'о' A4h 'д' 20h ' ' A2h 'в' 20h ' ' 52h 'R' 58h 'X' 2Ch ',' 20h ' ' 91h 'С'
080 2Fh '/' 8Fh 'П' 00h 00h 00h C0h C1h C1h 81h 01h
090 40h C3h 01h 03h C0h 02h 80h C2h 41h C6h
100 01h 06h C0h 07h 80h C7h 41h 05h 00h C5h
110 C1h C4h 81h 04h 40h CCh 01h 0Ch C0h 0Dh
120 80h CDh 41h 0Fh 00h CFh C1h CEh 81h 0Eh
130 40h 0Ah 00h CAh C1h CBh 81h 0Bh 40h C9h
140 01h 09h C0h 08h 80h C8h 41h D8h 01h 18h
150 C0h 19h 80h D9h 41h 1Bh 00h DBh C1h DAh
160 81h 1Ah 40h 1Eh 00h DEh C1h DFh 81h 1Fh
170 40h DDh 01h 1Dh C0h 1Ch 80h DCh 41h 14h
180 00h D4h C1h D5h 81h 15h 40h D7h 01h 17h
190 C0h 16h 80h D6h 41h D2h 01h 12h C0h 13h
200 80h D3h 41h 11h 00h D1h C1h D0h 81h 10h
210 40h F0h 01h 30h C0h 31h 80h F1h 41h 33h
220 00h F3h C1h F2h 81h 32h 40h 36h 00h F6h
230 C1h F7h 81h 37h 40h F5h 01h 35h C0h 34h
240 80h F4h 41h 3Ch 00h FCh C1h FDh 81h 3Dh
250 40h FFh 01h 3Fh C0h 3Eh 80h FEh 41h FAh
260 01h 3Ah C0h 3Bh 80h FBh 41h 39h 00h F9h
270 C1h F8h 81h 38h 40h 28h 00h E8h C1h E9h
280 81h 29h 40h EBh 01h 2Bh C0h 2Ah 80h EAh
290 41h EEh 01h 2Eh C0h 2Fh 80h EFh 41h 2Dh
300 00h EDh C1h ECh 81h 2Ch 40h E4h 01h 24h
310 C0h 25h 80h E5h 41h 27h 00h E7h C1h E6h
320 81h 26h 40h 22h 00h E2h C1h E3h 81h 23h
330 40h E1h 01h 21h C0h 20h 80h E0h 41h A0h
340 01h 60h C0h 61h 80h A1h 41h 63h 00h A3h
350 C1h A2h 81h 62h 40h 66h 00h A6h C1h A7h
360 81h 67h 40h A5h 01h 65h C0h 64h 80h A4h
370 41h 6Ch 00h ACh C1h ADh 81h 6Dh 40h AFh
380 01h 6Fh C0h 6Eh 80h AEh 41h AAh 01h 6Ah
390 C0h 6Bh 80h ABh 41h 69h 00h A9h C1h A8h
400 81h 68h 40h 78h 00h B8h C1h B9h 81h 79h
410 40h BBh 01h 7Bh C0h 7Ah 80h BAh 41h BEh
420 01h 7Eh C0h 7Fh 80h BFh 41h 7Dh 00h BDh
430 C1h BCh 81h 7Ch 40h B4h 01h 74h C0h 75h
440 80h B5h 41h 77h 00h B7h C1h B6h 81h 76h
450 40h 72h 00h B2h C1h B3h 81h 73h 40h B1h
460 01h 71h C0h 70h 80h B0h 41h 50h 00h 90h
470 C1h 91h 81h 51h 40h 93h 01h 53h C0h 52h
480 80h 92h 41h 96h 01h 56h C0h 57h 80h 97h
490 41h 55h 00h 95h C1h 94h 81h 54h 40h 9Ch
500 01h 5Ch C0h 5Dh 80h 9Dh 41h 5Fh 00h 9Fh
510 C1h 9Eh 81h 5Eh 40h 5Ah 00h 9Ah C1h 9Bh
520 81h 5Bh 40h 99h 01h 59h C0h 58h 80h 98h
530 41h 88h 01h 48h C0h 49h 80h 89h 41h 4Bh
540 00h 8Bh C1h 8Ah 81h 4Ah 40h 4Eh 00h 8Eh
550 C1h 8Fh 81h 4Fh 40h 8Dh 01h 4Dh C0h 4Ch
560 80h 8Ch 41h 44h 00h 84h C1h 85h 81h 45h
570 40h 87h 01h 47h C0h 46h 80h 86h 41h 82h
580 01h 42h C0h 43h 80h 83h 41h 41h 00h 81h
590 C1h 80h 81h 40h 40h          

Исходный текст для кросс-компилятора

Файл crc16.mkl

.CHARSET 1251

; Программа быстрого (табличного) расчёта CRC-16 на ЭКВМ
; Полином 0x8005 
; x16 + x15 + x2 + 1 
; Контрольная сумма используется в ANSI, Modbus, Bisync, USB и.т.д.

; R4 - счётчик введённых байт
; R6=256
; R9 - константа из таблицы
; RA,RB - CRC16
; RE - адрес таблицы
; В/О С/П - подсказка в строке комментариев
; Очередной байт ввести в RX, нажать С/П - в строке комментариев выводится CRC16


.ORG 0
	CX
	M4
	255
	MA
	MB
	1 +
	M6
	.NUM TBL16
	ME
	2
	PP M 9100	; разрядность двоичных чисел 2
	.NUM STR1
	PP M 9026
	CX

A1:	R/S
	RMB
	K XOR
	2 *
	RME
	+
	PP M 9042	; индексный регистр памяти программ
	PP RM 9044
	M9
	PP RM 9044
	RMA
	K XOR
	MB
	RM9
	MA
	RM6 *
	+
	PP M 9102	; вывод шестнадцатеричного числа в строку
	RM4
	1 +
	M4
	GOTO A1

STR1:	.TEXT "CRC16: ввод в RX, С/П\0"

TBL16:
   	.DB	00h,00h
   	.DB	0C0h,0C1h
   	.DB	0C1h,81h
   	.DB	01h,40h
   	.DB	0C3h,01h
   	.DB	03h,0C0h
   	.DB	02h,80h
   	.DB	0C2h,41h
    
   	.DB	0C6h,01h
   	.DB	06h,0C0h
   	.DB	07h,80h
   	.DB	0C7h,41h
   	.DB	05h,00h
   	.DB	0C5h,0C1h
   	.DB	0C4h,81h
   	.DB	04h,40h
    
   	.DB	0CCh,01h
   	.DB	0Ch,0C0h
   	.DB	0Dh,80h
   	.DB	0CDh,41h
   	.DB	0Fh,00h
   	.DB	0CFh,0C1h
   	.DB	0CEh,81h
   	.DB	0Eh,40h
    
   	.DB	0Ah,00h
   	.DB	0CAh,0C1h
   	.DB	0CBh,81h
   	.DB	0Bh,40h
   	.DB	0C9h,01h
   	.DB	09h,0C0h
   	.DB	08h,80h
   	.DB	0C8h,41h
    
   	.DB	0D8h,01h
   	.DB	18h,0C0h
   	.DB	19h,80h
   	.DB	0D9h,41h
   	.DB	1Bh,00h
   	.DB	0DBh,0C1h
   	.DB	0DAh,81h
   	.DB	1Ah,40h
    
   	.DB	1Eh,00h
   	.DB	0DEh,0C1h
   	.DB	0DFh,81h
   	.DB	1Fh,40h
   	.DB	0DDh,01h
   	.DB	1Dh,0C0h
   	.DB	1Ch,80h
   	.DB	0DCh,41h
    
   	.DB	14h,00h
   	.DB	0D4h,0C1h
   	.DB	0D5h,81h
   	.DB	15h,40h
   	.DB	0D7h,01h
   	.DB	17h,0C0h
   	.DB	16h,80h
   	.DB	0D6h,41h
    
   	.DB	0D2h,01h
   	.DB	12h,0C0h
   	.DB	13h,80h
   	.DB	0D3h,41h
   	.DB	11h,00h
   	.DB	0D1h,0C1h
   	.DB	0D0h,81h
   	.DB	10h,40h
    
   	.DB	0F0h,01h
   	.DB	30h,0C0h
   	.DB	31h,80h
   	.DB	0F1h,41h
   	.DB	33h,00h
   	.DB	0F3h,0C1h
   	.DB	0F2h,81h
   	.DB	32h,40h
    
   	.DB	36h,00h
   	.DB	0F6h,0C1h
   	.DB	0F7h,81h
   	.DB	37h,40h
   	.DB	0F5h,01h
   	.DB	35h,0C0h
   	.DB	34h,80h
   	.DB	0F4h,41h
    
   	.DB	3Ch,00h
   	.DB	0FCh,0C1h
   	.DB	0FDh,81h
   	.DB	3Dh,40h
   	.DB	0FFh,01h
   	.DB	3Fh,0C0h
   	.DB	3Eh,80h
   	.DB	0FEh,41h
    
   	.DB	0FAh,01h
   	.DB	3Ah,0C0h
   	.DB	3Bh,80h
   	.DB	0FBh,41h
   	.DB	39h,00h
   	.DB	0F9h,0C1h
   	.DB	0F8h,81h
   	.DB	38h,40h
    
   	.DB	28h,00h
   	.DB	0E8h,0C1h
   	.DB	0E9h,81h
   	.DB	29h,40h
   	.DB	0EBh,01h
   	.DB	2Bh,0C0h
   	.DB	2Ah,80h
   	.DB	0EAh,41h
    
   	.DB	0EEh,01h
   	.DB	2Eh,0C0h
   	.DB	2Fh,80h
   	.DB	0EFh,41h
   	.DB	2Dh,00h
   	.DB	0EDh,0C1h
   	.DB	0ECh,81h
   	.DB	2Ch,40h
    
   	.DB	0E4h,01h
   	.DB	24h,0C0h
   	.DB	25h,80h
   	.DB	0E5h,41h
   	.DB	27h,00h
   	.DB	0E7h,0C1h
   	.DB	0E6h,81h
   	.DB	26h,40h
    
   	.DB	22h,00h
   	.DB	0E2h,0C1h
   	.DB	0E3h,81h
   	.DB	23h,40h
   	.DB	0E1h,01h
   	.DB	21h,0C0h
   	.DB	20h,80h
   	.DB	0E0h,41h
    
   	.DB	0A0h,01h
   	.DB	60h,0C0h
   	.DB	61h,80h
   	.DB	0A1h,41h
   	.DB	63h,00h
   	.DB	0A3h,0C1h
   	.DB	0A2h,81h
   	.DB	62h,40h
    
   	.DB	66h,00h
   	.DB	0A6h,0C1h
   	.DB	0A7h,81h
   	.DB	67h,40h
   	.DB	0A5h,01h
   	.DB	65h,0C0h
   	.DB	64h,80h
   	.DB	0A4h,41h
    
   	.DB	6Ch,00h
   	.DB	0ACh,0C1h
   	.DB	0ADh,81h
   	.DB	6Dh,40h
   	.DB	0AFh,01h
   	.DB	6Fh,0C0h
   	.DB	6Eh,80h
   	.DB	0AEh,41h
    
   	.DB	0AAh,01h
   	.DB	6Ah,0C0h
   	.DB	6Bh,80h
   	.DB	0ABh,41h
   	.DB	69h,00h
   	.DB	0A9h,0C1h
   	.DB	0A8h,81h
   	.DB	68h,40h
    
   	.DB	78h,00h
   	.DB	0B8h,0C1h
   	.DB	0B9h,81h
   	.DB	79h,40h
   	.DB	0BBh,01h
   	.DB	7Bh,0C0h
   	.DB	7Ah,80h
   	.DB	0BAh,41h
    
   	.DB	0BEh,01h
   	.DB	7Eh,0C0h
   	.DB	7Fh,80h
   	.DB	0BFh,41h
   	.DB	7Dh,00h
   	.DB	0BDh,0C1h
   	.DB	0BCh,81h
   	.DB	7Ch,40h
    
   	.DB	0B4h,01h
   	.DB	74h,0C0h
   	.DB	75h,80h
   	.DB	0B5h,41h
   	.DB	77h,00h
   	.DB	0B7h,0C1h
   	.DB	0B6h,81h
   	.DB	76h,40h
    
   	.DB	72h,00h
   	.DB	0B2h,0C1h
   	.DB	0B3h,81h
   	.DB	73h,40h
   	.DB	0B1h,01h
   	.DB	71h,0C0h
   	.DB	70h,80h
   	.DB	0B0h,41h
    
   	.DB	50h,00h
   	.DB	90h,0C1h
   	.DB	91h,81h
   	.DB	51h,40h
   	.DB	93h,01h
   	.DB	53h,0C0h
   	.DB	52h,80h
   	.DB	92h,41h
    
   	.DB	96h,01h
   	.DB	56h,0C0h
   	.DB	57h,80h
   	.DB	97h,41h
   	.DB	55h,00h
   	.DB	95h,0C1h
   	.DB	94h,81h
   	.DB	54h,40h
    
   	.DB	9Ch,01h
   	.DB	5Ch,0C0h
   	.DB	5Dh,80h
   	.DB	9Dh,41h
   	.DB	5Fh,00h
   	.DB	9Fh,0C1h
   	.DB	9Eh,81h
   	.DB	5Eh,40h
    
   	.DB	5Ah,00h
   	.DB	9Ah,0C1h
   	.DB	9Bh,81h
   	.DB	5Bh,40h
   	.DB	99h,01h
   	.DB	59h,0C0h
   	.DB	58h,80h
   	.DB	98h,41h
    
   	.DB	88h,01h
   	.DB	48h,0C0h
   	.DB	49h,80h
   	.DB	89h,41h
   	.DB	4Bh,00h
   	.DB	8Bh,0C1h
   	.DB	8Ah,81h
   	.DB	4Ah,40h
    
   	.DB	4Eh,00h
   	.DB	8Eh,0C1h
   	.DB	8Fh,81h
   	.DB	4Fh,40h
   	.DB	8Dh,01h
   	.DB	4Dh,0C0h
   	.DB	4Ch,80h
   	.DB	8Ch,41h
    
   	.DB	44h,00h
   	.DB	84h,0C1h
   	.DB	85h,81h
   	.DB	45h,40h
   	.DB	87h,01h
   	.DB	47h,0C0h
   	.DB	46h,80h
   	.DB	86h,41h
    
   	.DB	82h,01h
   	.DB	42h,0C0h
   	.DB	43h,80h
   	.DB	83h,41h
   	.DB	41h,00h
   	.DB	81h,0C1h
   	.DB	80h,81h
   	.DB	40h,40h

.END


Программа "CRC-32"

Программа размещается в памяти программ ЭКВМ с нулевой страницы. Запуск производится нажатием клавиш "В/О", "С/П". Останов выполнения программы - нажатием "С/П".

Пример. Для строки "123456789" или эквивалентной последовательности {49, 50, 51, 52, 53, 54, 55, 56, 57} значение CRC-32 составляет CBF4392616.

Файл crc32.mkp (КС 64834/36)

  0 1 2 3 4 5 6 7 8 9
0000 Cx П 4 2 5 5 П 5 П A П B П C П D
0010 1 + П 6 0 1 1 9 П E 4 PP П
0020 91 00 0 0 9 7 PP П 90 26 Cx
0030 С/П ИП D K XOR 4 × ИП E + PP П 90 42
0040 PP ИП 90 44 П 7 PP ИП 90 44 П 8 PP ИП 90
0050 44 П 9 PP ИП 90 44 ИП C K XOR П D ИП 9 ИП B
0060 K XOR П C ИП 8 ИП A K XOR П B ИП 7 П A ИП 5 K XOR
0070 ИП 6 × ИП B ИП 5 K XOR + ИП 6 × ИП C ИП 5
0080 K XOR + ИП 6 × ИП D ИП 5 K XOR + PP П 91
0090 02 ИП 4 1 + П 4 БП 30 43h 'C' 52h 'R' 43h 'C'
0100 33h '3' 32h '2' 3Ah ':' 20h ' ' A2h 'в' A2h 'в' AEh 'о' A4h 'д' 20h ' ' A2h 'в'
0110 20h ' ' 52h 'R' 58h 'X' 2Ch ',' 20h ' ' 91h 'С' 2Fh '/' 8Fh 'П' 00h 00h
0120 00h 00h 00h 77h 07h 30h 96h EEh 0Eh 61h
0130 2Ch 99h 09h 51h BAh 07h 6Dh C4h 19h 70h
0140 6Ah F4h 8Fh E9h 63h A5h 35h 9Eh 64h 95h
0150 A3h 0Eh DBh 88h 32h 79h DCh B8h A4h E0h
0160 D5h E9h 1Eh 97h D2h D9h 88h 09h B6h 4Ch
0170 2Bh 7Eh B1h 7Ch BDh E7h B8h 2Dh 07h 90h
0180 BFh 1Dh 91h 1Dh B7h 10h 64h 6Ah B0h 20h
0190 F2h F3h B9h 71h 48h 84h BEh 41h DEh 1Ah
0200 DAh D4h 7Dh 6Dh DDh E4h EBh F4h D4h B5h
0210 51h 83h D3h 85h C7h 13h 6Ch 98h 56h 64h
0220 6Bh A8h C0h FDh 62h F9h 7Ah 8Ah 65h C9h
0230 ECh 14h 01h 5Ch 4Fh 63h 06h 6Ch D9h FAh
0240 0Fh 3Dh 63h 8Dh 08h 0Dh F5h 3Bh 6Eh 20h
0250 C8h 4Ch 69h 10h 5Eh D5h 60h 41h E4h A2h
0260 67h 71h 72h 3Ch 03h E4h D1h 4Bh 04h D4h
0270 47h D2h 0Dh 85h FDh A5h 0Ah B5h 6Bh 35h
0280 B5h A8h FAh 42h B2h 98h 6Ch DBh BBh C9h
0290 D6h ACh BCh F9h 40h 32h D8h 6Ch E3h 45h
0300 DFh 5Ch 75h DCh D6h 0Dh CFh ABh D1h 3Dh
0310 59h 26h D9h 30h ACh 51h DEh 00h 3Ah C8h
0320 D7h 51h 80h BFh D0h 61h 16h 21h B4h F4h
0330 B5h 56h B3h C4h 23h CFh BAh 95h 99h B8h
0340 BDh A5h 0Fh 28h 02h B8h 9Eh 5Fh 05h 88h
0350 08h C6h 0Ch D9h B2h B1h 0Bh E9h 24h 2Fh
0360 6Fh 7Ch 87h 58h 68h 4Ch 11h C1h 61h 1Dh
0370 ABh B6h 66h 2Dh 3Dh 76h DCh 41h 90h 01h
0380 DBh 71h 06h 98h D2h 20h BCh EFh D5h 10h
0390 2Ah 71h B1h 85h 89h 06h B6h B5h 1Fh 9Fh
0400 BFh E4h A5h E8h B8h D4h 33h 78h 07h C9h
0410 A2h 0Fh 00h F9h 34h 96h 09h A8h 8Eh E1h
0420 0Eh 98h 18h 7Fh 6Ah 0Dh BBh 08h 6Dh 3Dh
0430 2Dh 91h 64h 6Ch 97h E6h 63h 5Ch 01h 6Bh
0440 6Bh 51h F4h 1Ch 6Ch 61h 62h 85h 65h 30h
0450 D8h F2h 62h 00h 4Eh 6Ch 06h 95h EDh 1Bh
0460 01h A5h 7Bh 82h 08h F4h C1h F5h 0Fh C4h
0470 57h 65h B0h D9h C6h 12h B7h E9h 50h 8Bh
0480 BEh B8h EAh FCh B9h 88h 7Ch 62h DDh 1Dh
0490 DFh 15h DAh 2Dh 49h 8Ch D3h 7Ch F3h FBh
0500 D4h 4Ch 65h 4Dh B2h 61h 58h 3Ah B5h 51h
0510 CEh A3h BCh 00h 74h D4h BBh 30h E2h 4Ah
0520 DFh A5h 41h 3Dh D8h 95h D7h A4h D1h C4h
0530 6Dh D3h D6h F4h FBh 43h 69h E9h 6Ah 34h
0540 6Eh D9h FCh ADh 67h 88h 46h DAh 60h B8h
0550 D0h 44h 04h 2Dh 73h 33h 03h 1Dh E5h AAh
0560 0Ah 4Ch 5Fh DDh 0Dh 7Ch C9h 50h 05h 71h
0570 3Ch 27h 02h 41h AAh BEh 0Bh 10h 10h C9h
0580 0Ch 20h 86h 57h 68h B5h 25h 20h 6Fh 85h
0590 B3h B9h 66h D4h 09h CEh 61h E4h 9Fh 5Eh
0600 DEh F9h 0Eh 29h D9h C9h 98h B0h D0h 98h
0610 22h C7h D7h A8h B4h 59h B3h 3Dh 17h 2Eh
0620 B4h 0Dh 81h B7h BDh 5Ch 3Bh C0h BAh 6Ch
0630 ADh EDh B8h 83h 20h 9Ah BFh B3h B6h 03h
0640 B6h E2h 0Ch 74h B1h D2h 9Ah EAh D5h 47h
0650 39h 9Dh D2h 77h AFh 04h DBh 26h 15h 73h
0660 DCh 16h 83h E3h 63h 0Bh 12h 94h 64h 3Bh
0670 84h 0Dh 6Dh 6Ah 3Eh 7Ah 6Ah 5Ah A8h E4h
0680 0Eh CFh 0Bh 93h 09h FFh 9Dh 0Ah 00h AEh
0690 27h 7Dh 07h 9Eh B1h F0h 0Fh 93h 44h 87h
0700 08h A3h D2h 1Eh 01h F2h 68h 69h 06h C2h
0710 FEh F7h 62h 57h 5Dh 80h 65h 67h CBh 19h
0720 6Ch 36h 71h 6Eh 6Bh 06h E7h FEh D4h 1Bh
0730 76h 89h D3h 2Bh E0h 10h DAh 7Ah 5Ah 67h
0740 DDh 4Ah CCh F9h B9h DFh 6Fh 8Eh BEh EFh
0750 F9h 17h B7h BEh 43h 60h B0h 8Eh D5h D6h
0760 D6h A3h E8h A1h D1h 93h 7Eh 38h D8h C2h
0770 C4h 4Fh DFh F2h 52h D1h BBh 67h F1h A6h
0780 BCh 57h 67h 3Fh B5h 06h DDh 48h B2h 36h
0790 4Bh D8h 0Dh 2Bh DAh AFh 0Ah 1Bh 4Ch 36h
0800 03h 4Ah F6h 41h 04h 7Ah 60h DFh 60h EFh
0810 C3h A8h 67h DFh 55h 31h 6Eh 8Eh EFh 46h
0820 69h BEh 79h CBh 61h B3h 8Ch BCh 66h 83h
0830 1Ah 25h 6Fh D2h A0h 52h 68h E2h 36h CCh
0840 0Ch 77h 95h BBh 0Bh 47h 03h 22h 02h 16h
0850 B9h 55h 05h 26h 2Fh C5h BAh 3Bh BEh B2h
0860 BDh 0Bh 28h 2Bh B4h 5Ah 92h 5Ch B3h 6Ah
0870 04h C2h D7h FFh A7h B5h D0h CFh 31h 2Ch
0880 D9h 9Eh 8Bh 5Bh DEh AEh 1Dh 9Bh 64h C2h
0890 B0h ECh 63h F2h 26h 75h 6Ah A3h 9Ch 02h
0900 6Dh 93h 0Ah 9Ch 09h 06h A9h EBh 0Eh 36h
0910 3Fh 72h 07h 67h 85h 05h 00h 57h 13h 95h
0920 BFh 4Ah 82h E2h B8h 7Ah 14h 7Bh B1h 2Bh
0930 AEh 0Ch B6h 1Bh 38h 92h D2h 8Eh 9Bh E5h
0940 D5h BEh 0Dh 7Ch DCh EFh B7h 0Bh DBh DFh
0950 21h 86h D3h D2h D4h F1h D4h E2h 42h 68h
0960 DDh B3h F8h 1Fh DAh 83h 6Eh 81h BEh 16h
0970 CDh F6h B9h 26h 5Bh 6Fh B0h 77h E1h 18h
0980 B7h 47h 77h 88h 08h 5Ah E6h FFh 0Fh 6Ah
0990 70h 66h 06h 3Bh CAh 11h 01h 0Bh 5Ch 8Fh
1000 65h 9Eh FFh F8h 62h AEh 69h 61h 6Bh FFh
1010 D3h 16h 6Ch CFh 45h A0h 0Ah E2h 78h D7h
1020 0Dh D2h EEh 4Eh 04h 83h 54h 39h 03h B3h
1030 C2h A7h 67h 26h 61h D0h 60h 16h F7h 49h
1040 69h 47h 4Dh 3Eh 6Eh 77h DBh AEh D1h 6Ah
1050 4Ah D9h D6h 5Ah DCh 40h DFh 0Bh 66h 37h
1060 D8h 3Bh F0h A9h BCh AEh 53h DEh BBh 9Eh
1070 C5h 47h B2h CFh 7Fh 30h B5h FFh E9h BDh
1080 BDh F2h 1Ch CAh BAh C2h 8Ah 53h B3h 93h
1090 30h 24h B4h A3h A6h BAh D0h 36h 05h CDh
1100 D7h 06h 93h 54h DEh 57h 29h 23h D9h 67h
1110 BFh B3h 66h 7Ah 2Eh C4h 61h 4Ah B8h 5Dh
1120 68h 1Bh 02h 2Ah 6Fh 2Bh 94h B4h 0Bh BEh
1130 37h C3h 0Ch 8Eh A1h 5Ah 05h DFh 1Bh 2Dh
1140 02h EFh 8Dh              

Исходный текст для кросс-компилятора

Файл crc32.mkl

.CHARSET 1251

; Программа быстрого (табличного) расчёта CRC-32 на ЭКВМ
; Полином 0xEDB88320
; x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1 
; Контрольная сумма используется в стандартах POSIX и V.42

; R4 - счётчик введённых байт
; R5=255 (0FFh), R6=256
; R7-R9 - константа из таблицы
; RA-RD - CRC
; RE - адрес таблицы
; В/О С/П - подсказка в строке комментариев
; Очередной байт ввести в RX, нажать С/П - в строке комментариев выводится CRC32


.ORG 0
	CX
	M4
	255
	M5
	MA
	MB
	MC
	MD
	1 +
	M6
	.NUM TBL32
	ME
	4
	PP M 9100	; разрядность двоичных чисел
	.NUM STR1
	PP M 9026
	CX

A1:	R/S
	RMD
	K XOR
	4 *
	RME
	+
	PP M 9042	; индексный регистр памяти программ
	PP RM 9044
	M7
	PP RM 9044
	M8
	PP RM 9044
	M9
	PP RM 9044
	RMC
	K XOR
	MD
	RM9
	RMB
	K XOR
	MC
	RM8
	RMA
	K XOR
	MB
	RM7
	MA
	RM5
	K XOR
	RM6 *
	RMB
	RM5
	K XOR
	+
	RM6 *
	RMC
	RM5
	K XOR
	+
	RM6 *
	RMD
	RM5
	K XOR
	+
	PP M 9102	; вывод шестнадцатеричного числа в строку
	RM4
	1 +
	M4
	GOTO A1

STR1:	.TEXT "CRC32: ввод в RX, С/П\0"
	
TBL32:
	.DB	00h,00h,00h,00h
	.DB	77h,07h,30h,96h
	.DB	0EEh,0Eh,61h,2Ch
	.DB	99h,09h,51h,0BAh
    
	.DB	07h,6Dh,0C4h,19h 
	.DB	70h,6Ah,0F4h,8Fh 
	.DB	0E9h,63h,0A5h,35h 
	.DB	9Eh,64h,95h,0A3h
    
	.DB	0Eh,0DBh,88h,32h 
	.DB	79h,0DCh,0B8h,0A4h 
	.DB	0E0h,0D5h,0E9h,1Eh 
	.DB	97h,0D2h,0D9h,88h
    
	.DB	09h,0B6h,4Ch,2Bh 
	.DB	7Eh,0B1h,7Ch,0BDh 
	.DB	0E7h,0B8h,2Dh,07h 
	.DB	90h,0BFh,1Dh,91h
    
	.DB	1Dh,0B7h,10h,64h 
	.DB	6Ah,0B0h,20h,0F2h 
	.DB	0F3h,0B9h,71h,48h
	.DB	84h,0BEh,41h,0DEh
    
	.DB	1Ah,0DAh,0D4h,7Dh
	.DB	6Dh,0DDh,0E4h,0EBh
	.DB	0F4h,0D4h,0B5h,51h
	.DB	83h,0D3h,85h,0C7h
    
	.DB	13h,6Ch,98h,56h
	.DB	64h,6Bh,0A8h,0C0h
	.DB	0FDh,62h,0F9h,7Ah
	.DB	8Ah,65h,0C9h,0ECh
    
	.DB	14h,01h,5Ch,4Fh
	.DB	63h,06h,6Ch,0D9h
	.DB	0FAh,0Fh,3Dh,63h 
	.DB	8Dh,08h,0Dh,0F5h
    
	.DB	3Bh,6Eh,20h,0C8h 
	.DB	4Ch,69h,10h,5Eh
	.DB	0D5h,60h,41h,0E4h 
	.DB	0A2h,67h,71h,72h
    
	.DB	3Ch,03h,0E4h,0D1h 
	.DB	4Bh,04h,0D4h,47h 
	.DB	0D2h,0Dh,85h,0FDh 
	.DB	0A5h,0Ah,0B5h,6Bh
    
	.DB	35h,0B5h,0A8h,0FAh 
	.DB	42h,0B2h,98h,6Ch
	.DB	0DBh,0BBh,0C9h,0D6h 
	.DB	0ACh,0BCh,0F9h,40h
    
	.DB	32h,0D8h,6Ch,0E3h
	.DB	45h,0DFh,5Ch,75h 
	.DB	0DCh,0D6h,0Dh,0CFh 
	.DB	0ABh,0D1h,3Dh,59h
    
	.DB	26h,0D9h,30h,0ACh
	.DB	51h,0DEh,00h,3Ah
	.DB	0C8h,0D7h,51h,80h 
	.DB	0BFh,0D0h,61h,16h
    
	.DB	21h,0B4h,0F4h,0B5h
	.DB	56h,0B3h,0C4h,23h
	.DB	0CFh,0BAh,95h,99h
	.DB	0B8h,0BDh,0A5h,0Fh
    
	.DB	28h,02h,0B8h,9Eh
	.DB	5Fh,05h,88h,08h
	.DB	0C6h,0Ch,0D9h,0B2h 
	.DB	0B1h,0Bh,0E9h,24h
    
	.DB	2Fh,6Fh,7Ch,87h
	.DB	58h,68h,4Ch,11h
	.DB	0C1h,61h,1Dh,0ABh 
	.DB	0B6h,66h,2Dh,3Dh
    
	.DB	76h,0DCh,41h,90h 
	.DB	01h,0DBh,71h,06h
	.DB	98h,0D2h,20h,0BCh 
	.DB	0EFh,0D5h,10h,2Ah
    
	.DB	71h,0B1h,85h,89h
	.DB	06h,0B6h,0B5h,1Fh
	.DB	9Fh,0BFh,0E4h,0A5h
	.DB	0E8h,0B8h,0D4h,33h
    
	.DB	78h,07h,0C9h,0A2h
	.DB	0Fh,00h,0F9h,34h
	.DB	96h,09h,0A8h,8Eh 
	.DB	0E1h,0Eh,98h,18h
    
	.DB	7Fh,6Ah,0Dh,0BBh 
	.DB	08h,6Dh,3Dh,2Dh
	.DB	91h,64h,6Ch,97h 
	.DB	0E6h,63h,5Ch,01h
    
	.DB	6Bh,6Bh,51h,0F4h
	.DB	1Ch,6Ch,61h,62h
	.DB	85h,65h,30h,0D8h 
	.DB	0F2h,62h,00h,4Eh
    
	.DB	6Ch,06h,95h,0EDh
	.DB	1Bh,01h,0A5h,7Bh 
	.DB	82h,08h,0F4h,0C1h
	.DB	0F5h,0Fh,0C4h,57h
    
	.DB	65h,0B0h,0D9h,0C6h
	.DB	12h,0B7h,0E9h,50h
	.DB	8Bh,0BEh,0B8h,0EAh
	.DB	0FCh,0B9h,88h,7Ch
    
	.DB	62h,0DDh,1Dh,0DFh
	.DB	15h,0DAh,2Dh,49h
	.DB	8Ch,0D3h,7Ch,0F3h
	.DB	0FBh,0D4h,4Ch,65h
    
	.DB	4Dh,0B2h,61h,58h
	.DB	3Ah,0B5h,51h,0CEh 
	.DB	0A3h,0BCh,00h,74h
	.DB	0D4h,0BBh,30h,0E2h
    
	.DB	4Ah,0DFh,0A5h,41h
	.DB	3Dh,0D8h,95h,0D7h
	.DB	0A4h,0D1h,0C4h,6Dh
	.DB	0D3h,0D6h,0F4h,0FBh
    
	.DB	43h,69h,0E9h,6Ah
	.DB	34h,6Eh,0D9h,0FCh 
	.DB	0ADh,67h,88h,46h
	.DB	0DAh,60h,0B8h,0D0h
    
	.DB	44h,04h,2Dh,73h
	.DB	33h,03h,1Dh,0E5h 
	.DB	0AAh,0Ah,4Ch,5Fh 
	.DB	0DDh,0Dh,7Ch,0C9h
    
	.DB	50h,05h,71h,3Ch
	.DB	27h,02h,41h,0AAh
	.DB	0BEh,0Bh,10h,10h
	.DB	0C9h,0Ch,20h,86h
    
	.DB	57h,68h,0B5h,25h
	.DB	20h,6Fh,85h,0B3h
	.DB	0B9h,66h,0D4h,09h
	.DB	0CEh,61h,0E4h,9Fh
    
	.DB	5Eh,0DEh,0F9h,0Eh
	.DB	29h,0D9h,0C9h,98h
	.DB	0B0h,0D0h,98h,22h
	.DB	0C7h,0D7h,0A8h,0B4h
    
	.DB	59h,0B3h,3Dh,17h
	.DB	2Eh,0B4h,0Dh,81h
	.DB	0B7h,0BDh,5Ch,3Bh
	.DB	0C0h,0BAh,6Ch,0ADh
    
	.DB	0EDh,0B8h,83h,20h
	.DB	9Ah,0BFh,0B3h,0B6h
	.DB	03h,0B6h,0E2h,0Ch
	.DB	74h,0B1h,0D2h,9Ah
    
	.DB	0EAh,0D5h,47h,39h
	.DB	9Dh,0D2h,77h,0AFh
	.DB	04h,0DBh,26h,15h
	.DB	73h,0DCh,16h,83h
    
	.DB	0E3h,63h,0Bh,12h
	.DB	94h,64h,3Bh,84h
	.DB	0Dh,6Dh,6Ah,3Eh
	.DB	7Ah,6Ah,5Ah,0A8h
    
	.DB	0E4h,0Eh,0CFh,0Bh
	.DB	93h,09h,0FFh,9Dh
	.DB	0Ah,00h,0AEh,27h 
	.DB	7Dh,07h,9Eh,0B1h
    
	.DB	0F0h,0Fh,93h,44h
	.DB	87h,08h,0A3h,0D2h
	.DB	1Eh,01h,0F2h,68h
	.DB	69h,06h,0C2h,0FEh
    
	.DB	0F7h,62h,57h,5Dh
	.DB	80h,65h,67h,0CBh
	.DB	19h,6Ch,36h,71h
	.DB	6Eh,6Bh,06h,0E7h
    
	.DB	0FEh,0D4h,1Bh,76h
	.DB	89h,0D3h,2Bh,0E0h
	.DB	10h,0DAh,7Ah,5Ah
	.DB	67h,0DDh,4Ah,0CCh
    
	.DB	0F9h,0B9h,0DFh,6Fh
	.DB	8Eh,0BEh,0EFh,0F9h
	.DB	17h,0B7h,0BEh,43h
	.DB	60h,0B0h,8Eh,0D5h
    
	.DB	0D6h,0D6h,0A3h,0E8h
	.DB	0A1h,0D1h,93h,7Eh
	.DB	38h,0D8h,0C2h,0C4h
	.DB	4Fh,0DFh,0F2h,52h
    
	.DB	0D1h,0BBh,67h,0F1h
	.DB	0A6h,0BCh,57h,67h
	.DB	3Fh,0B5h,06h,0DDh
	.DB	48h,0B2h,36h,4Bh
    
	.DB	0D8h,0Dh,2Bh,0DAh
	.DB	0AFh,0Ah,1Bh,4Ch
	.DB	36h,03h,4Ah,0F6h
	.DB	41h,04h,7Ah,60h
    
	.DB	0DFh,60h,0EFh,0C3h
	.DB	0A8h,67h,0DFh,55h
	.DB	31h,6Eh,8Eh,0EFh
	.DB	46h,69h,0BEh,79h
    
	.DB	0CBh,61h,0B3h,8Ch
	.DB	0BCh,66h,83h,1Ah
	.DB	25h,6Fh,0D2h,0A0h 
	.DB	52h,68h,0E2h,36h
    
	.DB	0CCh,0Ch,77h,95h 
	.DB	0BBh,0Bh,47h,03h
	.DB	22h,02h,16h,0B9h 
	.DB	55h,05h,26h,2Fh
    
	.DB	0C5h,0BAh,3Bh,0BEh
	.DB	0B2h,0BDh,0Bh,28h
	.DB	2Bh,0B4h,5Ah,92h
	.DB	5Ch,0B3h,6Ah,04h
    
	.DB	0C2h,0D7h,0FFh,0A7h
	.DB	0B5h,0D0h,0CFh,31h
	.DB	2Ch,0D9h,9Eh,8Bh
	.DB	5Bh,0DEh,0AEh,1Dh
    
	.DB	9Bh,64h,0C2h,0B0h
	.DB	0ECh,63h,0F2h,26h
	.DB	75h,6Ah,0A3h,9Ch
	.DB	02h,6Dh,93h,0Ah
    
	.DB	9Ch,09h,06h,0A9h
	.DB	0EBh,0Eh,36h,3Fh
	.DB	72h,07h,67h,85h
	.DB	05h,00h,57h,13h
    
	.DB	95h,0BFh,4Ah,82h
	.DB	0E2h,0B8h,7Ah,14h
	.DB	7Bh,0B1h,2Bh,0AEh
	.DB	0Ch,0B6h,1Bh,38h
    
	.DB	92h,0D2h,8Eh,9Bh
	.DB	0E5h,0D5h,0BEh,0Dh
	.DB	7Ch,0DCh,0EFh,0B7h
	.DB	0Bh,0DBh,0DFh,21h
    
	.DB	86h,0D3h,0D2h,0D4h
	.DB	0F1h,0D4h,0E2h,42h
	.DB	68h,0DDh,0B3h,0F8h
	.DB	1Fh,0DAh,83h,6Eh
    
	.DB	81h,0BEh,16h,0CDh
	.DB	0F6h,0B9h,26h,5Bh
	.DB	6Fh,0B0h,77h,0E1h
	.DB	18h,0B7h,47h,77h
    
	.DB	88h,08h,5Ah,0E6h
	.DB	0FFh,0Fh,6Ah,70h
	.DB	66h,06h,3Bh,0CAh
	.DB	11h,01h,0Bh,5Ch
    
	.DB	8Fh,65h,9Eh,0FFh
	.DB	0F8h,62h,0AEh,69h
	.DB	61h,6Bh,0FFh,0D3h
	.DB	16h,6Ch,0CFh,45h
    
	.DB	0A0h,0Ah,0E2h,78h
	.DB	0D7h,0Dh,0D2h,0EEh
	.DB	4Eh,04h,83h,54h
	.DB	39h,03h,0B3h,0C2h
    
	.DB	0A7h,67h,26h,61h
	.DB	0D0h,60h,16h,0F7h
	.DB	49h,69h,47h,4Dh
	.DB	3Eh,6Eh,77h,0DBh
    
	.DB	0AEh,0D1h,6Ah,4Ah
	.DB	0D9h,0D6h,5Ah,0DCh
	.DB	40h,0DFh,0Bh,66h
	.DB	37h,0D8h,3Bh,0F0h
    
	.DB	0A9h,0BCh,0AEh,53h
	.DB	0DEh,0BBh,9Eh,0C5h
	.DB	47h,0B2h,0CFh,7Fh
	.DB	30h,0B5h,0FFh,0E9h
    
	.DB	0BDh,0BDh,0F2h,1Ch
	.DB	0CAh,0BAh,0C2h,8Ah
	.DB	53h,0B3h,93h,30h
	.DB	24h,0B4h,0A3h,0A6h
    
	.DB	0BAh,0D0h,36h,05h
	.DB	0CDh,0D7h,06h,93h
	.DB	54h,0DEh,57h,29h
	.DB	23h,0D9h,67h,0BFh
    
	.DB	0B3h,66h,7Ah,2Eh
	.DB	0C4h,61h,4Ah,0B8h
	.DB	5Dh,68h,1Bh,02h
	.DB	2Ah,6Fh,2Bh,94h
    
	.DB	0B4h,0Bh,0BEh,37h
	.DB	0C3h,0Ch,8Eh,0A1h
	.DB	5Ah,05h,0DFh,1Bh
	.DB	2Dh,02h,0EFh,8Dh
.END 


НПП "СЕМИКО" (383) 271-01-25 (многоканальный)