下面是我写的一段代码,希望能对楼主有所帮助:
/**
* file_name: time_lost.c
* description:
*
* version: 1.0
* created: 3:32 2009-7-21
* revision: none
* compiler: gcc 4.3.3
*
* author: prankmoon@
* company:
*/
#include <stdio.h>
#include <stdlib.h>
/* just for test */
int foo(int n)
{
int i;
int sum = 0;
for (i=0; i<n; i++)
{
sum += n;
}
return sum;
}
/* test function */
void time_lost()
{
unsigned int start_high, start_low;
unsigned int end_high, end_low;
long long time_lost, start, end;
/* here is the core :D */
asm("rdtsc \n\t");
asm("movl %%eax, %0\n\t":"=g"(start_low));
asm("movl %%edx, %0\n\t":"=g"(start_high));
printf("start_high:\t%08X start_low:\t%08X\n", start_high, start_low);
start = start_high;
start = (start << 32) | start_low;
/* invoke the target function */
foo(100);
asm("rdtsc \n\t");
asm("movl %%eax, %0\n\t":"=g"(end_low));
asm("movl %%edx, %0\n\t":"=g"(end_high));
printf("end_high:\t%08X end_low:\t%08X\n", end_high, end_low);
end = end_high;
end = (end << 32) | end_low;
/* we did it */
printf("lost time is:\t%llX\n", end - start);
return;
}
int main(int argc, char *argv[])
{
time_lost();
return 0;
}
[[it] 本帖最后由 prankmoon 于 2009-7-21 03:58 编辑 [/it]]