ð‰Syntax10.Scn.FntSyntax10b.Scn.Fnt  ­MnMODULE HighPrecisionTimer; IMPORT SYSTEM; TYPE TimeStamp* = RECORD high*, low*: LONGINT END ; PROCEDURE- Sub64 08BH, 045H, 0E4H, (* MOV EAX, low1 *) 08BH, 055H, 0ECH, (* MOV EDX, high1 *) 2BH, 045H, 0E0H, (* SUB EAX, low2 *) 1BH, 055H, 0E8H, (* SBB EDX, high2 *) 89H, 55H, 0ECH, (* MOV high1, EDX *) 89H, 45H, 0E4H; (* MOV low1, EAX *) PROCEDURE Subtract* (t1, t2: TimeStamp; VAR res: TimeStamp); (* res := t1 - t2 *) VAR high1 (* -20[EBP] *), high2 (* -24[EBP] *), low1 (* -28[EBP] *), low2 (* -32[EBP] *): LONGINT; BEGIN high1 := t1.high; low1 := t1.low; high2 := t2.high; low2 := t2.low; Sub64; res.high := high1; res.low := low1 END Subtract; PROCEDURE- RDTSC 0FH, 031H, (* RDTSC *) 89H, 45H, 0F8H, (* MOV -8[EBP], EAX *) 89H, 55H, 0FCH; (* MOV -4[EBP], EDX *) PROCEDURE Now* (VAR time: TimeStamp); VAR h (* -4[EBP] *), l (* -8[EBP] *): LONGINT; BEGIN RDTSC(); time.high := h; time.low := l END Now; (*PROCEDURE Do*; VAR t1, t2, t3: TimeStamp; i: INTEGER; BEGIN Now(t1); FOR i := 0 TO 10 DO END ; Now(t2); Subtract(t2, t1, t3); HALT(56) END Do; *) END HighPrecisionTimer. Decoder.Decode TestTimer