home *** CD-ROM | disk | FTP | other *** search
/ Graphics Programming Black Book (Special Edition) / BlackBook.bin / disk1 / source / chapter21 / l21-1.asm next >
Assembly Source File  |  1997-06-18  |  1KB  |  30 lines

  1. ; Calculates TCP/IP (16-bit carry-wrapping) checksum for buffer
  2. ;  starting at ESI, of length ECX words.
  3. ; Returns checksum in AX.
  4. ; ECX and ESI destroyed.
  5. ; All cycle counts assume 32-bit protected mode.
  6. ; Assumes buffer length > 0.
  7. ; Note that timing indicates that the pipe sequence and
  8. ;  cycle counts shown (based on documented execution rules)
  9. ;  differ from the actual execution sequence and cycle counts;
  10. ;  this loop has been measured to execute in 5 cycles; apparently,
  11. ;  the 1st half of ADD somehow pairs with the prefix byte, or the
  12. ;  prefix byte gets executed ahead of time.
  13.  
  14.         sub     ax,ax           ;initialize the checksum
  15.  
  16. ckloop:
  17.         add     ax,[esi]        ;cycle 1 U-pipe prefix byte
  18.                                 ;cycle 1 V-pipe idle (no pairing w/prefix)
  19.                                 ;cycle 2 U-pipe 1st half of ADD
  20.                                 ;cycle 2 V-pipe idle (register contention)
  21.                                 ;cycle 3 U-pipe 2nd half of ADD
  22.                                 ;cycle 3 V-pipe idle (register contention)
  23.         adc     ax,0            ;cycle 4 U-pipe prefix byte
  24.                                 ;cycle 4 V-pipe idle (no pairing w/prefix)
  25.                                 ;cycle 5 U-pipe ADC AX,0
  26.         add     esi,2           ;cycle 5 V-pipe
  27.         dec     ecx             ;cycle 6 U-pipe
  28.         jnz     ckloop          ;cycle 6 V-pipe
  29.  
  30.