新的X86_64处理器寄存器的名称是什么?
我在哪里可以find在这个架构上assembly的新寄存器的名称?
我指的是X86中的寄存器,比如EAX,ESP,EBX等,但是我希望它们在64位。
我不认为它们与拆解我的C代码时是一样的,我得到r而不是e。
旧的32位寄存器已经扩展到64位, r
寄存器( rax
, rbx
, rbx
等)。
此外,还有一些额外的通用寄存器r8
到r15
,它们也可以作为(例如) r8d
, r8w
和r8b
(低32位双字,16位字和8位字节)访问。
在许多情况下,旧的16位寄存器的高字节仍然是可访问的,如ah
, bh
等等,但r8
到r15
寄存器的情况似乎不是这样。 有一些新的指令编码,特别是那些使用REX
前缀的指令编码,不能访问那些高字节,但其他的仍然可以自由使用它们。
此外,还有一些新的SSE寄存器, xmm8
到xmm15
。
eip
和flags
寄存器也被扩展为rip
和rflags
。
有关更多详细信息,请参阅维基百科页面和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中打印寄存器值?