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



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

我特别担心来自Intel(R) 64和IA-32架构软件开发人员手册的这一点:

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新