"R" 和 "E" 汇编中的寄存器名称有什么区别

What's the difference between "R" and "E" name of registers in Assembly

我在书中有一个例子,其中包含主函数序言的 GDB 输出:

0х08048357 <main+0> : push еbр
0х08048358 <main+l> : mov  ebp, esp
0х0804835а

但在我的系统 (Manjaro linux) 中,相同的代码和相同的 GDB 为我提供了类似的东西:

   0x000000000000118e <+0>:     push   rbp
   0x000000000000118f <+1>:     mov    rbp,rsp
   0x0000000000001192 <+4>:     mov    ecx,0x4
   0x0000000000001197 <+9>:     mov    edx,0x3
   0x000000000000119c <+14>:    mov    esi,0x2
   0x00000000000011a1 <+19>:    mov    edi,0x1

我想知道“R”和“E”起始寄存器有什么区别。需要“新手”说明。

简答:exx 寄存器是 32 位,rxx 寄存器是 64 位

更长的答案:x86 体系结构从其最初的 16 位根源发展了几十年,当时 16 位寄存器被称为 axbx 等。当 80386 被引入时,寄存器被扩展到 32 位,因此称为 eaxebx 等。参考 80386 上旧的 16 位寄存器名称访问这些扩展寄存器的低 16 位。当AMD将x86指令集架构扩展到64位时,他们选择了'r'作为64位寄存器的前缀,将32位寄存器再次扩展为raxrbx等. 在此过程中,他们添加了几个以前不存在的新寄存器,r8-r15。