学海荡舟手机网
导航

主页 > 电子设备技术 > 电器电路基础 > > 详细内容

Delphi:高效的哈希函数

  view plaincopy to clipboardprint?
01.function BKDRHash(buf: Pointer; count: Integer) : Cardinal; assembler;   
02.asm 
03.       PUSH  EBX;   
04.       XOR   EBX, EBX   
05.       MOV   ECX, EAX   
06.       XOR   EAX, EAX   
07.@LOOP:   
08.       TEST  EDX, EDX   
09.       JZ    @EXIT   
10.       MOV   BL,  [ECX]   
11.       IMUL  EAX, 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.       PUSH  EDI   
32.       PUSH  EBX   
33.       XOR   EBX, EBX   
34.       MOV   ECX, EAX   
35.       MOV   EAX, 5381 
36.@LOOP:   
37.       TEST  EDX, 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
       PUSH  EBX;
       XOR   EBX, EBX
       MOV   ECX, EAX
       XOR   EAX, EAX
@LOOP:
       TEST  EDX, EDX
       JZ    @EXIT
       MOV   BL,  [ECX]
       IMUL  EAX, 131
       ADD   EAX, EBX
       INC   ECX
       DEC   EDX
       JMP   @LOOP
@EXIT:
       POP   EBX
//----------------------------
// Pascal:
//
//  Result := 0;
//  while count > 0 do

相关文章