首页 > 解决方案 > CPUID 在 32 位和 64 位机器上工作的区别是什么?

问题描述

CPUID我的问题是32 位和 64 位机器上的工作有什么区别?CPUID也许我们调用的方式或者返回结果的方式有些不同,比如,我们应该检查RAX和其他寄存器,也许它们存储的信息不同

标签: 32bit-64bitcpuid

解决方案


根据英特尔 SDM

该指令对 64b 和非 64b 的操作相同

但即使它的行为相同,请记住 CPUID 指令在所有模式下都会清除 RAX/RBX/RCX/RDX 寄存器的高 32 位,因此如果您检查上述寄存器中的最高 32 位,您将阅读0x0。

由于 CPUID 正在查看 EAX(在某些情况下还有 ECX),因此下面的两个代码都将返回相同的数据:

mov RAX, 0xFFFF_FFFF_0000_000
cpuid

mov RAX, 0x0
cpuid


推荐阅读