c++ - "rdtsc": "=a" (a0), "=d"(d0) 这是做什么的?

标签 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;
}

最佳答案

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

在 x64 中内联汇编不可用的 Windows 和 Visual Studio 中,您可以使用 __rdtsc .

关于c++ - "rdtsc": "=a" (a0), "=d"(d0) 这是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56940066/

相关文章:

c++ - 编译对齐的结构在 GCC 中给出奇怪的警告

c++ - 只有静态方法的类比命名空间更可取吗?

c - 如何让gdb在某些条件下设置断点?

c++ - C/C++ 内联汇编不正确的操作数类型

linux-kernel - vsdo 和 vsyscall 的区别

c++ - C++中的虚函数实例化有什么区别?

c++ - 有没有一种标准的方法来使用 STL 在 Linux 上使用 gcc 进行 findfirst、findnext?

c++ - 从函数返回一个动态创建的数组

arrays - 在 Visual Studio 上的内联汇编函数中传递指针的内容

c++ - traincascade 训练面部痣检测器