我抄的,你看看行不行
{ Return a 16-bit CRC number For binary data. }
Function Crc16(Var Data; wo_Size : Word) : Word; Assembler;
Asm
push ds
xor dx, dx
lds si, Data
mov bx, wo_Size
@L1:
xor ah, ah
lodsb
mov cx, 8
shl ax, cl
xor dx, ax
mov cx, 8
@L2:
shl dx, 1
jnc @L3
xor dx, $1021
@L3:
loop @L2
dec bx
jnz @L1
pop ds
mov ax, dx
end; { Crc16. }