首页 > 解决方案 > 在这个 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 大小兼容?还是为了提高效率而编写更小的寄存器值?

标签: assemblyx86-64cpu-architecturecpu-registersmachine-code

解决方案


推荐阅读