INCHKSUM.ASM
上传用户:sunrenlu
上传日期:2022-06-13
资源大小:1419k
文件大小:1k
源码类别:

操作系统开发

开发平台:

DOS

  1. ;
  2. ;
  3. ;  Usage :
  4. ;           void far *inchksum()
  5. ;
  6. ;  Internet compatible 1's complement checksum
  7. ;
  8. ;  (c) 1990 Erick Engelke
  9. ;
  10. ;  version
  11. ;
  12. ;    0.1    17 Dec -1990   E. P. Engelke
  13. ;
  14. ;
  15.         include masmdefs.hsm
  16.         include model.hsm
  17. codedef INCHKSUM
  18. datadef
  19. cstart  INCHKSUM
  20. cpublic inchksum
  21.         ; Compute 1's-complement sum of data buffer
  22.         ;
  23.         ; unsigned lcsum( usigned far *buf, unsigned cnt)
  24. push DS
  25.         lds     SI, +@AB + 0 [BP]
  26. mov     CX, +@AB + 4 [BP]       ; cx = cnt
  27.         mov     BL, CL
  28. shr     CX, 1 ; group into words
  29. xor DX, DX ; set checksum to 0
  30.         cld
  31.         jcxz    remain
  32.         clc
  33. deloop: lodsw
  34. adc DX, AX
  35. loop deloop
  36.         adc     DX, 0                   ; only two necessary
  37.         adc     DX, 0
  38. remain: and     BL, 1
  39.         jz      done
  40.         xor     AH, AH
  41.         lodsb
  42.         add     DX, AX
  43.         adc     DX, 0
  44.         adc     DX, 0
  45. done:   mov AX,DX ; result into ax
  46.         or      AX,AX
  47. ok:     pop     DS
  48. creturn inchksum
  49. cend    INCHKSUM
  50.         end