“ rdtsc”:“ = a”(a0),“ = d”(d0)这是做什么的?

时间:2019-07-08 17:41:36

标签: c++ gcc x86 inline-assembly rdtsc

我是C ++和基准测试的新手

我不明白代码的这一部分做什么? 因此,我找到了一些有关edx,eax寄存器的信息,但我不完全了解它如何在代码中发挥作用。所以我理解这段代码本质上返回了cpu周期的当前滴答声。因此,它是否将当前的滴答存储到寄存器中,其中一部分存储在hi中,另一部分存储在lo中。并且,“ = a”和“ = d”是否指定了将其存储在哪个寄存器中。

将它分为两​​部分有什么意义?

"rdtsc" : "=a" (lo), "=d" (hi) 

上下文中的代码

int64_t rdtsc(){
    unsigned int lo,hi;
    __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
    return ((uint64_t)hi << 32) | lo;
}

1 个答案:

答案 0 :(得分:6)

它使用inline assembly来调用rdtsc操作码,该操作码返回64位整数。高位存储到hi,低位存储到lo

在Windows和Visual Studio中,内联汇编在x64中不可用,您应该使用__rdtsc