"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 位寄存器被称为 ax
、bx
等。当 80386 被引入时,寄存器被扩展到 32 位,因此称为 eax
、ebx
等。参考 80386 上旧的 16 位寄存器名称访问这些扩展寄存器的低 16 位。当AMD将x86指令集架构扩展到64位时,他们选择了'r'作为64位寄存器的前缀,将32位寄存器再次扩展为rax
、rbx
等. 在此过程中,他们添加了几个以前不存在的新寄存器,r8-r15。
我在书中有一个例子,其中包含主函数序言的 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 位寄存器被称为 ax
、bx
等。当 80386 被引入时,寄存器被扩展到 32 位,因此称为 eax
、ebx
等。参考 80386 上旧的 16 位寄存器名称访问这些扩展寄存器的低 16 位。当AMD将x86指令集架构扩展到64位时,他们选择了'r'作为64位寄存器的前缀,将32位寄存器再次扩展为rax
、rbx
等. 在此过程中,他们添加了几个以前不存在的新寄存器,r8-r15。