I dont know how much u know about crc ing but pretty much all it does is XOR a sectionbyte by byte or word by word....(etc.) to ensure that it does not change
normally in the following fashion of somesort
/************************************
* This C code snippet Wont show u what an *
* asm code will look like but will let understand *
* the theory behind it... I hope *
***********************************/
int i=0;
char *SectionToBeChecked;
char GoodCheck = WhateverIsValueOfGoodCheck;
char XORValue = 0;
/************************************
* iterate through the section Byte by Byte
* XOR'ing the value of each byte with the
* current XORValue variable and storing it there
* so any one different byte should change the
* final value of the variable
***********************************/
while(i<LengthOfSection)
{
XORValue^=SectionToBeChecked[i++];
}
/* test the variable agianst the good */
if(XORValue == GoodCheck) // passed the CRC
else /* DOH!!!!!!!! But Ma-arge! */
anyway... find a tiny loop that is just XOR-ing a String and you should have found a CRC procedure
then u got all sorts of ways to fix your problem

gl hope i helped