📄 crc.asm
字号:
//============================================================================
//函数名称:unsigned int cal_crc(unsigned char *ptr, unsigned char len);
//功能:CRC校验
//入口参数:1.校验数据的地址2.校验数据的个数
//出口参数:校验码
//日期:2003/05/20
//=============================================================================
.DEFINE P_WatchDog_Clear 0x7012
.IRAM
.VAR Shift;
.VAR crc; //存储C_CRC校验码
.CODE
.PUBLIC _cal_crc;
_cal_crc:
push bp to [sp];
push r1,r2 to [sp]; //压栈保护
r1=0x0001;
[P_WatchDog_Clear]=r1;
r1 = 0x0000;
[crc] = r1; //变量清零
pop r1,r2 from [sp]
bp = sp + 1
r1 = [bp + 3]; //校验数据的地址
r2 = [bp + 4]; //校验数据的个数
bp = r1;
crcOutLoop:
bp = [r1++] //校验数据的地址加一
r3 = 0x0080;
[Shift] = r3; //为位移服务
crcInLoop:
r3 = [crc];
r3 &= 0x8000;
jz crc1;
r4 = [crc];
r4 = r4 lsl 1; //左移
r3 = 0x1021;
r4 ^= r3;
[crc] = r4;
jmp crc2;
crc1:
r4 = [crc];
r4 = r4 lsl 1; //左移
[crc] = r4 //保存C_CRC检验码
crc2:
r4 = [Shift];
r4 &= bp;
jz crc3;
r3 = [crc];
r4 = 0x1021;
r3 ^= r4 ; //异或 0x1021
[crc] = r3; //保存C_CRC检验码
crc3:
r4 = [Shift];
r4 = r4 lsr 1; //右移
jz crc4;
[Shift] = r4;
jmp crcInLoop;
crc4:
r2 -= 1;
jz exit;
jmp crcOutLoop;
exit:
r1 = [crc]
pop bp,bp from [sp]
retf;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -