RISC-V 架构寄存器规范

a0 - a7( x10 - x17 )

调用者保存,用来传递输入参数。其中的 a0 和 a1 还用来保存返回值

t0 - 6( x5 - x7, x28 - x31 )

调用者保存,作为临时寄存器使用,在被调函数中可以随意使用无需保存

s0 - s11( x8 - x9, x18 - x27 )

被调用者保存,作为临时寄存器使用,被调函数保存后才能在被调函数中使用

zero( x0 )

它恒为零,函数调用不会对它产生影响

ra( x1 )

调用者保存,被调用者函数可能也会调用函数,在调用之前就需要修改 ra 使得这次调用能正确返回。因此,每个函数都需要在开头保存 ra 到自己的栈帧中,并在结尾使用 ret 返回之前将其恢复。栈帧是当前执行函数用于存储局部变量和函数返回信息的内存结构

sp( x2 )

调用者保存,栈指针 (Stack Pointer) 寄存器,它指向下一个将要被存储的栈顶位置

fp( s0 )

被调用者保存,它既可作为s0临时寄存器,也可作为栈帧指针(Frame Pointer)寄存器,表示当前栈帧的起始位置。fp 指向的栈帧起始位置 和 sp 指向的栈帧的当前栈顶位置形成了所对应函数栈帧的空间范围

gp( x3 ) , tp( x4 )

在一个程序运行期间都不会变化,因此不必放在函数调用上下文中

相关推荐
数字化顾问4 小时前
(125页PPT)IBM流程架构方法论及案例(附下载方式)
架构
●VON4 小时前
深入昇腾NPU:从架构到算子开发的全栈探索
架构·昇腾·昇腾npu·gpt-oss-20b·昇腾训练营
Wang's Blog7 小时前
Nestjs框架: 微服务项目工程结构优化与构建方案
微服务·云原生·架构·nestjs
GM_8287 小时前
初识DDD架构
架构
wangruofeng9 小时前
为 CI/CD 装上“眼睛”:App 包大小监控的实践
ci/cd·架构
装不满的克莱因瓶12 小时前
【Java架构师】各个微服务之间有哪些调用方式?
java·开发语言·微服务·架构·dubbo·restful·springcloud
apollo_qwe12 小时前
Vue 权限控制神技!自定义 auth 指令优雅实现按钮级权限管理
vue.js·架构
oak隔壁找我14 小时前
SpringBoot Starter 进阶教程
java·后端·架构
CtrlZ学习录14 小时前
笔记:现代操作系统:原理与实现(8)
linux·笔记·架构·开源
字节跳动视频云技术团队15 小时前
**云端协同构建 VR 院线,加速 LBE 产业化与规模化发展**
架构