【问题标题】:What do the E and R prefixes stand for in the names of Intel 32-bit and 64-bit registers?Intel 32 位和 64 位寄存器名称中的 E 和 R 前缀代表什么?
【发布时间】:2017-10-11 12:24:01
【问题描述】:

32 位寄存器名称以 E 开头,64 位寄存器名称以 R 开头。E 和 R 代表什么?选择这些字母有什么理由吗?

此外,在 64 位寄存器中,我们也可以在 Windbg 等任何低级调试器中看到,除了名称之外,最右边的位仍然使用与 64 位寄存器相同的名称。以 E 开头。例如在 64 位系统中,RAX 寄存器的最右边 32 位称为 EAX。

那么,E 和 R 代表什么吗?还有,为什么后缀 X 是寄存器?

【问题讨论】:

标签: assembly x86 64-bit x86-64 cpu-registers


【解决方案1】:
  • R just stands for "register"。 AMD64 ISA 扩展增加了 8 个额外的通用寄存器,命名为 R8R15。原始 8 个寄存器的 64 位扩展版本添加了一个 R 前缀 for symmetry

  • E 代表“extended”或“enhanced”。 (Wikipedia says "extended"。)它们是 16 位寄存器的“扩展”版本,因为它们提供了 16 个额外的位,总共 32 位。

  • X 也代表“extended”——或者它可能暗示 16,如他x十进制。*X-suffixed 寄存器是 8 位寄存器的 16 位扩展版本。对于 8 位寄存器,L 后缀表示“低”,H 后缀表示“高”。

因此,以一个特定的寄存器为例,你有8位ALAH寄存器,它们是16位AX寄存器的低字节和高字节,也就是低位字32位EAX寄存器的低位双字,即64位RAX寄存器的低位双字。

| 63 - 32 | 31 - 16 | 15 - 8 | 7 - 0 |
======================================
.         .         | AH     | AL    |
.         .         | AX             |
.         | EAX                      | 
| RAX                                |
======================================
| 63 - 32 | 31 - 16 | 15 - 8 | 7 - 0 |

__
* X was used in the mnemonics (such as LXI and DCX) on the 8080 代表 instructions that treated a pair of otherwise-separate 8-bit registers as a 16-bit integer,类似于 AX 代表 AH:AL 对。因此,另一种可能的解释是X 表示 pair,并且在后续处理器(包括 8086)上命名 high:low 对时继续使用这种用法,它是8080.

【讨论】:

  • stackoverflow.com/a/2565092/224132 建议 X 可能代表“对”。 8080 是 8086 的祖先,可以将 8 位寄存器对用作 16 位整数或指针,就像 CX 是 CH:CL 寄存器对一样。
  • 谢谢,很好的发现。虽然我同意这是一个值得纳入规范答案的有趣的历史花絮,但我不确定它是否能让我相信“X”实际上代表“对”。它可能仍然代表“扩展”,因为这些指令被“扩展”以在 16 位对上操作。 @彼得
  • 是的,在留下我的第一条评论后编辑您的答案时,我认为它可能意味着 / 来自对,但实际上并不代表它。 IDK 如果 I.J. Kennedy 的真正意思是说它代表对,或者只是为了说明 8080 的历史。
  • 也相关:Why are first four x86 GPRs named in such unintuitive order? 有一些关于设计 8086 以便从 8080 asm 轻松进行源代码移植如何影响寄存器集设计的好资料。
猜你喜欢
  • 2014-02-21
  • 2011-10-26
  • 2012-02-26
  • 1970-01-01
  • 2014-12-17
  • 2014-07-31
  • 2010-09-15
  • 2023-04-01
相关资源
最近更新 更多