定义
假设有如下场景:函数 A 调用了函数 B。寄存器 %rbx 需要在调用 B 函数前后保持一致。
1 | func A: |
$\color{red}{调用者保存寄存器:}$
1 | func A: |
如上图所示,寄存器 %rbx 是由函数 B 的调用者,即函数 func A 来保存并且恢复的。函数 B 感知不到这个情况,可以尽情使用寄存器 %rbx。
$\color{red}{被调用者保存寄存器:}$
1 | func A: |
如图所示,寄存器 %rbx 是由被调用函数,即函数 B 来保存并回复的。函数 A 感知不到这个情况。
寄存器分类
不同的寄存器有不同的保存策略。
$\color{red}{callee \ saved(被调用者保存):}$
%rbx ,%rbp,%r12,%r13,%r14,%r15
$\color{red}{caller \ saved(调用者保存):}$
%rax,%rdi,%rsi,%rdx,%rcx,%8,%r9,%r10,%r11