中国开发网: 论坛: 程序员情感CBD: 贴子 246593
李战
再次改写CRC32汇编代码,估计这次应该最快了!bjwf来挑刺啊...
function CRC32(const Data; Size, CRC: LongWord): LongWord;
//EAX=@Data
//EDX=Size
//ECX=CRC
asm
PUSH EBX
MOV EBX, EAX //EBX := @Data
MOV EAX, ECX //EAX := CRC
PUSH ESI
CMP EDX, 8 //if Size<0 then goto less8
JB @less8
@loop8: MOVZX ESI, BYTE PTR [EBX]
MOVZX ECX, AL
XOR ECX, ESI
SHR EAX, 8
XOR EAX, DWORD PTR [CRC32Table + ECX*4]
INC EBX
MOVZX ESI, BYTE PTR [EBX]
MOVZX ECX, AL
XOR ECX, ESI
SHR EAX, 8
XOR EAX, DWORD PTR [CRC32Table + ECX*4]
INC EBX
MOVZX ESI, BYTE PTR [EBX]
MOVZX ECX, AL
XOR ECX, ESI
SHR EAX, 8
XOR EAX, DWORD PTR [CRC32Table + ECX*4]
INC EBX
MOVZX ESI, BYTE PTR [EBX]
MOVZX ECX, AL
XOR ECX, ESI
SHR EAX, 8
XOR EAX, DWORD PTR [CRC32Table + ECX*4]
INC EBX
SUB EDX, 8
JNB @loop8
@less8: JE @exit //if Size=0 then exit
@loop: MOVZX ESI, BYTE PTR [EBX]
MOVZX ECX, AL
XOR ECX, ESI
SHR EAX, 8
XOR EAX, DWORD PTR [CRC32Table + ECX*4]
INC EBX
DEC EDX
JNE @loop
@exit: POP ESI
POP EBX
end;
李战(leadzen)

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录