如何可靠地检测最大额外CPUID级别?

时间:2015-07-13 18:42:25

标签: assembly cpuid

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

特别是,我担心来自Intel(R) 64 and IA-32 Architectures Software Developer's Manual的这一点:

  

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

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

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

1 个答案:

答案 0 :(得分:0)

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