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;
各种哈希函数算法请参考:
本文提供了BKDRHash和DJBHash两种哈希函数的汇编语言实现细节,前者通过循环累加的方式计算哈希值,后者采用位移和加法实现。同时还附带了对应的Pascal语言版本,便于理解。
5420

被折叠的 条评论
为什么被折叠?



