【发布时间】:2012-12-25 08:42:25
【问题描述】:
在为 Windows 编写新代码时,我偶然发现了来自 Windows API 的_cpuinfo()。由于我主要处理 Linux 环境 (GCC),因此我希望能够访问 CPUInfo。
我尝试了以下方法:
#include <iostream>
int main()
{
int a, b;
for (a = 0; a < 5; a++)
{
__asm ( "mov %1, %%eax; " // a into eax
"cpuid;"
"mov %%eax, %0;" // eax into b
:"=r"(b) // output
:"r"(a) // input
:"%eax","%ebx","%ecx","%edx" // clobbered register
);
std::cout << "The code " << a << " gives " << b << std::endl;
}
return 0;
}
这个使用程序集,但我不想重新发明轮子。有没有其他方法可以在不组装的情况下实现 CPUInfo?
编译器错误:
lewis@lewis-desktop:~/Desktop/prog$ g++ -Wall CPUInfo.cpp
CPUInfo.cpp: In function ‘int main()’:
CPUInfo.cpp:10:22: error: expected ‘)’ before ‘;’ token
CPUInfo.cpp:10:23: error: expected primary-expression before ‘)’ token
CPUInfo.cpp:10:23: error: expected ‘;’ before ‘)’ token
CPUInfo.cpp:8:8: warning: unused variable ‘b’ [-Wunused-variable]
CPUInfo.cpp:12:8: error: expected ‘}’ at end of input
【问题讨论】:
-
所以,我猜这是 g++。和 x86?你应该说。无论如何,问题是什么?你告诉我们你在做什么,并展示了代码。但毫无疑问。
-
@JerryCoffin 我正在运行 Linux(因为这将是 Linux 部分,以确定执行代码的计算机的 CPU)。我已经使用 Win API 中的 _cpuinfo() 函数确定了 Windows 版本/部分。这就是我的观点。
-
@DavidHeffernan 查看我更新的帖子,我忽略了添加编译器错误。
-
我已经编辑了问题以反映(我认为)是预期的问题。如果我错了,请随时回滚。
-
我不知道你为什么抱怨投反对票。现在,我没有投反对票,我看到它已被删除。但是原始问题省略了编译器的详细信息,未能提供错误消息并且没有提出问题。所以有人对你投了反对票。这是可以预料的。不要责怪反对者。修正问题。然后你就会得到选票。
标签: c++ assembly gcc x86 cpuid