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 // begin // Result := (Result * 131) + PByte(buf)^; // Inc(PByte(buf)); // Dec(count); // end; end; function DJBHash(buf: Pointer; count: Integer) : Cardinal; assembler; asm PUSH EDI PUSH EBX XOR EBX, EBX MOV ECX, EAX MOV EAX, 5381 @LOOP: TEST EDX, 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; 各種哈希函數(shù)算法請參考:http://www.partow.net/programming/hashfunctions/ |