the difference between caller and callee saved registers
Caller-saved registers (AKA volatile registers, or call-clobbered) are used to hold temporary quantities that need not be preserved across calls.
因此,如果调用者想要在过程调用后恢复该值,则有责任将这些寄存器压入堆栈或将它们复制到其他位置。
Callee-saved registers (AKA non-volatile registers, or call-preserved) are used to hold long-lived values that should be preserved across calls.
当调用者进行过程调用时,可以预期这些寄存器在被调用者返回后将保持相同的值,因此被调用者有责任在返回调用者之前保存并恢复它们。或者不要碰它们。
X86_64
- caller saves following registers —> rdi, rsi, rdx, rcx, r8, r9.
- Callee saves following registers —> rbx, rbp, r12, r13, r14.