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

Wat*_* v2 13 64-bit x86 assembly x86-64 cpu-registers

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

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

那么,E和R代表什么?而且,为什么后缀X用于注册?

Cod*_*ray 23

  • R只是代表" r egister".的AMD64 ISA扩展加入额外8个通用寄存器,命名为R8通过R15.原始8个寄存器的64位扩展版本R添加了一个前缀用于对称.

  • E代表" e xtended"或" e nhanced".(维基百科称" e xtended".)它们是16位寄存器的"扩展"版本,因为它们总共提供16位额外的32位.

  • X也适用于"e x趋势 " - 也许它暗示16,就像他的x adecimal.*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 |
Run Code Online (Sandbox Code Playgroud)

__
*X用于8080上的助记符(例如LXIDCX)中,用于将一对其他独立的8位寄存器视为16位整数的指令,类似于AX表示该AH:AL对的方式.因此,另一种可能的解释是X意味着,并且在后续处理器(包括8086,即8080的完整16位扩展)上命名高:低对时继续使用这种用法.

  • /sf/answers/179556471/建议X代表"对".8080,8086的祖先,可以使用成对的8位寄存器作为16位整数或指针,与CX是CH:CL寄存器对的方式相同. (2认同)