如何调用 CPUID 叶 7 和子叶 0?

Posted

技术标签:

【中文标题】如何调用 CPUID 叶 7 和子叶 0?【英文标题】:How to call CPUID leaf 7 and subleaf 0? 【发布时间】:2013-03-07 16:42:02 【问题描述】:

我已经在 fedora 上下载并安装了 yum install cpuid。 你能告诉我如何调用 CPUID 叶 7 和 subleaf 0 吗?我想检查该平台上可用的一些功能。 我真的很感谢你的帮助。提前致谢。

【问题讨论】:

【参考方案1】:

_cpuid_count 可用于获取带有子叶的函数 7 和 0xD。

定义在cpuid.h中

#define __cpuid_count(level, count, a, b, c, d)
    __asm__ ("cpuid\n\t"
             : "=a" (a), "=b" (b), "=c" (c), "=d" (d)
             : "0" (level), "2" (count))

请注意,_cpuid_count 不检查该功能是否受支持。 您可以在 cpuid.h 中进行类似于 __get_cpuid 的检查。这可能应该添加到 stdc 库中。

static __inline int
__get_cpuid_count (unsigned int __level, unsigned int __count,
           unsigned int *__eax, unsigned int *__ebx,
           unsigned int *__ecx, unsigned int *__edx)

    unsigned int __ext = __level & 0x80000000;
    if (__get_cpuid_max (__ext, 0) < __level)
        return 0;

    __cpuid_count (__level, __count, *__eax, *__ebx, *__ecx, *__edx);
    return 1;

【讨论】:

看来你可以改用__get_cpuid_max__get_cpuid_max 执行必要的检查以确保函数/叶子可用。 为什么是__level &amp; 0x80000000?这对我来说看起来不对。

以上是关于如何调用 CPUID 叶 7 和子叶 0?的主要内容,如果未能解决你的问题,请参考以下文章

CPUID 指令

与高级语言不同的 CPUID 使用

在 Windows 上使用 JNA 调用 __cpuid 函数

__get_cpuid 的可移植性如何?

CPU和CPUID是啥关系?

CPUID 输出取决于操作顺序