技术中心
 
 

Delphi:高效的哈希函数

   日期:2011-06-10     来源:互联网    
核心提示:view plaincopy to clipboardprint?01.function BKDRHash(buf: Pointer; count: Integer) : Cardinal; assembler; 02.asm03.
view plaincopy to clipboardprint?
01.function BKDRHash(buf: Pointer; count: Integer) : Cardinal; assembler;
02.asm
03. PUSHEBX;
04. XOR EBX, EBX
05. MOV ECX, EAX
06. XOR EAX, EAX
07.@LOOP:
08. TESTEDX, EDX
09. JZ @EXIT
10. MOV BL,[ECX]
11. IMULEAX, 131
12. ADD EAX, EBX
13. INC ECX
14. DEC EDX
15. JMP @LOOP
16.@EXIT:
17. POP EBX
18.//----------------------------
19.// Pascal:
20.//
21.//Result := 0;
22.//while count > 0 do
23.//begin
24.// Result := (Result * 131) + PByte(buf)^;
25.// Inc(PByte(buf));
26.// Dec(count);
27.//end;
28.end;
29.function DJBHash(buf: Pointer; count: Integer) : Cardinal; assembler;
30.asm
31. PUSHEDI
32. PUSHEBX
33. XOR EBX, EBX
34. MOV ECX, EAX
35. MOV EAX, 5381
36.@LOOP:
37. TESTEDX, EDX
38. JZ @EXIT
39. MOV EDI, EAX
40. SHL EDI, 5
41. ADD EAX, EDI
42. MOV BL, [ECX]
43. ADD EAX, EBX
44. INC ECX
45. DEC EDX
46. JMP @LOOP
47.@EXIT:
48. POP EBX
49. POP EDI
50.//----------------------------
51.// Pascal:
52.//
53.//Result := 5381;
54.//while count > 0 do
55.//begin
56.// Result := ((Result shl 5) + Result) + PByte(buf)^;
57.// Inc(PByte(buf));
58.// Dec(count);
59.//end;
60.end;
function BKDRHash(buf: Pointer; count: Integer) : Cardinal; assembler;
asm
PUSHEBX;
XOR EBX, EBX
MOV ECX, EAX
XOR EAX, EAX
@LOOP:
TESTEDX, EDX
JZ @EXIT
MOV BL,[ECX]
IMULEAX, 131
ADD EAX, EBX
INC ECX
DEC EDX
JMP @LOOP
@EXIT:
POP EBX
//----------------------------
// Pascal:
//
//Result := 0;
//while count > 0 do
//begin
// Result := (Result * 131) + PByte(buf)^;
// Inc(PByte(buf));
// Dec(count);
//end;
end;
function DJBHash(buf: Pointer; count: Integer) : Cardinal; assembler;
asm
PUSHEDI
PUSHEBX
XOR EBX, EBX
MOV ECX, EAX
MOV EAX, 5381
@LOOP:
TESTEDX, EDX
JZ @EXIT
MOV EDI, EAX
SHL EDI, 5
ADD EAX, EDI
MOV BL, [ECX]
ADD EAX, EBX
INC ECX
DEC EDX
JMP @LOOP
@EXIT:
POP EBX
POP EDI
//----------------------------
// Pascal:
//
//Result := 5381;
//while count > 0 do
//begin
// Result := ((Result shl 5) + Result) + PByte(buf)^;
// Inc(PByte(buf));
// Dec(count);
//end;
end;
 
  
  
  
  
 
更多>同类技术
 
全年征稿 / 资讯合作
 
推荐图文
推荐技术
可能喜欢