在汇编语言中,EAX、EBX、ECX等代表什么意思?

30

谷歌没有显示结果,

有人知道原因吗?


1
相关: Intel 32位和64位寄存器名称中的E和R前缀代表什么?。还询问了“X”部分,但是这个问题有更好的答案,因此不会将其关闭为重复问题。 - Peter Cordes
相关:为什么x86寄存器被命名为它们现在的名称? 关于完整名称的“含义”,以及为什么前四个x86通用寄存器的命名顺序如此不直观? 有关历史的一些内容。还有新X86_64处理器寄存器的名称是什么? 关于64位寄存器名称的内容。 - Peter Cordes
6个回答

47

X代表,至少可以追溯到8080。它有8位寄存器B、C、D、E、H、L(等等),这些寄存器也可以成对使用(BC、DE和HL)。BC和DE对大多用于16位算术运算;而HL对通常保存内存地址。以下是一些关于X代表的示例:

LXI  D,12ABH    ; "load pair immediate"
DCX  B          ; "decrement pair"
STAX D          ; "store A (indirect) at pair"

跳过到8086年。它有AL,AH,BL,BH,CL,CH,DL,DH寄存器,类似于8080,可以成对使用:AX,BX,CX,DX。

正如其他人指出的那样,32位寄存器名称中的E表示扩展


3
太棒了!感谢您提供这个信息。在看到您的帖子之前,我只是猜测 E 表示扩展。 - crush
确认:第一个支持这些指令的英特尔处理器是8080。它没有比那更早了。8008不支持成对寄存器。8008上唯一包含“X”的指令助记符是异或操作。 - Cody Gray
我查阅了官方的Intel 8080程序员手册,相关指令的官方名称如下:STAX/LDAX 存储/加载累加器 INX/DCX 增加/减少寄存器对 LXI 加载立即寄存器对。 - Karol S

10

据我所知,没有任何其他含义。它代表通用寄存器。

16位AX寄存器可以被分为高字节AH和低字节AL进行访问。

EAX寄存器是AX寄存器的32位版本。E代表扩展。


18
8080、8085和Z80都有8位寄存器A、B等。8086有16位AX、EX等寄存器。80386及以上有EAX。我认为E和X都代表“扩展”,X代表16位扩展,E代表32位扩展。 - Jonathan Leffler
2
@Jonathan:X 可能是受“扩展”启发而来,但我还没有找到任何相关描述。如果 X 没有官方含义,那就可以解释为什么他们可以添加另一个“扩展”,而不感到愚蠢。将其命名为“扩展累加器扩展”寄存器似乎缺乏想象力... :) - Guffa
有点像C语言的名字 - C代表代码。 - IAbstract
2
@dboarman:它被命名为“C”,因为它是从同样富有想象力的语言“B”演变而来... http://en.wikipedia.org/wiki/C_%28programming_language%29#History - Guffa
@JonathanLeffler E 代表扩展,但 X 不是。它的意思是“一对”。 - I. J. Kennedy
显示剩余2条评论

8
在8086上,AX寄存器是AH和AL的组合。同样,BX是BH和BL等。在80386上,英特尔不再将16位寄存器组合成32位寄存器,而是向每个寄存器添加了16位。名称“AL”仍然指第一个以字母命名的寄存器的0-7位,“AH”指8-15位,“AX”指0-15位;现在名称“EAX”指的是寄存器的全部32位。
有趣的是,大多数其他16位和32位处理器都没有提供任何等效的方法来访问寄存器的上部或下部分。允许这种访问所带来的成本,无论是在硬件复杂性还是指令编码位方面,都是相当显著的。在今天,将寄存器的一个8位部分加到另一个8位部分的能力比许多其他用途要少得多,这些用途可以利用这样的硬件或指令编码空间。另一方面,在存在这种能力时,仍然有时候可以派上用场。

1
正如Mihai所说,这只是一种命名约定。
然而,考虑到'X'经常用于“填入您的值”,并且在方程中通常被数学家作为首选变量名使用,并且这些特定寄存器是通用的(与扩展(32位)堆栈指针ESP或扩展指令指针EIP相对),这可能就是为什么选择X而不是'B'的原因。

同样,变量通常被命名为A、B、C等名称,但这可能是原因。 - thecoshman
嗯,确实,有些人选择a、b、c,而其他人则选择x、y、z……老实说,我只是猜测。 - user257111

0
我能想到的一个可能的原因是,用于表示它没有“正常”的状态。在讨论电子串行通信时,如果其中一条数据线可以是任何值,你可能会说它的状态是X,因为它既不是0也不是1,或者是两者兼而有之。

1
有人可能会认为“X”是“H或L”的简写,因为AX可以被解释为“所有第一个字母为H且第二个字母为H或L的寄存器”,但这与“正常”状态无关。 - supercat

-1

以下是x86通用寄存器的简要说明:

  • EAX:"扩展累加器" - 用于算术和逻辑操作,以及存储函数的返回值。
  • EBX:"扩展基址" - 常用作指向内存数据段中数据的指针。
  • ECX:"扩展计数器" - 常用于循环和字符串操作,以及存储函数参数。
  • EDX:"扩展数据" - 常用于I/O操作和存储函数参数。
  • ESI:"扩展源索引" - 常用作指向字符串操作中源操作数的指针。
  • EDI:"扩展目的地索引" - 常用作指向字符串操作中目标操作数的指针。
  • EBP:"扩展基指针" - 常用作指向当前堆栈帧基址的指针。
  • ESP:"扩展堆栈指针" - 常用作指向当前堆栈帧顶部的指针。

1
这是对于“为什么x86寄存器被命名为它们的方式?”的回答,而不是关于EAX和AX中字母X的含义以及由AH:AL组成的问题的回答。 - Peter Cordes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接