[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]