💡
原文中文,约2800字,阅读约需7分钟。
📝
内容提要
RISC-V 的调用约定规定了函数调用时寄存器的管理。调用者负责保存 caller-saved 寄存器的值,而被调用者负责维护 callee-saved 寄存器。在调用前,调用者需保存寄存器值,调用后恢复;被调用者在执行前后也需保持寄存器的一致性。
🎯
关键要点
- RISC-V 的调用约定规定了函数调用时寄存器的管理。
- 调用者负责保存 caller-saved 寄存器的值,被调用者负责维护 callee-saved 寄存器。
- 调用者在调用前需保存寄存器值,调用后恢复。
- 被调用者在执行前后需保持寄存器的一致性。
- 调用者和被调用者的身份由其行为决定。
- callee-saved 寄存器包括 s0 - s11 和 sp,caller-saved 寄存器包括 a0 - a7 和 t0 - t6。
- 调用者在调用函数前后必须手动维护 caller-saved 寄存器的一致性。
- 被调用者在函数操作前后必须手动维护 callee-saved 寄存器的一致性。
- 在调用函数后,caller-saved 寄存器的值可能会变为垃圾值,调用者需提前保存。
- RISC-V 的调用约定确保了寄存器的内容在函数调用前后得到正确管理。
❓
延伸问答
RISC-V 的调用约定是什么?
RISC-V 的调用约定规定了函数调用时寄存器的管理,包括调用者和被调用者对寄存器的责任。
调用者和被调用者在 RISC-V 中的角色是什么?
调用者是发起函数调用的函数,被调用者是被调用的函数,身份由其行为决定。
RISC-V 中的 caller-saved 和 callee-saved 寄存器分别是什么?
caller-saved 寄存器包括 a0 - a7 和 t0 - t6,callee-saved 寄存器包括 s0 - s11 和 sp。
调用者在调用函数前需要做什么?
调用者需在调用函数前保存 caller-saved 寄存器的值,以防其在函数调用后变为垃圾值。
被调用者在函数执行前后需要做什么?
被调用者需在函数执行前后维护 callee-saved 寄存器的一致性,确保其值不变。
如何避免寄存器值变为垃圾值?
可以在调用函数前将寄存器的值保存到栈中,函数结束后再从栈中恢复。
🏷️
标签
➡️