李战:
再次改写CRC32汇编代码,估计这次应该最快了!bjwf来挑刺啊...
[阅读: 665] 2005-11-26 01:30:47
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)