正在閱讀:VC++通過匯編獲取代碼運(yùn)行時(shí)間VC++通過匯編獲取代碼運(yùn)行時(shí)間

2004-06-17 12:14 出處:CSDN 作者:hcj2002 責(zé)任編輯:linjixiong

     如何獲得程序或者一段代碼運(yùn)行的時(shí)間?你可能說有專門的程序測(cè)試工具,確實(shí),不過你也可以在程序中嵌入?yún)R編代碼來實(shí)現(xiàn)。

     在Pentium的指令系統(tǒng)中有一條指令可以獲得CPU內(nèi)部64位計(jì)數(shù)器的值,我們可以通過代碼兩次獲取該計(jì)數(shù)器的值而獲得程序或代碼運(yùn)行的時(shí)鐘周期數(shù),進(jìn)而通過你的cpu的頻率算出一個(gè)時(shí)鐘周期的時(shí)間,從而算出程序運(yùn)行的確切時(shí)間。

    我們通過指令TDSIC來獲得cpu內(nèi)部計(jì)數(shù)器的值,指令TDSIC返回值放在EDX:EAX中,其中EDX中存放64位寄存器中高32位的值,EAX存放第32位的值.

    下面看看實(shí)現(xiàn)的代碼:



//用匯編實(shí)現(xiàn)獲取一段代碼運(yùn)行的時(shí)間

#include<iostream>

using namespace std;

void GetClockNumber (long high, long low);
void GetRunTime();
 
int main()
{      
 
 long HighStart,LowStart,HighEnd,LowEnd;
 long numhigh,numlow;
 //獲取代碼運(yùn)行開始時(shí)cpu內(nèi)部計(jì)數(shù)器的值
 __asm             
 {
  RDTSC
  mov HighStart, edx
  mov LowStart, eax
 }
 for(int i= 0; i<100000; i++ )
 {
             for(int i= 0; i<100000; i++ )
      {
      
      }
 }


察看評(píng)論詳細(xì)內(nèi)容 我要發(fā)表評(píng)論
作者筆名 簡(jiǎn)短內(nèi)容 發(fā)表時(shí)間
:

鍵盤也能翻頁(yè),試試“← →”鍵
302 Found

302 Found


Powered by Tengine
tengine