RISC-V 汇编语言编程中的调用约定与栈管理
1. RISC-V 跳转指令
在 RISC - V 汇编语言中,“jr” 是一条伪指令,其操作是将程序计数器(PC)设置为寄存器 rs 中的值,实际上是一种通过寄存器的跳转操作,使得程序在调用点之后继续执行。该伪指令会被汇编器展开为 jalr x0, rs, 0 指令,此指令将 PC 设置为 rs + 0 的值,由于没有保存返回值,所以它纯粹是一个跳转操作。
2. 伪操作码 “ret”
“ret” 也是一条伪操作码,通常用于返回调用点。它会被汇编器展开为 jalr x0, ra, 0 。根据 GNU 调用约定,返回地址会保存在寄存器 ra (即 x1 )中,通过跳转到 ra 中的地址,我们就能返回到调用者处。
3. 通用调用过程
通用的调用过程如下:
1. 调用者执行 “jal” 或 “jalr” 指令,将返回地址存入寄存器 rd ,通常 rd 为 ra ( x1 )。
2. PC 跳转到偏移量 + rs 的位置,开始执行被调用的代码。
3. 被调用的代码通过 “ret”、“jr ra” 或 “jalr x0, ra, 0” 指令返回。
除非使用不同于 ra (
超级会员免费看
订阅专栏 解锁全文

8483

被折叠的 条评论
为什么被折叠?



