【问题标题】:What's the difference in CPUID work on 32-bit and 64-bit machines?CPUID 在 32 位和 64 位机器上工作的区别是什么?
【发布时间】:2019-05-20 19:35:06
【问题描述】:

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

【问题讨论】:

    标签: 32bit-64bit cpuid


    【解决方案1】:

    根据Intel 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

    【讨论】:

      猜你喜欢
      • 2014-02-05
      • 2015-09-26
      • 2011-09-13
      • 1970-01-01
      • 2013-05-23
      • 2011-05-03
      • 1970-01-01
      • 2018-05-16
      • 2015-05-31
      相关资源
      最近更新 更多