我想使用cpuid
指令查询CPU功能。我对所有额外的CPUID级别感兴趣,包括0x80000000
和0xc0000000
(Centaur)。问题是我没有看到确定特定级别是否得到支持的明确方法。
特别是,我担心来自Intel(R) 64 and IA-32 Architectures Software Developer's Manual的这一点:
返回两种类型的信息:基本和扩展功能信息。如果为CPUID.EAX输入了值 高于该处理器的基本或扩展函数的最大输入值,然后是该数据 返回最高基本信息叶片。
这意味着,如果我使用cpuid
或EAX = 0x80000000
查询EAX = 0xc0000000
,我可以获得EAX
中的最大CPUID级别,或者输出一些随机基本级别的叶子
是否有可靠且相对简单的方法来确定是否支持特定级别?
答案 0 :(得分:0)
您应该首先检测处理器供应商标识(级别0的12个字符的文本字符串),然后继续基于此值。对于Intel,支持两个级别,从0到0x80000000(第一个是本机Intel级别,第二个是与AMD兼容的一些选项);对于AMD,支持相同的两个范围,但有些位可以改变它们的值;那么,对于其他供应商,您可以根据他们的文档查看自己的范围。