1. %rax 作为函数返回值使用。
  2. %rsp 栈指针寄存器,指向栈顶
  3. %rdi,%rsi,%rdx,%rcx,%r8,%r9 用作函数参数,依次对应第1参数,第2参数。。。
  4. %rbx,%rbp,%r12,%r13,%14,%15 用作数据存储,遵循被调用者使用规则,简单说就是随便用,调用子函数之前要备份它,以防他被修改
  5. %r10,%r11 用作数据存储,遵循调用者使用规则,简单说就是使用之前要先保存原值

通用寄存器

EAX(Extend Add):累加器,在乘法和除法指令中自动使用;Win32中,一般用在函数的返回值中。
EBX(Extend Base):基地址寄存器,DS(数据段)中的数据指针。
ECX(Extend Count):计数器,CPU自动使用ECX作为循环计数器,在自妇产和循环操作中常用,在循环指令(LOOP)或串操-作中,ECX用来进行循环计数,每执行一次循环,ECX都会被CPU自动减一。
EDX(Extend Data):数据寄存器。

以上的寄存器常用来保存各种需要计算的值。

EBP(Extend Base Pointer):基地址指针寄存器,SS(堆栈段)中数据指针。EZBP有高级语言用来引用参数和局部变量,通常称为堆栈基地址寄存器。
ESP(Extend Stack Pointer):堆栈指针寄存器,SS(堆栈段)中堆栈指针,ESP用来寻址堆栈上的数据,ESP寄存器一般不参与算数运算,通常称为堆栈指针寄存器。
ESI(Extend Source Improve):源变址寄存器,字符串操作源指针。
EDI (Extend Destination Improve):目的变址寄存器,字符串操作目标指针。

指令指针寄存器

EIP

段寄存器

CS (Code Segment) 代码段
DS (Data Segment) 数据段
ES (Extra Segment) 附加段
SS (Stack Segment) 堆栈段
FS (Fream Segment) 附加段,指向重要的操作系统数据结构,如 SHE:Structured Exception Handling、TEB:Thread Execute Block、PEB:Process Execute Block
GS()附加段,GS寄存器用于指向操作系统定义的结构。 FS并且GS通常被OS内核用于访问线程专用的内存。在Windows中,该GS寄存器用于管理线程特定的内存。linux内核用于GS访问cpu特定的内存。

标志寄存器

在16位的CPU中,标志寄存器称为 FLAGS 或者 PSW(Program Status Word)
在32位的CPU中,标志寄存器被扩展成32位,称为EFLAGS

OF(OverFlow Flag) 溢出标志位,用来反映有符号数的加减运算所得的结果是否溢出(其实只存在加法运算器),超过表示溢出为1 否则为0。
SF(Sign Flag) 符号标志位,反映运算结果的正负,负为1,正为0。
ZF(Zero Flag) 零标志位,用来反映运算结果是否为0,为0置位为1,否则为0。
AF(Auxiliary Flag) 辅助进位标志位,在字操作时,发生低字节向高字节进位或者借位时被置为1,否则为0。(注意:在字节操作时,发生低4位向高4位进位或者借位时该标志位置为1,否则为0)。
PF(Parity Flag) 奇偶校验标志位:用于反映结果中“1”的个数的奇偶性。如果“1”的个数为偶数,该标志位为1,否则为0。
CF(Carry Flag) 进位标志位,运算结果的最高位位产生了一个个进位或错位,该标志位被置为1,否则为0。

控制标志寄存器

DF(Direction Flag) 方向标志位,用于串操作指令中,控制地址的变化方向。当DF为0时,存储器地址自动增加;当DF为1时,存储器自动减少。操作DF标志寄存器可以使用 CLD和STD进行复位和置位。
IF(Interrupt Flag) 中断标志位,用于控制外部可屏蔽中断是否可以被处理器响应。当IF为1时,允许中断;当IF为0时,则不允许中断。操作IF标志寄存器可以使用CLI和STI进行复位和置位。
TF(Trap Flag) 陷阱标志位,用于控制处理器是否进入单步的操作方式。当TF为0时,处理器在正常模式下运行;当TF为1时,处理器单步执行指令,调试器可以逐条指令进行执行就是使用了该标志位。