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 是不是设置标志?的主要内容,如果未能解决你的问题,请参考以下文章
x86 cpuid指令 | CPUID - CPU Identification
如何使用 CPUID 指令正确获取 x86 CPU 功能? [复制]