RISC-V 函数调用约定

RISC-V 函数调用约定

💡 原文中文,约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 寄存器的一致性,确保其值不变。

如何避免寄存器值变为垃圾值?

可以在调用函数前将寄存器的值保存到栈中,函数结束后再从栈中恢复。

➡️

继续阅读