home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 5 / ctrom5b.zip / ctrom5b / PROGRAM / ASM / ALIB30B / MATH07.ASM < prev    next >
Assembly Source File  |  1994-11-29  |  4KB  |  122 lines

  1.     PAGE    66,132
  2. ;******************************** MATH06.ASM *********************************
  3. LIBSEG           segment byte public "LIB"
  4.         assume cs:LIBSEG , ds:nothing
  5. ;----------------------------------------------------------------------------
  6.     include    mac.inc
  7.  
  8. comment 
  9. ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -(  MATH   )
  10. ; WORD_CRC1 - undate CRC word sum for next byte
  11. ;  inputs:  bx = current value for crc
  12. ;           al = new byte to add to crc formation
  13. ;
  14. ;  output:  bx = updated crc sum
  15. ;
  16. ;  note:  WORD_CRC1 must be called to CRC each byte of a block of
  17. ;         data.  Is is a little slower than WORD_CRC2
  18. ;
  19. ;* * * * * * * * * * * * * *
  20. 
  21.  
  22.         public  WORD_CRC1
  23. WORD_CRC1   proc    far
  24.     push    ax
  25.     push    cx
  26.     mov    cl,4
  27.     xor    bh,al
  28.     mov    al,bh
  29.     rol    ax,cl
  30.     xor    bx,ax
  31.     rol    ax,1
  32.     xchg    bh,bl
  33.     xor    bx,ax
  34.     ror    ax,cl
  35.     and    al,0e0h
  36.     xor    bx,ax
  37.     ror    ax,1
  38.     xor    bh,al
  39.     pop    cx
  40.     pop    ax
  41.     retf
  42. WORD_CRC1   endp
  43.  
  44. comment 
  45. ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -(  MATH   )
  46. ; WORD_CRC2 - fast 16bit CRC for a buffer of data
  47. ;  inputs:  ds:si = pointer to buffer
  48. ;              ax = starting CRC value
  49. ;              cx = length of buffer
  50. ;  output:     ax = computed CRC
  51. ;* * * * * * * * * * * * * *
  52. 
  53.  
  54.         public  WORD_CRC2
  55. WORD_CRC2   proc    far
  56.          push   ds
  57.          or     cx,cx
  58.          jz     @@done
  59. @@loop:
  60.          xor    bh,bh
  61.          mov    bl,ah
  62.          mov    ah,al
  63.          lodsb
  64.          shl    bx,1
  65.          xor    ax,[crctab+bx]
  66.          loop   @@loop
  67. @@done:
  68.          pop    ds
  69.          retf
  70. ;            0
  71. crctab   dw     00000h, 01021h, 02042h, 03063h, 04084h, 050a5h, 060c6h, 070e7h
  72.          dw     08108h, 09129h, 0a14ah, 0b16bh, 0c18ch, 0d1adh, 0e1ceh, 0f1efh
  73. ;            1
  74.          dw     01231h, 00210h, 03273h, 02252h, 052b5h, 04294h, 072f7h, 062d6h
  75.          dw     09339h, 08318h, 0b37bh, 0a35ah, 0d3bdh, 0c39ch, 0f3ffh, 0e3deh
  76. ;            2
  77.          dw     02462h, 03443h, 00420h, 01401h, 064e6h, 074c7h, 044a4h, 05485h
  78.          dw     0a56ah, 0b54bh, 08528h, 09509h, 0e5eeh, 0f5cfh, 0c5ach, 0d58dh
  79. ;            3
  80.          dw     03653h, 02672h, 01611h, 00630h, 076d7h, 066f6h, 05695h, 046b4h
  81.          dw     0b75bh, 0a77ah, 09719h, 08738h, 0f7dfh, 0e7feh, 0d79dh, 0c7bch
  82. ;            4
  83.          dw     048c4h, 058e5h, 06886h, 078a7h, 00840h, 01861h, 02802h, 03823h
  84.          dw     0c9cch, 0d9edh, 0e98eh, 0f9afh, 08948h, 09969h, 0a90ah, 0b92bh
  85. ;            5
  86.          dw     05af5h, 04ad4h, 07ab7h, 06a96h, 01a71h, 00a50h, 03a33h, 02a12h
  87.          dw     0dbfdh, 0cbdch, 0fbbfh, 0eb9eh, 09b79h, 08b58h, 0bb3bh, 0ab1ah
  88. ;            6
  89.          dw     06ca6h, 07c87h, 04ce4h, 05cc5h, 02c22h, 03c03h, 00c60h, 01c41h
  90.          dw     0edaeh, 0fd8fh, 0cdech, 0ddcdh, 0ad2ah, 0bd0bh, 08d68h, 09d49h
  91. ;            7
  92.          dw     07e97h, 06eb6h, 05ed5h, 04ef4h, 03e13h, 02e32h, 01e51h, 00e70h
  93.          dw     0ff9fh, 0efbeh, 0dfddh, 0cffch, 0bf1bh, 0af3ah, 09f59h, 08f78h
  94. ;            8
  95.          dw     09188h, 081a9h, 0b1cah, 0a1ebh, 0d10ch, 0c12dh, 0f14eh, 0e16fh
  96.          dw     01080h, 000a1h, 030c2h, 020e3h, 05004h, 04025h, 07046h, 06067h
  97. ;            9
  98.          dw     083b9h, 09398h, 0a3fbh, 0b3dah, 0c33dh, 0d31ch, 0e37fh, 0f35eh
  99.          dw     002b1h, 01290h, 022f3h, 032d2h, 04235h, 05214h, 06277h, 07256h
  100. ;            A
  101.          dw     0b5eah, 0a5cbh, 095a8h, 08589h, 0f56eh, 0e54fh, 0d52ch, 0c50dh
  102.          dw     034e2h, 024c3h, 014a0h, 00481h, 07466h, 06447h, 05424h, 04405h
  103. ;            B
  104.          dw     0a7dbh, 0b7fah, 08799h, 097b8h, 0e75fh, 0f77eh, 0c71dh, 0d73ch
  105.          dw     026d3h, 036f2h, 00691h, 016b0h, 06657h, 07676h, 04615h, 05634h
  106. ;            C
  107.          dw     0d94ch, 0c96dh, 0f90eh, 0e92fh, 099c8h, 089e9h, 0b98ah, 0a9abh
  108.          dw     05844h, 04865h, 07806h, 06827h, 018c0h, 008e1h, 03882h, 028a3h
  109. ;            D
  110.          dw     0cb7dh, 0db5ch, 0eb3fh, 0fb1eh, 08bf9h, 09bd8h, 0abbbh, 0bb9ah
  111.          dw     04a75h, 05a54h, 06a37h, 07a16h, 00af1h, 01ad0h, 02ab3h, 03a92h
  112. ;            E
  113.          dw     0fd2eh, 0ed0fh, 0dd6ch, 0cd4dh, 0bdaah, 0ad8bh, 09de8h, 08dc9h
  114.          dw     07c26h, 06c07h, 05c64h, 04c45h, 03ca2h, 02c83h, 01ce0h, 00cc1h
  115. ;            F
  116.          dw     0ef1fh, 0ff3eh, 0cf5dh, 0df7ch, 0af9bh, 0bfbah, 08fd9h, 09ff8h
  117.          dw     06e17h, 07e36h, 04e55h, 05e74h, 02e93h, 03eb2h, 00ed1h, 01ef0h
  118. WORD_CRC2   endp
  119.  
  120. LIBSEG    ENDS
  121. ;;    end
  122.