我想检查我的代码的 CPU 周期。
我想使用“tsc”。
在这种情况下,tsc 的许多代码都包含'_emit 0Fh, _emit 31h'。
这些的具体含义是什么??
这是代码。
#include <stdio.h>
#include <windows.h>
union int32to64
{
__int64 i64;
int i32[2];
};
void read_tsc(int *cl_Low, int *cl_High)
{
__asm {
_emit 0Fh
_emit 31h
mov ecx, dword ptr cl_Low // cl_Low -> ecx into 32bit
mov[ecx], eax
mov ecx, dword ptr cl_High
mov[ecx], edx
}
};
int main(void)
{
union int32to64 a, b;
__int64 mhz = 0;
read_tsc(&a.i32[0], &a.i32[1]);
Sleep(1000);
read_tsc(&b.i32[0], &b.i32[1]);
mhz = b.i64 - a.i64;
printf("clock : %I64dMHz", mhz / 1000000);
return 0;
}
最佳答案
0f 31
是 rdtsc 指令的操作码。两个 _emit
伪指令发出这两个字节,有效地形成了一个 rdtsc 指令。这段代码可能是为不支持 rdtsc 助记符的编译器编写的。手动发出构成指令的字节是此类情况的一种可能解决方法。
关于c - x86 程序集中 '_emit 0Fh, _emit 31h' 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48862697/