assembly - E 和 R 前缀在英特尔 32 位和 64 位寄存器的名称中代表什么?

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

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

同样,在 64 位寄存器中,我们也可以在任何低级调试器(如 Windbg)中看到,最右边的位仍然使用与 64 位寄存器相同的名称,只是名称以E. 例如在 64 位系统中,RAX 寄存器最右边的 32 位被称为 EAX。

那么,E 和 R 代表什么吗?还有,为什么注册后缀X?

最佳答案

  • R just stands for "register" . AMD64 ISA 扩展添加了 8 个额外的通用寄存器,名为 R8通过 R15 .原始 8 个寄存器的 64 位扩展版本有一个 R添加前缀 for symmetry .
  • E代表“ e 扩展”或“ e 增强”。 ( Wikipedia says "extended" .) 它们是 16 位寄存器的“扩展”版本,因为它们提供 16 位附加位,总共 32 位。
  • X也用于“e x 趋向”——或者它可能意味着 16,如他 x 十进制。* X -suffixed registers 是 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 8080instructions that treated a pair of otherwise-separate 8-bit registers as a 16-bit integer , 类似于 AX代表AH:AL一对。因此,另一种可能的解释是 X表示对,并且在后续处理器上命名高:低对时继续使用这种用法,包括 8086,它是 8080 的完整 16 位扩展。

    关于assembly - E 和 R 前缀在英特尔 32 位和 64 位寄存器的名称中代表什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43933379/

    相关文章:

    x86 - 如何使用 _mm_mul_ps 指定对齐方式

    c - 在 Sparc 32 位上处理值 > 2^32 的整数

    assembly - 如何在保持一个值不变的情况下翻转 SSE 中的范围?

    linux - 如果我设置的计数大于我通过 read() 系统调用读取的文件大小怎么办?

    c - MMX:淡入两幅图像结果

    performance - x64 的更快 sin()

    linux - ELF header ,偏移量 06h 和 14h 是否重复?

    assembly - 嵌入式 x86 程序集中的整数数组

    java - 是否有构建 64 位 JD2XX DLL 的简单方法?

    c# - 在 64 位机器上从 C# 调用 64 位 Delphi DLL