DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 144|回复: 0
打印 上一主题 下一主题

Delphi:高效的哈希函数

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-16 16:38:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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;?
                          
                       
                          
                               
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-7-23 20:59 , 耗时 0.090152 秒, 19 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表