如何獲得程序或者一段代碼運行的時間?你可能說有專門的程序測試工具,確實,不過你也可以在程序中嵌入匯編代碼來實現。
在Pentium的指令系統中有一條指令可以獲得CPU內部64位計數器的值,我們可以通過代碼兩次獲取該計數器的值而獲得程序或代碼運行的時鐘周期數,進而通過你的cpu的頻率算出一個時鐘周期的時間,從而算出程序運行的確切時間。
我們通過指令TDSIC來獲得cpu內部計數器的值,指令TDSIC返回值放在EDX:EAX中,其中EDX中存放64位寄存器中高32位的值,EAX存放第32位的值. 下面看看實現的代碼:
| //用匯編實現獲取一段代碼運行的時間 #include<iostream> using namespace std; void GetClockNumber (long high, long low); void GetRunTime(); int main() { long HighStart,LowStart,HighEnd,LowEnd; long numhigh,numlow; //獲取代碼運行開始時cpu內部計數器的值 __asm { RDTSC mov HighStart, edx mov LowStart, eax } for(int i= 0; i<100000; i++ ) { for(int i= 0; i<100000; i++ ) { } } |
|