📄 cksum.lst
字号:
C51 COMPILER V7.09 CKSUM 07/27/2007 15:11:24 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE CKSUM
OBJECT MODULE PLACED IN CKSUM.obj
COMPILER INVOKED BY: F:\Keil\C51\BIN\C51.EXE tcp\CKSUM.C LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\CKSUM.lst) OBJECT(CKSUM
-.obj)
line level source
1 /*
2 ;-------------------------------------------------------------------------
3 ; Copyright (c) 2002 Jim Brady
4 ; Do not use commercially without author's permission
5 ; Last revised August 2002
6 ; CKSUM.A51
7 ;
8 ; This computes the internet checksum on an 8051
9 ;
10 ; Call from C program: uint cksum(UCHAR * buf, uint length);
11 ; Where * buf is pointer to first char (must be in space)
12 ; and "length" is number of bytes (not words) to sum over
13 ;-------------------------------------------------------------------------
14 */
15 #include "net.h"
16 #include "utils.h"
17
18 uint cksum(UCHAR *check,uint length) //计算校验和
19 {
20 1 long sum=0;
21 1 uint i;
22 1 uint *ptr;
23 1 uint t;
24 1 ptr=(uint *)check;
25 1
26 1 for (i=0;i<(length)/2;i++)
27 1 {
28 2 t = *ptr++;
29 2 #ifdef __LITTLEENDIAN__
t = ntohs((char*)&t, 0);
#endif
32 2 sum += t;
33 2 }
34 1 if (length&0x01)//表示长度为单数
35 1 {
36 2 t = (*ptr);
37 2
38 2 #ifdef __LITTLEENDIAN__
// t = ReadUInt16((char*)&t, 0);
t = t<<8;
#endif
42 2 sum = sum+(t&0xff00);
43 2 // sum += t;
44 2 }
45 1 sum=(sum&0xffff)+((sum>>16)&0xffff);//高16位和低16位相加
46 1 if(sum&0xffff0000)
47 1 {//表示有进位
48 2 sum++;
49 2 }
50 1 return ( (uint)((sum)&0xffff));
51 1 // return ( (uint)(~((sum)&0xffff)));
52 1 }
53
54
C51 COMPILER V7.09 CKSUM 07/27/2007 15:11:24 PAGE 2
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 326 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 13
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -