home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 2 BBS / 02-BBS.zip / MLNK10CS.ZIP / CRC_ASM.ASM < prev    next >
Assembly Source File  |  1990-03-08  |  3KB  |  89 lines

  1. ;    Static Name Aliases
  2. ;
  3.     TITLE   CRC_ASM -- Assembler Routines to do faster CRC's
  4. ;    NAME    CRC_ASM
  5. ;
  6.         include version.inc
  7.         include msdos.inc
  8.         include cmacros.inc
  9.         
  10.         .sall
  11. .list
  12. ;
  13. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  14.  
  15. sBegin   code
  16.  
  17.          assumes  cs,code
  18.          assumes  ds,data
  19.                                 
  20. ;------------------------------------------------------------------------
  21. ;       CRC_XMODEM - THIS ROUTINE CALCULATES THE CRC-XMODEM ALGORITHM.
  22. ;
  23. ;    Copyright, Renex Corportion
  24. ;    1513 Davis Ford Road
  25. ;    Woodbridge, Va 22192.
  26. ;
  27. ;    Licensed to Vincent Perriello for use and distribution 
  28. ;    with BinkleyTerm.
  29. ;
  30. ;       ON ENTRY:       CX = OLD CRC
  31. ;                       AL = NEW BYTE
  32. ;       ON EXIT:        BX = NEW CRC, AX, DX LOST OTHER REGISTERS UNCHANGED.
  33. ;
  34. ;       POLYNOMIAL: C^16 + C^12 + C^5 + 1
  35. ;
  36. ;       IN THE FOLLOWING:
  37. ;       C1-C16 ARE THE CRC, D1-D8 ARE THE NEW BYTE, X1-X8 ARE C9-C16 XOR D1-D8.
  38. ;       R1-R16 ARE THE NEW CRC AND ARE FORMED BY XORING ALL THE VALUES IN
  39. ;       THE APPROPRIATE COLUMNS
  40. ;
  41. ;          HIGH ORDER BYTE                 LOW ORDER BYTE
  42. ;                            ORIGINAL CRC
  43. ;   C16 C15 C14 C13 C12 C11 C10  C9  C8  C7  C6  C5  C4  C3  C2  C1
  44. ;
  45. ;                              NEW CRC
  46. ;   R16 R15 R14 R13 R12 R11 R10  R9  R8  R7  R6  R5  R4  R3  R2  R1
  47. ;  -----------------------------------------------------------------
  48. ;    C8  C7  C6  C5  C4  C3  C2  C1  X8  X7  X6  X5  X4  X3  X2  X1
  49. ;    X4  X3  X2  X1              X8  X7  X6  X5      X8  X7  X6  X5
  50. ;                X8  X7  X6  X5  X4  X3  X2  X1
  51. ;    X8  X7  X6  X5
  52. ;
  53. ;------------------------------------------------------------------------
  54. ;
  55. cProc    xcrc,<PUBLIC>
  56.  
  57.          parmW   CRC
  58.          parmB   NEWBYTE
  59.  
  60. cBegin
  61.  
  62.          MOV     CX,CRC          ;GET THE OLD CRC TO CX
  63.          MOV     AL,NEWBYTE
  64.  
  65.          XOR     AH,AH           ;ZERO TOP HALF OF AX
  66.          XOR     AL,CH           ;CREATE X IN AX FROM XOR OF NEW DATA AND HI CRC
  67.          MOV     BH,CL           ;OLD LOW CRC TO HIGH RESULT
  68.          MOV     BL,AL           ;X TO LOW RESULT SETS 8 BITS
  69.          MOV     DL,AL           ;TEMP COPY OF X
  70.          AND     DL,0F0H         ;HI 4 BITS ONLY
  71.          XOR     BH,DL           ;TO HI RESULT
  72.          ROL     AX,1            ;ROTATE ONE BIT
  73.          XOR     BH,AH           ;X8 TO BIT 9 OF RESULT
  74.          MOV     DL,AL           ;TEMP COPY OF X RIGHT 1
  75.          AND     DL,0E0H
  76.          XOR     BL,DL
  77.          ROL     AX,1            ;X LEFT 3 MORE, TOTAL OF 4
  78.          ROL     AX,1
  79.          ROL     AX,1
  80.          XOR     BL,AH
  81.          XOR     BH,AL
  82.          ROL     AX,1            ;X LEFT 5 NOW
  83.          XOR     AX,BX
  84.  
  85. cEnd
  86.  
  87. sEnd
  88. END
  89.