Assembly 64位体系结构中的汇编寄存器
以下是:Assembly 64位体系结构中的汇编寄存器,assembly,x86-64,32bit-64bit,cpu-registers,itanium,Assembly,X86 64,32bit 64bit,Cpu Registers,Itanium,以下是: 首先,在64位体系结构中,eax、ax、ah及其对应物的大小是多少?如何访问单个寄存器的字节以及如何访问所有64位寄存器的八个字节 我希望大家对x86-64(x64)和安腾处理器都给予关注 第二,使用四个寄存器保存函数调用中前四个参数的正确方法是什么 使用旧名称时,所有寄存器的大小保持不变,就像x86-16扩展到x86-32时一样。要访问64位寄存器,请使用新名称,例如rax、rbx 寄存器名不会改变,所以您只需像前面一样为ax、bx、cx、dx的LSB和MSB使用字节寄存器(a
- 首先,在64位体系结构中,
、eax
、ax
及其对应物的大小是多少?如何访问单个寄存器的字节以及如何访问所有64位寄存器的八个字节 我希望大家对x86-64(x64)和安腾处理器都给予关注ah
- 第二,使用四个寄存器保存函数调用中前四个参数的正确方法是什么
b
(或)来访问其LSB。例如r8b、r9b。。。您也可以使用esi、edi、esp、ebp的LSB,名称为sil、dil、spl、bpl,但不能与ah、bh、ch或dh同时使用
同样,可以通过后缀w
或d
访问新寄存器的最低字或双字
看
关于调用约定,在特定系统上只有一个约定
- :
- RCX、RDX、R8、R9用于前四个整数或指针参数
- 浮点参数的XMM0、XMM1、XMM2、XMM3
1自MSVC 2013年以来,Windows上还有一个新的扩展约定,称为“单一约定策略”,因此“单一约定策略”不再适用 - 在Linux和其他后续系统上,可以在寄存器上传递更多的参数,堆栈下面有一个128字节,这可能会加快函数调用速度
- 前六个整数或指针参数在寄存器RDI、RSI、RDX、RCX、R8和R9中传递
- 浮点参数在XMM0到XMM7之间传递
- 所有寄存器都已保存
- 所有参数都在堆栈上传递
- 返回值也在堆栈上返回,在参数下面保留的空间中(堆栈方向;amd64上的更高地址)
OTOH是一种完全不同的体系结构,与x86-64没有任何关系。它是一个纯64位体系结构,所以所有普通寄存器都是64位的,没有32位或更小的版本可用。其中有很多寄存器:
- 128个通用整数寄存器r0到r127,每个寄存器携带64个值位和一个陷阱位。稍后我们将了解更多关于陷阱位的信息
- 128个浮点寄存器f0到f127
- 64谓词寄存器p0到p63
- 8个分支寄存器b0到b7
- 一个指令指针,Windows调试引擎出于某种原因调用它iip。(额外的“i”表示“疯狂”?)
- 128个专用寄存器,但并非所有寄存器都已赋予含义。出于某种原因,这些被称为“应用程序寄存器”(ar)。我将介绍在讨论过程中出现的选定登记册
- 在本系列中我们将不介绍其他杂项寄存器李>
阅读更多关于hmm
eax==32位
ax==16位
ah | al==8位
,总是这样的,x64添加了新的寄存器,在16位的日子里,我们只有ax&al&ah
,然后当32位寻址出现时,它的添加方式并没有真正影响16位或8位寄存器的寻址方式,x64中的新寄存器(重叠的64位寄存器、重叠ax的eax等)以r
sorax
rbx
等开头。了解更多信息。