IA32平台的寄存器的使用约定
C/C++编译器遵守如下约定的规则
- 当该函数是处于调用者角色时, 如果该函数执行过程中产生的临时数据会已存储在**%eax, %edx, %ecx这些寄存器中, 那么在其执行call指令之前会将这些寄存器的数据写入其栈帧内指定的内存区域, 这个过程叫做调用者保存约定(英文原名称: Caller Save)**.
- 当该函数是处于被调用者角色时, 那么在其使用这些寄存器**%ebx, %esp, %edi之前, 那么该函数会保存这些寄存器中的信息到其栈帧指定的内存区域, 这个过程叫做被调用者保存约定**.
- %eax总会被用作返回整数值.
- %esp, %ebp总被分别用着指向当前栈帧的顶部和底部, 主要用于在当前函数推出时, 将它们还原为原始值.
- 对于全栈角度来说, %esp也叫做整个栈的栈指针(Stack Pointer)
- 对于某个函数的栈帧来说, %ebp也叫做该函数的帧指针(Frame Pointer)