2

我想使用该cpuid指令查询 CPU 功能。我对所有其他 CPUID 级别感兴趣,包括0x800000000xc0000000(Centaur)。问题是我看不到确定是否支持特定级别的明确方法。

特别是,我担心Intel(R) 64 and IA-32 Architectures Software Developer's Manual中的这一特殊内容:

返回两种类型的信息:基本功能信息和扩展功能信息。如果为 CPUID.EAX 输入的值高于该处理器的基本或扩展功能的最大输入值,则返回最高基本信息叶的数据。

这意味着,如果我cpuid使用EAX = 0x80000000or进行查询EAX = 0xc0000000,我可以获得 中的最大 CPUID 级别EAX,或者输出一些随机的基本级别叶。

是否有可靠且相对简单的方法来确定是否支持特定级别?

4

1 回答 1

0

您应该从检测处理器供应商标识(级别 0 的 12 个字符的文本字符串)开始,然后继续基于此值。对于 Intel,支持从 0 和 0x80000000 开始的两个级别范围(第一个是原生 Intel 级别,第二个是与 AMD 兼容的某些选项集);对于 AMD,支持相同的两个范围,但某些位可以更改它们的值;然后,对于其他供应商,您可以根据他们的文档查看他们自己的范围。

于 2015-07-13T18:54:34.240 回答