1. 通用寄存器
名称 |
全称 |
32位 |
16位 |
8位 |
编号 |
功能 |
%rax |
累加器(Accumulator) |
%eax |
%ax |
%ah %al |
0 (0000) |
返回值 |
%rcx |
计数器(Count Register) |
%ecx |
%cx |
%ch %cl |
1 (0001) |
第二个参数 |
%rdx |
数据寄存器(Data Register) |
%edx |
%dx |
%dh %dl |
2 (0010) |
第三个参数 |
%rbx |
基址寄存器(Base Register) |
%ebx |
%bx |
%bh %bl |
3 (0011) |
被调用者保存 |
%rsp |
堆栈指针寄存器(Stack Pointer) |
%esp |
%sp |
%spl |
4(0100) |
栈顶指针 |
%rbp |
基址指针寄存器(Base Pointer) |
%ebp |
%bp |
%bpl |
5(0101) |
被调用者保存 |
%rsi |
源变址寄存器(Source Index) |
%esi |
%si |
%sil |
6(0110) |
第二个参数 |
%rdi |
目的变址寄存器(Destination Index) |
%edi |
%di |
%dil |
7(0111) |
第一个参数 |
%r8 |
通用 |
%r8d |
%r8w |
%r8b |
8(1000) |
第五个参数 |
%r9 |
通用 |
%r9d |
%r9w |
%r9b |
9(1001) |
第六个参数 |
%r10 |
通用 |
%r10d |
%r10w |
%r10b |
10(1010) |
调用者保存 |
%r11 |
通用 |
%r11d |
%r11w |
%r11b |
11(1011) |
调用者保存 |
%r12 |
通用 |
%r12d |
%r12w |
%r12b |
12(1100) |
被调用者保存 |
%r13 |
通用 |
%r13d |
%r13w |
%r13b |
13(1101) |
被调用者保存 |
%r14 |
通用 |
%r14d |
%r14w |
%r14b |
14(1110) |
被调用者保存 |
%r15 |
通用 |
%r15d |
%r15w |
%r15b |
15(1111) |
被调用者保存 |
2. 段寄存器
名称 |
全称 |
功能 |
%cs |
代码段寄存器(Code Segment) |
代码段基址 |
%ds |
数据段寄存器(Data Segment) |
默认数据段基址 |
%ss |
堆栈段寄存器(Stack Segment) |
堆栈段基址 |
%es |
扩展段寄存器(Extra Segment) |
扩展段基址 |
%fs |
扩展段寄存器(e 后面是 f,按顺序排列,没有语义) |
扩展段基址 |
%gs |
扩展段寄存器(f 后面是 g,按顺序排列,没有语义) |
扩展段基址 |
3. 其它寄存器
名称 |
全称 |
32位 |
16位 |
8位 |
编号 |
功能 |
%rip |
指令指针寄存器(Instruction Pointer) |
%ip |
- |
- |
- |
当前执行的指令 |
%rflags |
标志位(Flags) |
%eflags |
- |
- |
- |
标志位 |
4. 寄存器缩写含义
- %ah中的h : High
- %al中的l : Low
- %eax中的e : Extend
- %rax中的r : 应该是Register,不确定
- b : byte
- w : word
5. 函数调用中用到的寄存器
// 伪代码
func name(a, b, c, d, e, f) {
return g;
}
调用函数时参数a,b,c,d,e,f
依次保存到%rdi,%rsi,%rdx,%rcx,%r8,%r9
中,返回值g
保存到%rax
中