正在阅读:VC++通过汇编获取代码运行时间VC++通过汇编获取代码运行时间

2004-06-17 12:14 出处:CSDN 作者:hcj2002 责任编辑:linjixiong


 //获取代码结束时cpu内部计数器的值,并减去初值
        __asm
 {
  RDTSC
  mov HighEnd, edx
  Mov LowEnd,  eax
  ;获取两次计数器值得差
  sub eax,  LowStart
  cmp    eax,  0       ; 如果低32的差为负则求返,因为第二次取得永远比第一次的大
  jg     L1
  neg     eax
  jmp     L2
            L1: mov numlow,  eax
            L2: sbb edx,  HighStart
  mov numhigh, edx
 
 }
        //把两个计数器值之差放在一个64位的整形变量中
        //先把高32位左移32位放在64的整形变量中,然后再加上低32位
 __int64  timer =(numhigh<<32) + numlow;
         //输出代码段运行的时钟周期数
         //以频率1.1Gcpu为例,如果换计算机把其中的1.1改乘其它即可,因为相信大家的cpu都应该在1G以上  ^_^
 cout<< (double) (timer /1.1/1000000000) << endl;
 return 0;
}

     这样通过一条简单的汇编指令就可以获得程序或一段代码的大概时间,不过并不能得到运行的确切时间,因为即使去掉中间的循环,程序也会有个运行时间,

因为在第一次取得计数器的值后,有两条汇编指令mov HighStart, edx       mov LowStart, eax这两条指令当然也有运行时间 ,当然你可以减去这两条指令的运行时间(在1.1G的机子上是3e-8s),这样会更精确一点。

    如果你要确切知道程序的运行时间,专业的测试软件肯定会更好一点,不过好像一般没有必要获取除非专门的要求的程序。

    不过能DIY一个也是不错的,不管有没有,最起码你可以学到在VC++中如何嵌入汇编代码以及如何使用32位的寄存器,其实和16位的寄存器一样使用,将来64的也应该一样,只不过位数不同罢了。


察看评论详细内容 我要发表评论
作者笔名 简短内容 发表时间
:
键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品