【发布时间】:2019-05-20 19:35:06
【问题描述】:
我的问题是CPUID 在 32 位和 64 位机器上工作的区别是什么?可能是我们调用CPUID的方式或者返回结果的方式有些不同,比如,我们应该检查RAX和其他寄存器,可能里面存储的信息不一样
【问题讨论】:
标签: 32bit-64bit cpuid
我的问题是CPUID 在 32 位和 64 位机器上工作的区别是什么?可能是我们调用CPUID的方式或者返回结果的方式有些不同,比如,我们应该检查RAX和其他寄存器,可能里面存储的信息不一样
【问题讨论】:
标签: 32bit-64bit cpuid
64b 和非 64b 的指令操作相同
但即使它的行为相同,请记住 CPUID 指令在所有模式下都会清除 RAX/RBX/RCX/RDX 寄存器的高 32 位,因此如果您检查上述寄存器中的最高 32 位你会读到 0x0。
由于 CPUID 正在查看 EAX(在某些情况下还有 ECX),因此下面的两个代码都将返回相同的数据:
mov RAX, 0xFFFF_FFFF_0000_000cpuid
mov RAX, 0x0cpuid
【讨论】: