32bit-64bit - CPUID 在 32 位和 64 位机器上工作的区别是什么?
问题描述
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
推荐阅读
- ruby-on-rails - 在 Active Admin 中使用自定义方法自定义 action_item
- bash - 创建自定义关键字和运算符
- javascript - Ace 的实例未在自定义工作者中定义
- git - 如何在不使用 ansible 在服务器上存储密钥的情况下处理私有存储库
- c++ - 我有一个 CEdit 框。当我禁用该框并立即尝试调用 SetReadOnly 后,它保持禁用状态。为什么是这样?
- android-studio - 迁移到 Androidx 后,butterknife 不起作用
- php - Twilio API / TwiML:记录后重定向不起作用
- javascript - JavaScript - 如何使用其他条件过滤重复行
- javascript - 设置 ONE on.click 以获取更多操作 - javascript 和 jQuery
- assembly - 远跳转到 32 位保护模式入口点导致 QEMU 不断重启