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
中