新的X86_64处理器寄存器的名称是什么?

时间:2009-11-18 04:17:38

标签: assembly x86 x86-64 cpu-registers

在哪里可以找到用于此体系结构的新寄存器的名称?

我指的是X86中的寄存​​器,如EAX,ESP,EBX等。但我喜欢它们的64位。

我不认为它们与我拆解C代码时的情况相同,我得到r而不是e。

4 个答案:

答案 0 :(得分:94)

MSDN documentation包含有关x64寄存器的信息。

  

x64扩展了x64的8通用功能   寄存器为64位,并添加8个新的   64位寄存器。 64位寄存器   名字以“r”开头,所以   例如,eax的64位扩展名是   叫做rax。新的寄存器是   命名为r8至r15。

     

低32位,16位和8位   每个寄存器都是直接的   在操作数中可寻址。这包括   寄存器,如esi,其低8   位先前不可寻址。   下表指定了   下层的汇编语言名称   部分64位寄存器。

64-bit register | Lower 32 bits | Lower 16 bits | Lower 8 bits
==============================================================
rax             | eax           | ax            | al
rbx             | ebx           | bx            | bl
rcx             | ecx           | cx            | cl
rdx             | edx           | dx            | dl
rsi             | esi           | si            | sil
rdi             | edi           | di            | dil
rbp             | ebp           | bp            | bpl
rsp             | esp           | sp            | spl
r8              | r8d           | r8w           | r8b
r9              | r9d           | r9w           | r9b
r10             | r10d          | r10w          | r10b
r11             | r11d          | r11w          | r11b
r12             | r12d          | r12w          | r12b
r13             | r13d          | r13w          | r13b
r14             | r14d          | r14w          | r14b
r15             | r15d          | r15w          | r15b

答案 1 :(得分:70)

旧的32位寄存器已扩展为64位,r寄存器(raxrbxrsp等等。

此外,还有一些额外的通用寄存器r8r15,也可以作为(例如)r8dr8wr8b进行访问(较低的32位双字,16位字和8位字节)。 b后缀是原始的AMD命名法,但您有时会将其视为l(小写L)为“低字节”。

我倾向于自己更喜欢b后缀(即使当前的低字节寄存器为albl,等等),因为它与d/w = double/word匹配名称和l可能会被误认为是long。或者更糟糕的是,数字1,让您质疑寄存器编号81是什么: - )

在许多情况下,旧的16位寄存器的高字节仍然可以作为ahbh等访问(尽管新的{似乎不是这种情况) {1}}通过r8寄存器)。有一些新的指令编码,特别是那些使用r15前缀的编码,它们无法访问那些原始的高字节,但其他人仍可以自由使用它们。

此外,还有一些新的SSE寄存器REX虽然xmm8

xmm15eip寄存器也已扩展为eflagsrip(尽管rflags的高32位仍然是未使用的)。

有关详细信息,请参阅wikipedia pageMSDN

对于特定的C编译器,rflags关键字是否支持这些,我不能说。我做的小装配(并且它每年大约一天)是在装配而不是C中完成的。


相关:

答案 2 :(得分:9)

X64扩展了32位通用寄存器,如下所示:

EAX -> RAX
EBX -> RBX
ECX -> RCX
EDX -> RDX
ESI -> RSI
EDI -> RDI
ESP -> RSP
EBP -> RBP

X64还添加了以下64位通用寄存器:

R8, R9, R10, R11, R12, R13, R14, R15

此外,SSE是X64规范的一部分,因此也可以使用xmm0-xmm15向量寄存器

您可以在Wikipedia/X86-64找到有关该架构的一些基本信息,或访问英特尔网站。

答案 3 :(得分:6)

让我们阅读英特尔手册

  

在哪里可以找到用于此体系结构的新寄存器的名称。

在处理器手册“Intel 64和IA-32架构软件开发人员手册第1卷:基本架构”中,例如version 253665-053US

  • 搜索“register”
  • 第一个匹配是索引“3.4 BASIC PROGRAM EXECUTION REGISTER”
  • 以下两项“3.4.1.1 64位模式下的通用寄存器”

在该部分:

  

如果指定了64位操作数大小:RAX,RBX,RCX,   可提供RDX,RDI,RSI,RBP,RSP,R8-R15。 R8D-R   15D / R8-R15代表八个新的通用寄存器。

提醒:64位模式是x86-64中的“正常”模式。另一种主要模式是模拟IA32的“兼容模式”。

如果您继续在TOC上搜索“register”,您还会在手册中找到有关浮点和SIMD的“数字破碎”寄存器的部分:

  • 8.1.2 - x87 FPU数据寄存器(STx)
  • 9.9.2 - MMX注册
  • 10.2.2 - XMM注册
  • 14.1.1 - 256位宽SIMD寄存器支持(YMM)

还有更多的控制寄存器具有各种副作用,除非您需要这些效果(通常为require ring 0),否则通常无法写入。这些在“第3卷系统编程指南”中进行了总结 - 2.1.6系统寄存器“,更多适用于OS开发人员。

一个好的经验方法是在GDB中运行info all-registersHow to print register values in GDB?