C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何将此装配时间戳功能转换为C?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > Get CPU cycle count?                                    4个
我试图将别人的项目从32位转换为64位.除了一个函数外,一切似乎都没问题,它使用了构建x64时Visual studio不支持的汇编表达式:

// Returns the Read Time Stamp Counter of the cpu
// The instruction returns in registers EDX:EAX the count of ticks from processor reset.
// Added in Pentium. Opcode: 0F 31.
int64_t CDiffieHellman::GetRTSC( void )
{
    int tmp1 = 0;
    int tmp2 = 0;

#if Defined(WIN32)
    __asm
    {
        RDTSc;          // Clock cycles since cpu started
        mov tmp1,eax;
        mov tmp2,edx;
    }
#else
    asm( "RDTSc;\n\t"
        "movl %%eax,%0;\n\t"
        "movl %%edx,%1;" 
        :"=r"(tmp1),"=r"(tmp2)
        :
        :
        );
#endif

    return ((int64_t)tmp1 * (int64_t)tmp2);
}

最有趣的是,这被用于生成随机数. asm块在x64下都没有编译,所以使用ifdef也无济于事.我只需要找到C/C++替换以避免重写整个程序.

解决方法

对于Windows分支,

#include <intrin.h>

调用__rdtsc()内在函数.

文件on MSDN

对于Linux分支,内在函数可以使用相同的名称,但是您需要一个不同的头文件

#include <x86intrin.h>

大佬总结

以上是大佬教程为你收集整理的如何将此装配时间戳功能转换为C?全部内容,希望文章能够帮你解决如何将此装配时间戳功能转换为C?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。