home *** CD-ROM | disk | FTP | other *** search
/ Super Net 1 / SUPERNET_1.iso / PC / OTROS / MSDOS / WATTCP / WNWATTCP.ZIP / ELIB / INCHKSUM.ASM < prev    next >
Encoding:
Assembly Source File  |  1992-02-10  |  1.4 KB  |  76 lines

  1. ;
  2. ;
  3. ;  Usage :
  4. ;           void far *inchksum()
  5. ;
  6. ;  Internet compatible 1's complement checksum
  7. ;
  8. ;  (c) 1990 University of Waterloo,
  9. ;           Faculty of Engineering,
  10. ;           Engineering Microcomputer Network Development Office
  11. ;
  12. ;  version
  13. ;
  14. ;    0.1    17 Dec -1990   E. P. Engelke
  15. ;
  16. ;
  17.         include masmdefs.hsm
  18.         include model.hsm
  19.  
  20. codedef INCHKSUM
  21. datadef
  22.  
  23. cstart  INCHKSUM
  24. cpublic inchksum
  25.         ; Compute 1's-complement sum of data buffer
  26.         ;
  27.         ; unsigned lcsum( usigned far *buf, unsigned cnt)
  28.     push    DS
  29.     push    SI
  30.     push    BX
  31.         lds     SI, +@AB + 0 [BP]
  32.     mov     CX, +@AB + 4 [BP]       ; cx = cnt
  33.  
  34.     mov    BL, CL
  35.  
  36.     shr     CX, 1            ; group into words
  37.     xor    DX, DX            ; set checksum to 0
  38.         cld
  39. ;    jcxz    remain
  40.         clc
  41. deloop: lodsw
  42.     adc    DX, AX
  43.     loop    deloop
  44.  
  45. ; resolve remainder
  46. ;loop2:    adc     DX, 0
  47. ;    jc      loop2
  48.         adc     DX, 0                   ; only two necessary
  49.         adc     DX, 0
  50.  
  51. remain: and     BL, 1
  52.     jz    done
  53. ;
  54.         xor     AH, AH
  55.  
  56.     lodsb
  57. ;    clc
  58. ;    add     DX, AX
  59. ;loop3:    adc     DX, 0
  60. ;    jc      loop3
  61.         add     DX, AX
  62.     adc     DX, 0
  63.     adc     DX, 0
  64.  
  65. done:   mov    AX,DX        ; result into ax
  66.         or      AX,AX
  67. ;    jnz     ok
  68. ;    xchg    AL,AH        ; byte swap result (8088 is little-endian)
  69. ;    mov     AX, 0ffffh
  70. ok:    pop    BX
  71.     pop    SI
  72.     pop     DS
  73. creturn inchksum
  74. cend    INCHKSUM
  75.         end
  76.