home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fresh Fish 8
/
FreshFishVol8-CD2.bin
/
bbs
/
gnu
/
brik-2.0-src.lha
/
brik-2.0
/
addbfcrc.asm
next >
Wrap
Assembly Source File
|
1993-08-30
|
2KB
|
78 lines
; ::[[ @(#) addbfcrc.asm 1.1 89/07/08 10:48:28 ]]::
; assembly implementation of addbfcrc() for Turbo C 2.0 -- small memory model
; The following code was obtained from compiling addbfcrc.c using
; Turbo C 2.0, then hand-optimized. In the interest of making
; faster CRC-32 calculations available to all, I hereby release
; the contents of this file to the public domain. This code is for
; the small memory model only. It will probably need to be revised
; for use with other C compilers.
; -- Rahul Dhesi 1989/07/08
_DATA segment word public 'DATA'
_DATA ends
extrn _crccode:word
extrn _crctab:word
public _addbfcrc
_TEXT segment byte public 'CODE'
DGROUP group _DATA
assume cs:_TEXT,ds:DGROUP,ss:DGROUP
;void addbfcrc (buf, size) char *buf, int size
_addbfcrc proc near
push bp
mov bp,sp
sub sp,2
push si
push di
mov cx,word ptr [bp+6] ;cx = size
mov si,word ptr [bp+4] ;si = buf
xor di,di ;i = 0
jcxz done ;if size = 0, nothing to do
@loop:
; crccode = crctab[(int) ((crccode) ^ (buf[i])) & 0xff] ^
; (((crccode) >> 8) & 0x00FFFFFFL);
; (dx,ax) <- ((crccode) >> 8) & 0x00FFFFFFL
mov dx,word ptr DGROUP:_crccode+2
mov ax,word ptr DGROUP:_crccode
mov al,ah
mov ah,dl
mov dl,dh
xor dh,dh
mov bx,di ;bx <= i
mov bl,byte ptr [bx+si] ;bl <- buf[i]
xor bl,byte ptr DGROUP:_crccode ;bl <- (bl ^ crccode) & 0xff
xor bh,bh ;bx <- bl
shl bx,1
shl bx,1 ;bx <- 4 * bx (for subscript)
xor ax,word ptr DGROUP:_crctab[bx]
xor dx,word ptr DGROUP:_crctab[bx+2]
mov word ptr DGROUP:_crccode+2,dx
mov word ptr DGROUP:_crccode,ax
inc di ; i++
loop @loop
done:
pop di
pop si
mov sp,bp
pop bp
ret
_addbfcrc endp
_TEXT ends
end