x86 ASM - cpuid 是不是设置标志?

Posted

技术标签:

【中文标题】x86 ASM - cpuid 是不是设置标志?【英文标题】:x86 ASM - does cpuid set the flags?x86 ASM - cpuid 是否设置标志? 【发布时间】:2017-02-24 19:19:24 【问题描述】:

x86 CPUID 指令会改变标志寄存器吗?不幸的是,我无法使用调试器。

我正在一个 D 程序中编写一些 GCC 汇编代码,我想知道是否将“cc”放在 clobbers 中,只是为了安全起见。

【问题讨论】:

根据this manual 没有。 我在谷歌上没有看到任何明确提及它。 基本上,更新标志是一种副作用,应该在指令伪代码中列出。如果那里不存在,则不会设置标志。 更不用说官方intel指令集参考中的“Flags Affected None.”部分了。 您永远不需要将"cc" 放在 x86 内联汇编语句的破坏者中,因为 GCC 无论如何都假定它。请注意,其他 CPU 架构不一定如此。 【参考方案1】:

根据http://www.felixcloutier.com/x86/CPUID.html

受影响的标志

无。

CPUID 和 eflags 之间只有一个链接。 x86 CPU 仅支持CPUID if ...

EFLAGS 寄存器中的 ID 标志(位 21)表示支持 CPUID 指令。如果软件程序可以设置和清除该标志,则执行该程序的处理器支持 CPUID 指令。

【讨论】:

以上是关于x86 ASM - cpuid 是不是设置标志?的主要内容,如果未能解决你的问题,请参考以下文章

与高级语言不同的 CPUID 使用

x86 cpuid指令 | CPUID - CPU Identification

x86 内联汇编器标志

如何使用 CPUID 指令正确获取 x86 CPU 功能? [复制]

在 Raspberry Pi 4B 上获取 CPU 供应商 ID,例如 x86 CPUID?

__asm 块在 Xcode 5 中导致崩溃