"rax" 与 "eax" 有何不同?

How is "rax" different from "eax"?

我正在阅读“黑客:剥削的艺术”。

书中的寄存器与我在电脑上看到的寄存器不同。这些是我的 cpu 寄存器:

拉克斯, 回复, 回复, RDX, 强弱指数, rdi, 限制性商业惯例, 回复, r8, r9, r10, r11, r12, r13, r14, r15, 撕裂, 旗帜, CS, 党卫军, , 是的, 飞秒, GS

而在书中寄存器是:

eax, 执行, 埃德克斯, 电子书, 特别是 电子书, 埃西, 埃迪, 艾普, 旗帜, CS, 党卫军, , 是的, 飞秒, GS

有人能解释一下为什么它们不同吗?我 运行 使用 AMD cpu; AMD 与 Intel 有不同的 CPU 寄存器吗?

这样的话谁能给我解释一下两种架构的寄存器的对应关系?

r开头的寄存器,如raxrbx等,是64位寄存器,随着AMD64 extension to the existing 32-bit x86 ISA. That ISA extension was subsequently adopted by Intel and is often known by the more neutral name x86-64。基本上,过去十年中 AMD 和 Intel 发布的所有 x86 芯片都支持此 ISA。

eaxebx等寄存器都是32位寄存器,既存在于原始的32位x86 ISA中,也存在于64位x86-64中。如果您的书仅 提到那些寄存器,它很可能没有涵盖 64 位扩展(也许它是在它之前写的)。

请注意,32 位和 64 位寄存器不是单独的寄存器,因为它们重叠:例如,64 位 rax 的底部 32 位为 eax ,依此类推 rbxebxr8r8d 等等。因此,对 32 位寄存器的修改会反映在相应的 64 位寄存器中,反之亦然。

16 位(ax 等)和 8 位(al 等)寄存器之间存在类似的关系。您可以在 many places.

中找到所有血淋淋的细节