home *** CD-ROM | disk | FTP | other *** search
/ Super Net 1 / SUPERNET_1.iso / PC / OTROS / MSDOS / WATTCP / MSWATTCP.ZIP / ELIB / INCHKSUM.ASM < prev    next >
Encoding:
Assembly Source File  |  1993-03-25  |  1.5 KB  |  77 lines

  1. ; File: inchksum.asm
  2. ;
  3. ; 16-Jun-92 lr
  4. ;
  5. ;  Usage :
  6. ;     unsigned inchksum( unsigned far *buf, unsigned cnt)
  7. ;
  8. ;  Internet compatible 1's complement checksum
  9. ;
  10. ;  (c) 1990 University of Waterloo,
  11. ;           Faculty of Engineering,
  12. ;           Engineering Microcomputer Network Development Office
  13. ;
  14. ;  version
  15. ;
  16. ;    0.1    17 Dec -1990   E. P. Engelke
  17. ;  modified 
  18. ;
  19. ;    10 Feb - 1992  G. Mercaldo
  20. ;
  21.         include masmdefs.hsm
  22.         include model.hsm
  23.  
  24. codedef INCHKSUM
  25. datadef
  26.  
  27. cstart  INCHKSUM
  28. cpublic inchksum
  29.         ; Compute 1's-complement sum of data buffer
  30.         ;
  31.         ; unsigned lcsum( unsigned far *buf, unsigned cnt)
  32.     push    DS
  33.         lds     SI, +@AB + 0 [BP]
  34.     mov     CX, +@AB + 4 [BP]       ; cx = cnt in bytes
  35.  
  36.         mov     BL, CL
  37.  
  38.     shr     CX, 1            ; group into words
  39.     xor    DX, DX            ; set checksum to 0
  40.     
  41.     shr    CX, 1            ; 10-feb-92 gm to use prefetch
  42.     jnc    deloop            ; decrease number of cycles
  43.         cld                ; increasing number of statements
  44.         clc                ; inside the cycle
  45.     lodsw
  46.     adc    DX, AX
  47.     
  48. deloop:
  49.     jc    deloop1
  50.         cld
  51.         clc
  52. deloop1:lodsw
  53.     adc    DX, AX
  54.     lodsw
  55.     adc    DX, AX
  56.     loop    deloop1
  57.  
  58.         adc     DX, 0                   ; only two necessary
  59.         adc     DX, 0
  60.  
  61. remain: and     BL, 1
  62.         jz      done
  63. ;
  64.         xor     AH, AH
  65.         lodsb
  66.         add     DX, AX
  67.         adc     DX, 0
  68.         adc     DX, 0
  69.  
  70. done:   mov    AX,DX        ; result into ax
  71.         or      AX,AX
  72. ok:     pop     DS
  73. creturn inchksum
  74. cend    INCHKSUM
  75.         end
  76. ; end of file inchksum.asm
  77.