我的问题是CPUID
在32位和64位计算机上工作有什么区别?也许我们调用CPUID
或返回结果的方式存在一些差异,例如,我们应该检查RAX
和其他寄存器,也许存储在它们中的信息是不同的
根据英特尔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