在 Linux 世界中,通常寄存器名称命名如下(我的理解):
序号 | 寄存器名称 | 注释 |
---|---|---|
0 | %rax | 累加器 通畅存储函数调用的返回结果,也被用再idiv(除法)和imul(乘法)命令中。 |
1 | %rbx | 基址寄存器 base register 用于访问内存的基址 属于通用寄存器 |
2 | %rcx | 计数寄存器 |
3 | %rdx | 数据寄存器 属于通用寄存器 |
4 | %rsi | 源变址寄存器 |
5 | %rdi | 目标变址寄存器 |
6 | %rbp | 基址寄存器 一般用来存放栈底地址, stack frame的开始地址 |
7 | %rsp | 栈顶指针寄存器 标识当前栈帧的起始位置 |
8 | %r8 | 属于通用寄存器 |
9 | %r9 | 属于通用寄存器 |
10 | %r10 | 属于通用寄存器 |
11 | %r11 | 属于通用寄存器 |
12 | %r12 | 属于通用寄存器 |
13 | %r13 | 属于通用寄存器 |
14 | %r14 | 属于通用寄存器 |
15 | %r15 | 属于通用寄存器 |
%rdi %rsi %rdx %rcx %r8 %r9
当形参数量<7时,参数从左到右放入寄存器:rdi,rsi,rdx,rcx,r8,r9;
当形参数量>=7时,前6个与上面一样,但后面的顺序依次为”右向左”放入栈中,即和32位汇编一样;