assembly - 在这个 x86-64 指令编码文档中,8、16、32、64 位 GPR 有什么用?
问题描述
我正在(缓慢而痛苦地)学习 x86-64 指令,并在我正在阅读的文档中找到了这个图表:
我认为在这种情况下“GP”是指 GPR(通用寄存器)我“理解”x86-64 的寄存器结构是这样的:
所以我对此的第一个理解是 64 位系统有 64 位缓存分配给 CPU 中的 GPR 并且可以处理更大的寄存器值,并且 32 位寄存器充当与仅分配的处理器兼容的后备32 位到 GPR,依此类推,直到理论上的 8 位处理器(或者可能存在一个)。
但我也想知道,当不需要更高的精度时,它是否是一种向寄存器写入更少位的替代方法,因此运行效率更高或更快。
但是看看那个顶部表,似乎因为 xReg 列为 GPR 段的每个类别(0000
=> AL、AX、EAX、RAX...)分配了一个二进制值,所以看起来好像有一种特定的操作模式提前决定,开发人员无法使用所有不同的寄存器大小。或者指令中可能还有其他位定义正在使用哪种模式?
多个寄存器大小的目的是什么?它是否与 64 位 CPU 仅使用 64 位寄存器的各种 CPU GPR 大小兼容?还是为了提高效率而编写更小的寄存器值?
解决方案
推荐阅读
- node.js - 如何使用 connection.db.collection 函数?
- python - AppRegistryNotReady:应用程序尚未加载。使用 UserCreationForm 时
- android - 为地点选择器使用地点自动完成功能
- vb.net - VB.NET - 避免在单击“重置”按钮时执行 MsgBox
- openshift - openshift 请求经常失败
- rust - 为什么在 Rust 2018 中使用模块时出现“找不到 crate”?
- windows - 在 Windows 上安装 Chromium 时出错:断言 vc_lib_um_path
- templates - 如何在一次 Puppet 运行中使用插入的文件更新 ERB 模板?
- angular6 - 我们可以使用 Angular 6 中的 ng2-smart-table 修复标题吗
- python - 借助字典键填充虚拟矩阵