📄 crc32.inc
字号:
; ----------------------------------------------------- ;
; CRC32 checksum algorithm (Ethernet, FDDI) ;
; ----------------------------------------------------- ;
align 4
proc CRC32_Init,CRC32:PDWORD
mov eax,[CRC32]
mov dword [eax],$FFFFFFFF
ret
endp
align 4
proc CRC32_Update uses ebx,Buffer:PBYTE,BufSize:DWORD,CRC32:PDWORD
mov ebx,[CRC32]
mov ebx,[ebx]
mov ecx,[BufSize]
jecxz .crc32_end
mov edx,[Buffer]
.crc32_loop:
mov eax,ebx
shl eax,8
shr ebx,24
xor bl,[edx]
mov ebx,[crc32_table+ebx*4]
xor ebx,eax
inc edx
loop .crc32_loop
.crc32_end:
mov eax,[CRC32]
mov [eax],ebx
ret
endp
align 4
proc CRC32_Final,CRC32:PDWORD
mov eax,[CRC32]
xor dword [eax],$FFFFFFFF
ret
endp
; ----------------------------------------------------- ;
; CRC32b checksum algorithm (ZMODEM, PKZIP) ;
; ----------------------------------------------------- ;
align 4
proc CRC32b_Init,CRC32b:PDWORD
mov eax,[CRC32b]
mov dword [eax],$FFFFFFFF
ret
endp
align 4
proc CRC32b_Update uses ebx,Buffer:PBYTE,BufSize:DWORD,CRC32b:PDWORD
mov ebx,[CRC32b]
mov ebx,[ebx]
mov ecx,[BufSize]
jecxz .crc32b_end
mov edx,[Buffer]
.crc32b_loop:
mov eax,ebx
shr eax,8
xor bl,[edx]
and ebx,255
mov ebx,[crc32b_table+ebx*4]
xor ebx,eax
inc edx
loop .crc32b_loop
.crc32b_end:
mov eax,[CRC32b]
mov [eax],ebx
ret
endp
align 4
proc CRC32b_Final,CRC32b:PDWORD
mov eax,[CRC32b]
xor dword [eax],$FFFFFFFF
ret
endp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -