【问题标题】:How to reliably detect maximum additional CPUID levels?如何可靠地检测最大附加 CPUID 级别?
【发布时间】:2015-10-02 04:04:51
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: assembly cpuid


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2015-01-15
      • 2012-03-05
      • 2023-04-05
      • 2011-11-22
      • 2017-07-13
      • 1970-01-01
      • 1970-01-01
      • 2015-01-17
      • 2012-04-02
      相关资源
      最近更新 更多