home *** CD-ROM | disk | FTP | other *** search
/ Stars of Shareware: Programmierung / SOURCE.mdf / programm / msdos / c / mscwattc / elib / inchksum.asm < prev    next >
Encoding:
Assembly Source File  |  1992-01-14  |  1.5 KB  |  73 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.         lds     SI, +@AB + 0 [BP]
  31.     mov     CX, +@AB + 4 [BP]       ; cx = cnt
  32.  
  33.         mov     BL, CL
  34.  
  35.     shr     CX, 1            ; group into words
  36.     xor    DX, DX            ; set checksum to 0
  37.         cld
  38. ;        jcxz    remain
  39.         clc
  40. deloop: lodsw
  41.     adc    DX, AX
  42.     loop    deloop
  43.  
  44. ; resolve remainder
  45. ;loop2:  adc     DX, 0
  46. ;        jc      loop2
  47.         adc     DX, 0                   ; only two necessary
  48.         adc     DX, 0
  49.  
  50. remain: and     BL, 1
  51.         jz      done
  52. ;
  53.         xor     AH, AH
  54.         lodsb
  55. ;        clc
  56. ;        add     DX, AX
  57. ;loop3:  adc     DX, 0
  58. ;        jc      loop3
  59.         add     DX, AX
  60.         adc     DX, 0
  61.         adc     DX, 0
  62.  
  63. done:   mov    AX,DX        ; result into ax
  64.         or      AX,AX
  65. ;        jnz     ok
  66. ;    xchg    AL,AH        ; byte swap result (8088 is little-endian)
  67. ;        mov     AX, 0ffffh
  68. ok:     pop        si
  69.         pop     DS
  70. creturn inchksum
  71. cend    INCHKSUM
  72.         end
  73.