home *** CD-ROM | disk | FTP | other *** search
/ Garbo / Garbo.cdr / pc / source / mssup201.arc / ADDBFCRC.ASM next >
Encoding:
Assembly Source File  |  1988-08-25  |  1.0 KB  |  62 lines

  1. ;CRC calculation
  2. ;(C) Copyright 1987 Rahul Dhesi, All Rights Reserved
  3.  
  4. public    _addbfcrc
  5.  
  6. dgroup    group    _data
  7.     assume ds:dgroup,es:nothing
  8. _data    segment word public 'data'
  9. extrn    _crccode:word
  10. extrn    _crctab:word
  11. _data    ends
  12.  
  13. ;Declare Segments
  14. _text    segment byte public 'code'
  15.     assume cs:_text,ds:dgroup
  16.  
  17. _addbfcrc proc near
  18.  
  19.     push    bp
  20.     mov    bp,sp
  21.     push    di
  22.     push    si
  23.  
  24.     mov    ah,0bh
  25.     int    21h            ;check console status & process ^C
  26.  
  27.     mov    ax,_crccode            ;crccode
  28.     mov    di,[bp+4]            ;buffer address
  29.     mov    cx,[bp+6]            ;byte count
  30.  
  31.     jcxz    zero_trip        ;zero-trip loop
  32. loop:
  33.     sub    bh,bh
  34.     mov    bl,al
  35.     xor    bl,ds:[di]        ;now bx = (crccode xor c) & 0x00ff
  36.     shl    bx,1            ;double bx (because items are 2 bytes)
  37.  
  38.     mov    dx,word ptr _crctab[bx]    ;dx = exp2
  39.  
  40.     sub    bh,bh
  41.     mov    bl,ah            ;bx <- exp1
  42.  
  43.     xor    bx,dx            ;bx <- exp1 xor exp2
  44.     mov    ax,bx            ;crccode <- exp1 xor exp2
  45.     inc    di            ;inc buffer pointer
  46.     loop    loop            ;dec CX, jump if not zero
  47.  
  48. done:
  49.     mov    _crccode,ax
  50.  
  51. zero_trip:
  52.     pop    si
  53.     pop    di
  54.     mov    sp,bp
  55.     pop    bp
  56.     ret
  57. _addbfcrc     endp
  58.  
  59. _text    ends
  60.  
  61.     end
  62.