汇编中EAX,EBX,ECX...中的X是什么意思?

问题描述 投票:0回答:7

Google 没有显示结果,

有人知道吗?

assembly x86 naming-conventions cpu-registers
7个回答
48
投票

X 表示 pair,并且至少可以追溯到 8080。它有 8 位寄存器 B、C、D、E、H、L(等等),也可以成对使用(BC、 DE 和 HL)。 BC和DE对主要用于16位算术; HL 对通常保存一个内存地址。 X 代表 pair 的一些用法示例:

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 表示 扩展


10
投票

据我所知,没什么。它代表通用寄存器。

16位AX寄存器可寻址为AH(高字节)和AL(低字节)。

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


8
投票

在8086上,AX寄存器是AH和AL的组合。同样,BX 是 BH 和 BL 等。在 80386 上,Intel 没有将 16 位寄存器合并为 32 位寄存器,而是为每个寄存器添加了 16 位。名称“AL”仍然指第一个字母命名的寄存器的位 0-7,“AH”指位 8-15,“AX”指位 0-15;名称“EAX”现在指的是寄存器的所有 32 位。

值得注意的是,大多数其他 16 位和 32 位处理器不提供任何等效的方法来仅访问寄存器的上部或下部。允许这种访问的成本(无论是在硬件复杂性还是在指令编码位方面)都是巨大的,并且在当今时代,将一个寄存器的一个 8 位部分添加到另一个寄存器的 8 位部分的能力远远不够。不如此类硬件或指令编码空间可能用于的许多其他用途有用。另一方面,当这些能力存在时,有时仍然会很有用。


1
投票

正如 Mihai 所说,这只是一个命名约定。

但是,鉴于“X”通常用于“填写您的值”,并且数学家通常将其用作方程中选择的第一个变量名称,并且这些特定寄存器是通用目的(与 ESP 相反,ESP 是扩展(32 位)堆栈指针或 EIP(扩展指令指针),这也许就是选择 X 而不是“B”的原因。


0
投票

我能想到的一个可能的原因是表明它没有“正常”状态。当谈论电子设备中的串行通信时,如果其中一根数据线可以是任何东西,您可能会说它的状态是 X,因为它不是/两者/不是 0 或 1。


0
投票

没有人认为它来自十六进制吗?


-1
投票

以下是对每个x86通用寄存器代表什么的简要解释:

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