为什么x86寄存器的命名方式如何?

ele*_*n81 23 x86 assembly history naming

例如,累加器被命名EAX,并且在调用指令指针时IP.我也知道有些字节叫做CLDH.我知道所有名字都必须有一个约定,但它是什么?

Dan*_*ite 24

C和D是数字/类型,H表示高电平,L表示高电平寄存器的低电平部分. http://en.wikipedia.org/wiki/X86

维基百科解释得非常好.

更多来自维基百科:

  1. AX/EAX/RAX:累加器
  2. BX/EBX/RBX:基数
  3. CX/ECX/RCX:计数器
  4. DX/EDX/RDX:数据/通用

  • 有关更多历史和解释:http://www.swansontec.com/sregisters.html (4认同)

Óla*_*age 20

我找到的东西

* EAX - Accumulator Register
* EBX - Base Register
* ECX - Counter Register
* EDX - Data Register
* ESI - Source Index
* EDI - Destination Index
* EBP - Base Pointer
* ESP - Stack Pointer
Run Code Online (Sandbox Code Playgroud)

  • @Nayuki:每个寄存器都有一些隐式用途,但[较短的编码](https://codegolf.stackexchange.com/a/160739/30206)通常仅适用于 AL/AX/EAX/RAX。其他隐式使用,如“shl r/m32、cl”或“div”(rDX 的隐式使用)大多没有允许不同寄存器的替代编码。(除了 BMI2 `shlx r、r/m、r` 而不是 CL 或 `movsx`。)[为什么 rbp 和 rsp 被称为通用寄存器?](/sf/ask/2557061461/) 列出每个遗留寄存器至少有一个隐式使用。 (2认同)

Mik*_*vey 18

它的历史.x86来自8086,它来自8080,它来自8004,来自4004.有16位寄存器AX,BX等,而对于80386,它们被"扩展"到32位.

补充:BTW摩托罗拉68K从一开始就有32位寄存器,因此在最初的几十年内编程要容易得多.我参与的项目是出于商业原因选择英特尔,而不是技术方面.

  • @ijw - 但有 8080 到 8086 的转换器,并且有一个映射。8080的A寄存器变成了AL,8080的寄存器对B、C变成了CH、CL。8080的寄存器对D、E变成DH、DL。8080的寄存器对H、L变成BH、BL。8086 包括 LAHF 和 SAHF 指令,有助于 8080 到 8086 的转换。8086 添加了 SI(源索引)、DI(目标索引)和 BP(默认为 SS 段寄存器的基指针)等寄存器。 (4认同)

RMA*_*ida 6

较旧的处理器具有名为 A、B 等(按字母顺序排列)的累加器。当 16 位和后来的 32 位累加器开发出来时,工程师分别添加了 X(扩展和 E(扩展)。
所以这都是关于历史的,就像 C 语言的名字一样,因为它是从 B 语言(贝尔实验室)发展而来的。

该约定只是内部的,以跟上他们已经熟悉的名称。

  • 实际上寄存器并不是按字母顺序排列的。真正的顺序是A、C、D、B (2认同)