[Back to TIMING SWAG index] [Back to Main SWAG index] [Original]

    {
    >Hi, I'm looking for a timer program that will be able to calculate
    >consistently and accurately the processing time of a certain procedure.
    >The one program I've seen simply takes the times reported by Dos at the
    >beginning and end, and subtracts them. This program seems to report
    >different processing times each time I run it. Sometimes the program changes
    >by up to 7/10th of a second (even after the procedure being timed is run
    >several times and loaded into the buffer). Strangly enough, if my clock is
    >set to 5:00:00 before the timer prog is run, the time reported is less than
    >when the clock is set to 6:00:00; this happens consistently!
    >
    >Is there some other more accurate way to time my procedure?

    This ought to work.
    From: thn.cls@login.dknet.dk (Thomas Honore Nielsen)
    }

    UNIT Profiler;

    INTERFACE

    PROCEDURE Start;
    FUNCTION Stop: Real;

    IMPLEMENTATION

    VAR
       StartW : Word;
       StartM : LongInt;
       StopW  : Word;
       StopM  : LongInt;

    PROCEDURE Start;

    ASSEMBLER;

    ASM
       IN     AL, 40h
       MOV    AH, AL
       IN     AL, 40h
       XCHG   AH, AL
       MOV    Word PTR StartW , AX
       MOV    BX, 40h
       MOV    ES, BX
       MOV    BX, 6Ch
       MOV    AX, ES:[BX]
       MOV    Word PTR StartM, AX
       MOV    AX, ES:[BX+2]
       MOV    Word PTR StartM+2, AX
    END;

    FUNCTION Stop: Real;

    BEGIN
         ASM
            IN      AL, 40h
            MOV     AH, AL
            IN      AL, 40h
            XCHG    AH, AL
            MOV     Word PTR StopW, AX
            MOV     BX, 40h
            MOV     ES, BX
            MOV     BX, 6Ch
            MOV     AX, ES:[BX]
            MOV     Word PTR StopM, AX
            MOV     AX, ES:[BX+2]
            MOV     Word PTR StopM+2, AX
         END;
         IF StartM <= StopM THEN
           StopM:=StopM-StartM
         ELSE
           StopM:=1572480-StartM+StopM;
         IF StartW <= StopW THEN
           StopW:=StopW-StartW
         ELSE
           StopW:=65535-StartW+StopW;
         Stop:=(Stopm*65535+StopW)/1193181.667;
    END;
    END.

[Back to TIMING SWAG index] [Back to Main SWAG index] [Original]