【汇编实战开发笔记】RISC-V汇编基础的三大块知识


1 前言

玩嵌入式的,或多或少都接触ARM。

但是近些年随着科技的发展,CPU的架构家族中,新增了一个叫RISC-V的家伙。

RISC-V(读作“RISC-FIVE”)是基于精简指令集计算(RISC)原理建立的开放指令集架构(ISA),V表示为第五代RISC(精简指令集计算机),表示此前已经四代RISC处理器原型芯片。每一代RISC处理器都是在同一人带领下完成,那就是加州大学伯克利分校的David A. Patterson教授。与大多数ISA相反,RISC-V ISA可以免费地用于所有希望的设备中,允许任何人设计、制造和销售RISC-V芯片和软件。它虽然不是第一个开源的的指令集(ISA),但它很重要,因为它第一个被设计成可以根据具体场景可以选择适合的指令集的指令集架构。基于RISC-V指令集架构可以设计服务器CPU,家用电器cpu,工控cpu和用在比指头小的传感器中的cpu。

更多详细介绍,请参考百度百科RISC-V简介.

2 RISC-V知识图谱

本文先列个大纲,后续有时间再补充。

image-20220130231809831

3 RISC-V汇编基础三大块

这里整理了RISC-V汇编中非常基础的三大块知识,了解了这三大块内容基本可以看懂甚至编译一些简单的汇编程序。

3.1 寻址方式

RISC-V分支指令寻址,在之前的B类型指令就是其中之一。
这种格式可以表示从-4096到4094的分支地址,以2的倍数表示。B型格式包括一个7位操作码、一个3位功能码、两个5位的寄存器操作数( rs1和 rs2)和一个12位地址立即数。该地址使用特殊的编码方式,简化了数据通路设计,但使组装变得复杂。下面这条指令

bne x10,x11,2000    // if x10 != xll,go to location 2000  = 0111 1101 0000

在这里插入图片描述

其中条件分支的操作码是11001112,而bne 的funct3码是0012
RISC-V的无条件跳转–链接指令(jal),是分支寻址的另一种方法,也是唯一使用J型格式的指令。该指令由一个7位操作码、一个5位目标寄存器操作数(rd)和一个20位地址立即数组成。链接地址,即jal之后的指令的地址,被写入rd 中。

如果程序的地址必须适合这个20位字段,则意味着没有程序可能大于220,所以另一种方法是指定一个与分支地址偏移量相加的寄存器,这样就允许程序大到264,并且仍然能够使用条件分支指令,以便分支指令可以按如下来计算:

程序计数器=寄存器内容+分支地址偏移量
这样就允许程序大到2^64,并且仍然能够使用条件分支指令

立即数寻址,操作数是指令本身的常量。
寄存器寻址,操作数在寄存器中。
基址或偏移寻址,操作数于内存中,其地址是寄存器和指令中的常量之和。
PC相对寻址,分支地址是PC和指令中常量之和。
注: 加载和存储对字节、半字、字或双字的访问有不同的版本

3.2 寄存器的用途

3.2.1 RISC-V的寄存器列表

image-20220130232441214

3.2.2 RISC-V寄存器在汇编代码中使用

image-20220130232601148

3.3 汇编指令

RISC-V有六种基本指令格式:

  • R 类型指令,用于寄存器-寄存器操作
  • I 型指令,用于短立即数和访存 load 操作
  • S 型指令,用于访存 store 操作
  • B 类型指令,用于条件跳转操作
  • U 型指令,用于长立即数
  • J 型指令,用于无条件跳转

3.3.1 其他

本人有RISC-V相关的学习资料若干份,这些都是非常经典使用的学习材料,感兴趣的可以扫码VX联系我。

image-20220130231933480

image-20220130230352493

4 更多分享

欢迎关注我的github仓库01workstation,日常分享一些开发笔记和项目实战,欢迎指正问题。

同时也非常欢迎关注我的CSDN主页和专栏:

【CSDN主页:架构师李肯】

【RT-Thread主页:架构师李肯】

【C/C++语言编程专栏】

【GCC专栏】

【信息安全专栏】

【RT-Thread开发笔记】

【freeRTOS开发笔记】

【BLE蓝牙开发笔记】

【ARM开发笔记】

【RISC-V开发笔记】

有问题的话,可以跟我讨论,知无不答,谢谢大家。

5 参考链接

以上参考资料,由本人整理,但来源于网络,侵删!

  • 1
    点赞
  • 6
    收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:博客之星2021 设计师:Hiro_C 返回首页
评论 1

打赏作者

架构师李肯

您的鼓励是我前进的最大动力!

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值