【问题标题】:What does X mean in EAX,EBX,ECX ... in assembly?X 在 EAX,EBX,ECX ... 在汇编中是什么意思?
【发布时间】:2011-02-02 11:08:07
【问题描述】:

Google 不显示结果,

有人知道吗?

【问题讨论】:

标签: assembly x86 naming-conventions cpu-registers


【解决方案1】:

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

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

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

【讨论】:

  • 8080、8085 和 Z80 有 8 位寄存器 A、B 等。8086 有 16 位 AX、EX 等寄存器。 80386 及更高版本获得了 EAX。我假设 E 和 X 都代表“扩展”,X 代表 16 位扩展,E 代表 32 位扩展。
  • @Jonathan:X 可能受到“扩展”的启发,但我还没有在任何地方找到这样的描述。如果 X 没有官方含义,那将解释他们如何添加另一个“扩展”而不感到愚蠢。将其命名为“扩展累加器扩展”寄存器似乎缺乏想象力...... :)
  • 有点像“C”的名字——C 代表代码。
  • @dboarman:之所以命名为“C”,是因为它源自语言“B”,同样富有想象力……en.wikipedia.org/wiki/C_%28programming_language%29#History
  • 我阅读了该链接,但我没有找到具体的内容......无论哪种方式,编码员都不会被认为是过度想象力。 ;)
【解决方案2】:

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

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

【讨论】:

  • 同样,变量往往是名称,A B C ......但这可能是原因。
  • 嗯,没错,有些人选择 a,b,c,有些人选择 x,y,z...我只是在说实话。
【解决方案3】:

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

【讨论】:

  • 有人可能认为“X”是“H 或 L”的简写,因为 AX 可以解释为“第一个字母为 H,第二个字母为 H 或 L 的所有寄存器”,但这与“正常”状态无关。
【解决方案4】:

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

【讨论】:

  • 太棒了!谢谢你。我只是猜测E 在您的帖子之前代表扩展。
  • 确认:第一个支持这些指令的英特尔处理器是 8080。它不会再往前追溯了。 8008 不支持配对寄存器。 8008 上唯一包含 X 的指令助记符是 XOR 操作。
  • 查了Intel 8080官方的程序员手册,相关指令官方命名如下:STAX/LDAX store/load accumulator INX/DCX increment/decrement register pair LXI load register pair immediate。
【解决方案5】:

在 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 位部分的能力还远远不够不如可能放置此类硬件或指令编码空间的许多其他用途有用。另一方面,当这些能力存在时,它们仍然会派上用场。

【讨论】:

    猜你喜欢
    • 2012-05-21
    • 2020-03-10
    • 1970-01-01
    • 2011-07-31
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多