我的问题是CPUID
在32位和64位计算机上的工作有什么区别?调用CPUID
或返回结果的方式可能有所不同,例如,我们应该检查RAX
和其他寄存器,也许存储在其中的信息是不同的
答案 0 :(得分:1)
该指令对64b和非64b的操作均相同
但即使其行为相同,也请记住,CPUID指令会在所有模式下清除RAX / RBX / RCX / RDX寄存器的高32位,因此,如果您检查上述寄存器中的最高32位您将读取0x0。
由于CPUID正在查看EAX(在某些情况下为ECX),因此下面的两个代码将返回相同的数据:
mov RAX, 0xFFFF_FFFF_0000_000
cpuid
mov RAX, 0x0
cpuid