📄 hash.lst
字号:
C51 COMPILER V7.50 HASH 07/19/2006 10:05:12 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE HASH
OBJECT MODULE PLACED IN hash.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE hash.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "hash.h"
2
3 static code U32 box[] =
4 {
5 0x9dad7287, // 0x000
6 0xb1cf8e83, // 0x010
7 0x7ea820c4, // 0x020
8 0x99404a66, // 0x030
9 0x4f481d45, // 0x040
10 0x32889d2c, // 0x050
11 0x698c0cca, // 0x060
12 0xfd6d6e31, // 0x070
13 0xefb10c53, // 0x080
14 0x2092bd13, // 0x090
15 0x2672c073, // 0x0a0
16 0x378453a7, // 0x0b0
17 0x3ff6d550, // 0x0c0
18 0x06316131, // 0x0d0
19 0xe94aeb76, // 0x0e0
20 0x54c1f029, // 0x0f0
21 0x58872a69, // 0x100
22 0x720a1dc3, // 0x110
23 0x006662b6, // 0x120
24 0x3b14d84f, // 0x130
25 0x810f23bb, // 0x140
26 0xa6c5e650, // 0x150
27 0xcb5b3089, // 0x160
28 0x7f38d0ee, // 0x170
29 0xc7922c20, // 0x180
30 0xa6c0496d, // 0x190
31 0x1b4c67f2, // 0x1a0
32 0x20211e44, // 0x1b0
33 0x80f594f9, // 0x1c0
34 0x389b1bbf, // 0x1d0
35 0xae8b5fcf, // 0x1e0
36 0xda30d0fb // 0x1f0
37 };
38
39 U8 Hash(U8 tl,U8 th,U8 *addr,U8 const len)
40 {
41 1
42 1 static U8 xdata box_area1[32];
43 1 static U8 xdata box_area2[32];
44 1 static U8 xdata box_area3[32];
45 1
46 1 static U8 i,j,k;
47 1 static U32 cnt=0;//0xFFdc8fe1; //计数器
48 1 static LENFLAG=0;
49 1
50 1 U16 ntl=0;
51 1 U16 nth=0;
52 1 U32 naddr=0;
53 1 U32 rval;
54 1
55 1 int m,n;
C51 COMPILER V7.50 HASH 07/19/2006 10:05:12 PAGE 2
56 1
57 1
58 1 for(n=0;n<3;n++)
59 1 naddr=(naddr<<8)+addr[n];
60 1
61 1 if(LENFLAG!=len)
62 1 {
63 2 LENFLAG=len;
64 2 for(n=1;n<=31;n++)
65 2 {
66 3 box_area1[n]=(len+cnt+n)%31;
67 3 box_area2[n]=(len+cnt+n)%31;
68 3 box_area3[n]=(len+cnt+4*n)%31;
69 3 }
70 2 }
71 1
72 1
73 1 //获取下标
74 1 switch(tl%3)
75 1 {
76 2 case 0:
77 2 i=box_area1[(cnt^(~j))%31];
78 2 break;
79 2 case 1:
80 2 i=box_area2[(cnt^(~j))%31];
81 2 break;
82 2 case 2:
83 2 i=box_area3[(cnt^(~j))%31];
84 2 }
85 1
86 1 switch(th%3)
87 1 {
88 2 case 0:
89 2 j=box_area1[(cnt^(~i))%31];
90 2 break;
91 2 case 1:
92 2 j=box_area2[(cnt^(~i))%31];
93 2 break;
94 2 case 2:
95 2 j=box_area3[(cnt^(~i))%31];
96 2 }
97 1
98 1 switch(naddr%3)
99 1 {
100 2 case 0:
101 2 k=box_area1[(cnt+k)%31];
102 2 break;
103 2 case 1:
104 2 k=box_area2[(cnt+k)%31];
105 2 break;
106 2 case 2:
107 2 k=box_area3[(cnt+k)%31];
108 2 }
109 1
110 1 ntl=tl&0xFFFFFFFF;
111 1 nth=th&0xFFFFFFFF;
112 1 m=8;
113 1 do{
114 2 ntl|=~(ntl<<m+j);
115 2 nth|=~(nth<<m+i);
116 2 naddr|=~(naddr<<m+k);
117 2 m-=8;
C51 COMPILER V7.50 HASH 07/19/2006 10:05:12 PAGE 3
118 2 }while(m>=0);
119 1
120 1
121 1
122 1 rval=(ntl^box[i+(ntl&0x20)]);
123 1 rval+=(nth^box[j+(nth&0x20)]);
124 1 rval+=(naddr^box[k+(naddr&0x20)]);
125 1
126 1
127 1 cnt++;
128 1
129 1 if(!(rval&len))
130 1 return len;
131 1
132 1 if(!(rval%len))
133 1 return rval&len;
134 1
135 1 return rval%len;
136 1 }
137
138
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1159 ----
CONSTANT SIZE = 128 ----
XDATA SIZE = 96 ----
PDATA SIZE = ---- ----
DATA SIZE = 9 20
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 + -