0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RISC-V特权架构和通用寄存器

麦辣鸡腿堡 来源:嵌入式Linux充电站 作者:Vincent 2023-10-08 14:48 次阅读

RISC-V特权架构

ARM有7种工作模式,而RISC-V也有不同的模式,这些模式在RISC-V中也被称为特权架构。

RISC-V总共有四种模式,分别是U、S、H和M模式:
图片

U模式被编码为00,S模式编码为01,H模式编码为10,M模式编码为11。Level越高,等级越高。等级越高,拥有的访问权限也更高。按照特权等级,由高到低依次为M、H、S、U。

上图中编码为10的模式是保留的,这个模式实际上就是H模式,H模式是用作虚拟化,但是目前RISC-V对虚拟化还不太完善,基本不支持。因此上图并没有将H模式标出来,而是作为保留。也正是因此,有人经常将RISC-V的模式说成三种U、S和M。

  • U模式:User,用户模式
  • S模式:Supervisor,监管者模式
  • M模式:Machine,机器模式

以RISC-V Linux为例,Linux应用程序处于U模式,Linux内核/uboot处于S模式,M模式则是OpenSBI。M模式拥有最高访问权限,Linux内核如果要访问CSR寄存器,则必须由S模式切换到M模式,由OpenSBI读取CSR寄存器,然后将数据返回给内核。

M模式是必须要选择的,RISC-V的裸机代码都运行在M模式下。

RISC-V通用寄存器

寄存器ABI名称说明
x0zero0值寄存器,硬编码为0,写入数据忽略,读取数据为0
x1ra用于返回地址(return address)
x2sp用于栈指针(stack pointer)
x3gp用于通用指针(global pointer)
x4tp用于线程指针
x5t0用于存放临时数据或者备用链接寄存器
x6~x7t1~t2用于存放临时数据寄存器
x8s0/fp需要保存的寄存器或者帧指针寄存器
x9s1需要保存寄存器
x10~x11a0~a1函数参数或者返回值寄存器
x12~x17a2-a7函数传递参数寄存器
x18~x27s2-s11需要保存的寄存器
x28~x31t3~t6用于存放临时数据寄存器

RISC-V有x0 x31共32个通用寄存器,每个通用寄存器都有各自的用途,例如x2是作为sp栈指针、a0~a1用来保存函数参数或返回值。x0寄存器被硬编码为了0,就是个0值寄存器。

ABI名称相当于这些通用寄存器的别名,在RISC-V汇编当中,都使用ABI名称来代表这些寄存器。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5028

    浏览量

    117723
  • 内核
    +关注

    关注

    3

    文章

    1309

    浏览量

    39846
  • Linux
    +关注

    关注

    87

    文章

    10991

    浏览量

    206736
  • RISC
    +关注

    关注

    6

    文章

    431

    浏览量

    83241
  • 架构
    +关注

    关注

    1

    文章

    484

    浏览量

    25200
收藏 人收藏

    评论

    相关推荐

    正式的RISC-V基础指令集架构特权架构规范来了,RISC-V基金会已正式批准

    根据RISC-V基金会官网发布的公告,RISC-V 基金会宣布了批准RISC-V 基础指令集架构特权
    的头像 发表于 07-11 10:46 9513次阅读

    RISC-V开放架构设计之道|阅读体验】 RISC-V设计必备之案头小册

    。在书中,特别提到了汇编对于RISC-V中的作用,包括当讲寄存器硬连线为0时,可以使用伪指令来简化常规操作,如跳转、返回和等于零时分支等。 浮点运算和压缩指令数据集的知识则是放在下一次的帖子中说。
    发表于 01-22 16:24

    RISC-V 基础学习:RISC-V 基础介绍

    ,精简指令架构的CPU,都会提供大量的寄存器RISC-V 的规范定义了32个通用寄存器以及一个PC
    发表于 03-12 10:25

    RISC-V工作模式及寄存器基本知识

    到M模式,由OpenSBI读取CSR寄存器,然后将数据返回给内核。 M模式是必须要选择的,RISC-V的裸机代码都运行在M模式下。 RISC-V通用
    发表于 04-12 14:06

    RISC-V 生态架构浅析

    优势和总结了多年来处理发展的教训,RISC-V的指令集编码非常的规整,指令所需的通用寄存器的索引(Index)都被放在固定的位置,如图2所示。因此指令译码
    发表于 06-22 16:51

    简单就是美——RISC-V架构的设计哲学

    寄存器RISC-V架构支持32位或者64位的架构,32位架构由RV32表示,其每个通用
    发表于 07-27 17:47

    科普RISC-V生态架构(认识RISC-V)

    优势和总结了多年来处理发展的教训,RISC-V的指令集编码非常的规整,指令所需的通用寄存器的索引(Index)都被放在固定的位置,如图2所示。因此指令译码
    发表于 08-02 11:50

    ARM与RISC-V架构的区别是什么?

    逻辑、算术等运算,CPU只处理寄存器中的数据。同时由于这个原因,包括ARM在内的很多RISC架构处理都有很多寄存器来存放指令及数据。为了方
    发表于 04-25 09:13

    玄铁VirtualZone:基于RISC-V架构的安全扩展

    (PMP)RISC-V架构提供了一种PMP物理内存保护机制,用于隔离M模式与S/U模式下的内存访问。只有M模式才有权限配置PMP。PMP包含几组(通常是8到16个)地址寄存器以及相应的配置寄存
    发表于 09-01 14:38

    优化的关键,RISC-V中的性能监控

    看到,PMU扩展已经成了该规范的一部分。接着是sscofpmf扩展,ss代表的是特权架构和管理员级的扩展,cofpmf代表的是溢出计数和特权模式筛选。该扩展新增了一个32位的scountovf只读
    发表于 12-27 08:00

    适合新手的RISC-V入门基础知识

    适用于不同的应用场景,可以降低 CPU 实现成本。 9.4 RISC-V 寄存器 指令的操作数来源于寄存器,精简指令架构的CPU,都会提供大量的
    发表于 02-23 20:25

    我了解的RISC-V

    ,但并没有对特定的微架构做过度的设计。 截至2017年5月,RISC-V已经确立了版本2.22的用户空间的指令集(userspace ISA),而特权指令集(privileged ISA)也处在草案
    发表于 03-19 10:52

    【转载】第1章 初识RISC-V

    位。如果支持浮点指令,则需额外支持32个浮点(Float Point)寄存器不同于ARM,RISC-V中PC指针不占用通过寄存器,而是独立的,程序执行中自动变化,无法通过通用
    发表于 03-28 16:57

    RISC-V架构

    的设计考虑了小型、快速、低功耗的现实情况来实做,但并没有对特定的微架构做过度的设计。  截至2017年5月,RISC-V已经确立了版本2.22的用户空间的指令集(userspace ISA),而特权指令集
    发表于 04-03 15:29

    RISC-V 发展

    通用寄存器,每个通用寄存器都有各自的用途。例如x2是作为sp栈指针、a0-a1用来保存函数参数或返回值。x0寄存器被硬编码为了0,就是个0值
    发表于 04-14 10:18