一、寄存器 1.1 通用寄存器 一个x86-64的中央处理单元(CPU)包含一组16个存储64位值的通用寄存器。这些寄存器用来存储整数数据和指针。下图显示了这16个寄存器。它们的名字都以%r开头,不过后面还跟着不同命名规则的名字,这是由于指令集历史演化造成的。最初的8086中有8个16位的寄存器,即图中的%ax到%bp。每个寄存器...
除了rbp、rsp用于特定用途外,其余5个寄存器可随意使用。 Caller Save 和 Callee Save寄存器 : 寄存器的值是由”调用者保存“ 还是由 ”被调用者保存“。当进行函数调用时,子函数通常也会使用通用寄存器,但这些寄存器中可能保存着父函数(调用者)的值。如果是Caller Save 寄存器,在进行子函数调用之前,需要由调用者提...
最初的8086中有8个16位的寄存器,即从%ax到%sp。 每个寄存器都有特殊的用途,它们的名字就反映了这些不同的用途。 扩展到IA32架构,这些寄存器也扩展成32位寄存器,标号从%eax到%esp。 扩展到x86-64后,原来的8个寄存器扩展成64位,标号从%rax到%rsp。 除此之外,还增加了8个新的寄存器,它们的标号是按照新的命名...
在x86_64体系架构中,总共有16个64位通用寄存器,各寄存器及用途如下所示: 对上图中的寄存器做简单说明: %rax :通常存储函数调用的返回结果,也被用在idiv (除法)和imul(乘法)命令中。 %rsp :堆栈指针寄存器,指向栈顶位置。pop操作通过增大rsp的值实现出栈,push操作通过减小rsp的值实现入栈。 %rbp :栈帧指针,...
在此列出x86架构处理器在64位模式下的可用寄存器列表,方便查阅~ 这里要注意的是,在64位模式下,所有通用寄存器都能访问第8位部分,低16位部分以及低32位部分。 以下是64位模式下AMD64 ABI函数调用协议参数传递机制: rdi, rsi, rdx, rcx, r8, r9
从寄存器来看,64 位模式与 32 位最主要的区别如下所示:16 个 64 位通用寄存器(32 位模式只有 8 个通用寄存器),8 个 80 位浮点寄存器,1 个 64 位状态标志寄存器 RFLAGS (只使用低 32 位),1 个 64 位指令指针寄存器 RIP。 32 位标志寄存器和指令指针寄存器分别称为 EFLAGS 和 EIP。此外,还有一些 x86 ...
作为最后一个阶段,结果写回(Writeback,WB)阶段把执行指令阶段的运行结果数据“写回”到某种存储形式:结果数据经常被写到 CPU 的内部寄存器中,以便被后续的指令快速地存取;在有些情况下, 结果数据也可被写入相对较慢、但较廉价且容量较大的主存。许多指令还会改变程序状态字寄存器中标志位的状态,这些标志位标识着不...
x86 通用寄存器少,64位架构下只有16个。32位的只有8个。而且很多指令隐形的依赖或修改通用寄存器。8个使用有严格的限制,8个可以自由使用。这造成为了遵守这些寄存器使用规则,经常需要将寄存器之间的数据互相移动。因为有限的通用寄存器数量以及其中还有限制使用规则,为指令分配使用的寄存器时,经常会出现一些...
在新的架构中,另外新增了8个通用寄存器:64位的r8, r9, r10, r11, r12, r13, r14, r15。这样就有利与编译器将函数参数、返回值等放在这些新增的GPR里面进行传递,从而提高了程序的运行速度。同时,128位的MMX寄存器也从原来的8个增加到了16个。 3)增大的逻辑地址空间 目前在新的架构中,应用程序可以拥有的逻辑...