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

我在哪里可以find在这个架构上assembly的新寄存器的名称?

我指的是X86中的寄存​​器,比如EAX,ESP,EBX等,但是我希望它们在64位。

我不认为它们与拆解我的C代码时是一样的,我得到r而不是e。

旧的32位寄存器已经扩展到64位, r寄存器( raxrbxrbx等)。

此外,还有一些额外的通用寄存器r8r15 ,它们也可以作为(例如) r8dr8wr8b (低32位双字,16位字和8位字节)访问。

在许多情况下,旧的16位寄存器的高字节仍然是可访问的,如ahbh等等,但r8r15寄存器的情况似乎不是这样。 有一些新的指令编码,特别是那些使用REX前缀的指令编码,不能访问那些高字节,但其他的仍然可以自由使用它们。

此外,还有一些新的SSE寄存器, xmm8xmm15

eipflags寄存器也被扩展为riprflags

有关更多详细信息,请参阅维基百科页面和MSDN 。

不pipe这些在特定C编译器的asm关键字中是否被支持,我都不能说。 我做了什么小会议(大约每年一天),是在大会上而不是在大会上进行的。

MSDN文档包含有关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 

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-xmm15vector寄存器也可用

您可以在维基百科/ X86-64上find关于架构的一些基本信息,或访问英特尔网站。

我在哪里可以find在这个架构上assembly的新寄存器的名称。

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

  • search“寄存器”
  • 第一场比赛是索引“3.4基本计划执行寄存器”
  • 下面两项“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上search“注册”,您还可以在手册中find有关浮点数和SIMD“数字破碎”寄存器的部分:

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

还有更多的控制寄存器有各种副作用,一般情况下不能写入,除非你想要这些效果(通常需要响铃0)。 这些内容在“第3卷系统编程指南 – 2.1.6系统寄存器”中进行了概述,更多的是OS开发人员。

一个好的实证方法是在GDB中运行info all-registers : 如何在gdb中打印寄存器值?