Rec*_*ion 54 x86 assembly x86-64 cpu-registers
在哪里可以找到用于此体系结构的新寄存器的名称?
我指的是X86中的寄存器,如EAX,ESP,EBX等.但我喜欢它们在64位.
我不认为它们与我拆解C代码时的情况相同,我得到r而不是e.
RRU*_*RUZ 95
的MSDN文档包括关于64位寄存器的信息.
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
Run Code Online (Sandbox Code Playgroud)
pax*_*blo 72
旧的32位寄存器被扩展到64位,则r
寄存器(rax
,rbx
,rsp
等等).
此外,有一些额外的通用寄存器r8
通过r15
其也可以访问如(例如)r8d
,r8w
和r8b
(低32位双字,16位字和8位字节分别地).
在许多情况下,旧的16位寄存器的高字节仍可访问,因为b
,l
等等,但这似乎不是L
通过b
寄存器的情况.有一些新的指令编码,特别是那些使用al
前缀的编码,它们无法访问那些高字节,但其他编码仍然可以自由使用它们.
此外,还有一些新的SSE寄存器,bl
虽然d/w = double/word
.
在l
和long
寄存器也被扩展到1
和81
.
ah
对于特定的C编译器的关键字是否支持这些,我不能说.我做的小装配(并且它每年大约变成一天)是在装配而不是装配中完成的.
小智 9
X64扩展了32位通用寄存器,如下所示:
EAX -> RAX
EBX -> RBX
ECX -> RCX
EDX -> RDX
ESI -> RSI
EDI -> RDI
ESP -> RSP
EBP -> RBP
Run Code Online (Sandbox Code Playgroud)
X64还添加了以下64位通用寄存器:
R8, R9, R10, R11, R12, R13, R14, R15
Run Code Online (Sandbox Code Playgroud)
此外,SSE是X64规范的一部分,因此也可以使用xmm0-xmm15向量寄存器
您可以在Wikipedia/X86-64上找到有关架构的一些基本信息,或访问英特尔的网站.
让我们阅读英特尔手册
在哪里可以找到要在此体系结构上组装的新寄存器的名称。
在处理器手册“英特尔64和IA-32架构软件开发人员手册第1卷:基本架构”中,例如253665-053US版本:
在该部分:
如果指定了64位操作数大小:RAX,RBX,RCX,RDX,RDI,RSI,RBP,RSP,R8-R15可用。R8D-R 15D / R8-R15代表八个新的通用寄存器。
提醒:64位模式是x86-64中的“正常”模式。另一个主要模式是模拟IA32的“兼容模式”。
如果您继续在目录上搜索“寄存器”,则还会在手册中找到有关浮点数和SIMD的“数字压缩”寄存器的部分:
还有更多的控制寄存器,这些寄存器具有各种副作用,除非希望得到这些效果(通常需要环0),否则通常无法写入这些寄存器。这些内容在“第3卷系统编程指南-2.1.6系统寄存器”中进行了概述,该文档更适合OS开发人员。
一个好的经验方法是info all-registers
在GDB中运行:如何在GDB 中打印寄存器值?
归档时间: |
|
查看次数: |
71200 次 |
最近记录: |