【汇编实战开发笔记】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。
2 RISC-V知识图谱
本文先列个大纲,后续有时间再补充。
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的寄存器列表
3.2.2 RISC-V寄存器在汇编代码中使用
3.3 汇编指令
RISC-V有六种基本指令格式:
- R 类型指令,用于寄存器-寄存器操作
- I 型指令,用于短立即数和访存 load 操作
- S 型指令,用于访存 store 操作
- B 类型指令,用于条件跳转操作
- U 型指令,用于长立即数
- J 型指令,用于无条件跳转
4 更多分享
欢迎关注我的github仓库01workstation,日常分享一些开发笔记和项目实战,欢迎指正问题。
同时也非常欢迎关注我的CSDN主页和专栏:
有问题的话,可以跟我讨论,知无不答,谢谢大家。
5 参考链接
以上参考资料,由本人整理,但来源于网络,侵删!
相关文章
- Oracle基础(五)pl/sql进阶(分页过程)
- 电力-101/104规约基础1
- 与预算相差 5 万,北明数科 3740 万中标「腾讯云(甲方)武汉智慧城市基础平台(一期)项目建设及服务项目
- python基础语法个人笔记_python基础题库
- ODB学习笔记之基础环境搭建
- 4.Python3基础入门学习笔记(四)
- 《FreeSWITCH权威指南》-- 1.PSTN与VoIP基础(笔记)
- AJAX培训笔记_js基础笔记
- js 基础笔记 流程控制
- 【学习笔记】黑马程序员Node.js全套入门教程 | 基础篇
- 从零开始的异世界生信学习linux部分linux 基础---学习笔记-2
- 基础算法(快排,归并,二分,高精度,前缀和,差分)
- 针对蓝队的Linux应急响应基础总结
- Java官方笔记3Java语言基础
- 零基础一次学通4种数据库的SQL语言--脚本
- 学习小组笔记Day4-秦瑶 R语言基础
- 学习小组day5笔记-R语言基础2
- Python基础语法-基本数据类型-深浅拷贝(一)
- Kafka基础篇学习笔记整理
- Arthas的基础学习详解程序员
- JAVA高级工程师课程笔记整理——(二)JAVA基础详解编程语言
- js基础笔记详解编程语言
- Linux系统安全: 构建安全防范基础(linux系统安全优化)