首页  编辑  

获取启动之后,CPU经过的脉冲数

Tags: /超级猛料/Hardware.硬件相关/CPU相关/   Date Created:

取得自从开机到现在CPU运行的周期数,超毫秒级的精度

function Ticker : int64 ; register ;

var

 T                 : int64Rec ;

begin

  asm

   db $0f,$31

   mov [T.Lo],EAX

   mov [T.Hi],EDX

  end ;

 Result := int64 ( T );

end ;

****************************************

const

 D32               = $66 ;

function RDTSC : comp ;

var

 TimeStamp         : record

    case byte of

      1 : ( Whole : comp );

      2 : ( Lo , Hi : LongInt );

  end ;

begin

  asm

       db $0F; db $31;                         {BASM doesn't support RDTSC}

        {Pentium RDTSC - Read Time Stamp Counter - instruction}

{$ifdef Cpu386}

       mov        [TimeStamp.Lo],eax         // the low dword

       mov        [TimeStamp.Hi],edx         // the high dword

{$else}

       db D32

       mov        word ptr TimeStamp.Lo,AX

        {mov [TimeStamp.Lo],eax - the low dword}

       db D32

       mov        word ptr TimeStamp.Hi,DX

        {mov [TimeStamp.Hi],edx - the high dword}

{$endif}

  end ;

 Result := TimeStamp . Whole ;

end ;

type

 CompStr = string [ 25 ];

  {Comps have up to 18 digits, plus commas, and sign}

function CompToStr ( N : comp ): CompStr ;

var

 Low3               : string [ 3 ];

 N1                 : extended ;

begin

  if N < 0 then

   Result := '-' + CompToStr (- N )

  else

  begin

   N1 := N / 1000 ;

   Str ( Round ( Frac ( N1 ) * 1000 ), Low3 );

   N := Int ( N1 );

    if N > 0

      then

    begin

      while Length ( Low3 ) < 3 do

       Low3 := '0' + Low3 ;

     Result := CompToStr ( N ) + ThousandSeparator + Low3 ;

    end

    else

     Result := Low3

  end ;

end ;

procedure TForm1 . Button1Click ( Sender : TObject );

begin

//showmessage(inttostr( Ticker));

 memo1 . Lines . Add ( CompToStr ( RDTSC ));

end ;