Цитата(zombi @ Feb 2 2009, 20:33)

Но не силен я в СИ !
...
Помогите разжевать вот эту запись плиз...
Вот вам из моего старинного проекта, на асме.
На 100% не уверен, но на 98%

этот код дает то же значение CRC, что и вышеприведенный на Си
Для проверки:
Код
01 05 FF 11 22 33 00 00 82 13 (CRC = 82 13)
FF 04 11 22 33 00 00 4B 08 (CRC = 4b 08)
CODE
#include "io8515.h"
RSEG CHECKSUM(1)
RSEG DEBUG(1)
;===============================================================;
; Calculate Flash code XModem CRC-CCITT ;
;===============================================================;
; EXTERN ByteCRC
CalcFlashCRC:
clr Z0
clr Z1
clr r16
clr r17
cal1: lpm ; Calculate CRC for next byte
mov r20,r0
rcall ByteCRC
adiw Z0,0x01
cpi Z0,low(SFB(CHECKSUM))
ldi r20,high(SFB(CHECKSUM))
cpc Z1,r20
brlo cal1
cal2: rjmp cal2 ; Flash CRC = DW 0x(r16:r17)
;---------------------------------------------------------------;
; Calculate one byte of XModem CRC-CCITT ;
; Function: int ByteCRC (int XmCRC,char Byte); ;
; Input: r17:r16 = Old value CRC-CCITT ;
; r20 = input byte ;
; Output: r17:r16 = New value CRC-CCITT ;
;---------------------------------------------------------------;
; PUBLIC ByteCRC
ByteCRC:eor r17,r20
ldi r21,8
bci1: lsl r16
rol r17
brcc bci2
ldi r20,0x10
eor r17,r20
ldi r20,0x21
eor r16,r20
bci2: dec r21
brne bci1
ret
;===============================================================;
END