home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CASM.ARJ / CLOCK.ASM < prev    next >
Assembly Source File  |  1987-10-02  |  1KB  |  60 lines

  1. ;_ clock.asm   Fri Oct  2 1987   Modified by: Walter Bright */
  2. ; Copyright (C) 1986-1987 by Northwest Software
  3. ; All Rights Reserved
  4. ; Written by Walter Bright
  5.  
  6. include    MACROS.ASM
  7.  
  8.     begcode    clock
  9.  
  10. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  11. ; Return the time in 1/100ths of a second since midnight.
  12. ; Useful for timing various things.
  13. ; Use:
  14. ;    clock_t clock(void);
  15.  
  16.     c_public clock
  17. func    clock
  18.     bdos    2Ch        ;get system time
  19.     ; compute ticks + 100L * (secs + 60L * (mins + 60 * hours))
  20.     ;       DL              DH            CL          CH
  21.     push    DX
  22.     push    DX
  23.     mov    BX,60
  24.     mov    AL,BL        ;60 min/hr
  25.     mul    CH        ;AX = 60 * hours
  26.     clr    CH        ;CX = minutes
  27.     add    AX,CX        ;AX = mins + 60 * hours
  28.     mul    BX        ;DXAX = 60 * (mins + 60 * hours)
  29.  
  30.     pop    BX
  31.     mov    BL,BH
  32.     clr    BH        ;BX = seconds
  33.     add    AX,BX
  34.     adc    DX,0        ;DXAX = secs + 60L * (mins + 60 * hours)
  35.  
  36.     mov    BX,AX
  37.     mov    AX,DX
  38.  
  39.     mov    CX,100
  40.     mul    CX
  41.     xchg    AX,BX
  42.     mul    CX
  43.     add    DX,BX        ;DXAX = 100L * (secs + 60L * (mins + 60 * hours))
  44.  
  45.     pop    BX
  46.     clr    BH
  47.     add    AX,BX
  48.     adc    DL,BH        ;DXAX = ticks + ...
  49.                 ; (will never overflow into DH)
  50.     ifndef MSC
  51.     mov    BX,AX
  52.     mov    AX,DX
  53.     endif
  54.     ret
  55. c_endp    clock
  56.  
  57.     endcode    clock
  58.  
  59.     end
  60.