1. 寄存器

32个x寄存器,RV32下x reg是32位宽

x0:硬连线 常数0 专门的零寄存器

x1-x31:31个通用reg

返回地址:没有强制要求那一个x作为lr,但是一般用x1

pc:额外的用户可见寄存器

2. 基本指令格式

四种基础指令格式 R/I/S/U

imm:立即数

rs1:源寄存器1

rs2:源寄存器2

rd:目标寄存器

opcode:操作码

example: C.LI 指令被扩展为 addi rd, x0, imm[5:0]。

3 整形运算

使用R或者I类指令

R类:寄存器-立即数

I类:寄存器-寄存器

整数计算不会造成运算异常

寄存器-立即数:

ADDI:将12位有符号立即数和rs相加,溢出忽略,直接使用结果的最低32bit,并存入rd

伪指令MV:"MV rd,rs"实际上是"ADDI rd, rs, 0"

SLTI:如果rs小于立即数(都是有符号整数),将rd置1,否则置0

SLTIU:和SLTI一致,不过都是无符号数

伪指令SEQZ:"SEQZ rd, rs" 实际上是 "SLTIU rd, rs1, 1"

ANDI/ORI/XORI:rs与有符号12位立即数进行and,or,xor操作

伪指令NOT:"NOT rd, rs"实际上是"XORI rd, rs1, -1"

shift是I类指令格式

SLLI:逻辑左移,低位移入0

SRLI:逻辑右移,高位移入0

SRAI:算数右移,符号移入高位

u类指令格式

LUI:创建32位无符号整数,存放立即数到rd的高20位,低12位置0

AUIPC:创建pc的相对地址,pc+无符号立即数(偏移量)=>rd

寄存器-寄存器:

ADD/SUB:rs1(+/-)rs2 => rd

SLT/SLTU: 如果rs1<rs2,rd写1; 否则rd为0

AND/OR/XOR: rs1与rs2进行and,or,xor操作

SLL/SRL/SRA: 和"寄存器-立即数"指令一致,将r2的低5位作为立即数即可

NOP指令:

实际上是ADDI x0,x0,0

4. 控制传输指令

1)非条件跳转:

JAL:J类指令,立即数+pc为跳转目标,rd存放pc+4(返回地址)

跳转范围为pc(+/-)1MB

JALR:I类指令,rs+立即数为跳转目标,rd存放pc+4(返回地址)

实现远跳转

2)条件跳转

所有分支指令使用B类指令格式,12位立即数+pc作为目标

跳转范围为pc(+/-)4KB

BEQ/BNE:rs1(==/!=)rs2, 分别在相等或者不等时,发生跳转

BLT:rs1 < rs2, 跳转

BGE:rs1 >= rs2, 跳转

5 加载存储指令

RV32I是一个加载/存储架构,只有load/store能访问内存,运算指令只操作寄存器

load是I类指令,store是S类指令

LOAD:rs作为基地址,加上有符号的偏移,读取到rd寄存器

STORE:rs1作为基地址加上有符号的偏移,作为内存地址,写入内容为rs2

6. 控制状态寄存器指令

寄存器-寄存器:读/写/修改 CSR

CSRRW:Atomic Read/Write CSR

读取CSR的值存入rd寄存器,并将rs存入CSR

另外:如果rd为x0,将不会执行

CSRRS:Atomic Read and Set Bits in CSR

读取CSR的值存入rd寄存器,并根据rs中高位对CSR置1

另外:如果rs为x0,将不会执行

CSRRC:Atomic Read and Clear Bits in CSR

读取CSR的值存入rd寄存器,并根据rs中高位对CSR置0

另外:如果rs为x0,将不会执行

立即数-寄存器:读/写/修改 CSR

CSRRWI/CSRRSI/CSRRCI

将CSRRW类寄存器中的rs换成立即数

另外:如果立即数为0,将不会执行

用户级系统指令:时钟和计数器

RV32I提供三个64位只读用户级寄存器:RDCYCLE[H]/RDTIME[H]/RDINSTRET[H]

使用CSRRS读取这三个寄存器的高32 bit

RDCYCLE:时钟周期计数

RDTIME:时间 tick数

RDINSTRET:指令数

参考文档: https://blog.csdn.net/zhangshuaiisme/article/details/80718496

RISC-V指令集介绍 - 整数基本指令集的更多相关文章

  1. 常见的CPU指令集介绍

    本文摘自网络   一.X86 是微处理器执行的计算机语言指令集,指一个intel通用计算机系列的标准编号缩写,也标识一套通用的计算机指令集合,属于CISC. 1.1.简介 X86指令集是美国Intel ...

  2. JVM指令集介绍

    转载自:http://glutinit.iteye.com/blog/1263446 延伸参考 JVM接收参数和方法调用 void spin() {    int   i;    for (i = 0 ...

  3. RV32I基础整数指令集

    RV32I是32位基础整数指令集,它支持32位寻址空间,支持字节地址访问,仅支持小端格式(little-endian,高地址高位,低地址地位),寄存器也是32位整数寄存器.RV32I指令集的目的是尽量 ...

  4. RISC指令集的五个周期

    RISC指令集的五个周期 RISC(reduced instruction set computer,精简指令集计算机)简称为精简指令集.RISC把执行指令的精力主要放在了经常使用的指令上面.本文主要 ...

  5. 自己动手写处理器之第一阶段(3)——MIPS32指令集架构简单介绍

    将陆续上传本人写的新书<自己动手写处理器>(尚未出版).今天是第四篇.我尽量每周四篇 1.4 MIPS32指令集架构简单介绍 本书设计的处理器遵循MIPS32 Release 1架构,所以 ...

  6. 常用 ARM 指令集及汇编

    ARM7TDMI(-S)指令集及汇编 ARM 处理器是基于精简指令集计算机(RISC)原理设计的,指令集和相关译码机制 较为简单,ARM7TDMI(-S)具有 32 位 ARM 指令集和 16 位 T ...

  7. 计算机系统6-> 计组与体系结构3 | MIPS指令集(中)| MIPS汇编指令与机器表示

    上一篇计算机系统5-> 计组与体系结构2 | MIPS指令集(上)| 指令系统从顶层讲解了一个指令集 / 指令系统应当具备哪些特征和工作原理.这一篇就聚焦MIPS指令集(MIPS32),看看其汇 ...

  8. X86架构CPU常识(主频,外频,FSB,cpu位和字长,倍频系数,缓存,CPU扩展指令集,CPU内核和I/O工作电压,制造工艺,指令集,超流水线与超标量)

    1.主频 主频也叫时钟频率,单位是MHz,用来表示CPU的运算速度. CPU的主频=外频×倍频系数.很多人认为主频就决定着CPU的运行速度,这不仅是个片面的,而且对于服务器来讲,这个认识也出现了偏差. ...

  9. 计算机系统5-> 计组与体系结构2 | MIPS指令集(上)| 指令系统

    系列的上一篇计算机系统4-> 计组与体系结构1 | 基础概念与系统评估,学习了一些计算机的基础概念,将一些基本的计算机组成部分的功能和相互联系了解了一下,其中很重要的一个抽象思想就是软硬件的接口 ...

随机推荐

  1. 解决Kettle与Kerberos集成问题

    本文目的:记录Kerberos环境下,通过Kettle将MySQL数据清洗到HDFS过程解决的2个问题,希望对大家有所帮助. Kettle版本:pdi-ce-7.1.0.0-12 1.在Kerbero ...

  2. 数据流图——从软考真题中学画数据流图DFD

    文章目录 题目 画顶层图 画0层图 解题技巧 题目 建议将题目复制到word后与此文分屏查看.后面需要多次查看题目. 某高校欲开发一个成绩管理系统,记录并管理所有选修课程的学生的平时成绩和考试成绩, ...

  3. SGD训练时收敛速度的变化研究。

    一个典型的SGD过程中,一个epoch内的一批样本的平均梯度与梯度方差,在下图中得到了展示. 无论什么样的网络结构,无论是哪一层网络的梯度,大体上都遵循下面这样的规律: 高信号/噪音比一段时间之后,信 ...

  4. RQNOJ PID51 / 乒乓球 ☆

    因为是多行输入,所以用了getchar()进行输入,题目没有说明数据范围,所以开始的时候因为数组开的不够大,WA90了一次,我之前开了10000的长度,之后开100000的长度跑过了 一个基本的模拟, ...

  5. [C#.net]SqlDataAdapter 执行超时已过期 完成操作之前已超时或服务器未响应

    随着数据库数据的不断增大,查询时间也随之增长.而客户端与数据库连接时间以及命令的执行时间都是有限的.默认为30s.所以在查询数据的时候,程序会出现 “超时时间已到.在操作完成之前超时时间已过或服务器未 ...

  6. python 环境变量设置PYTHONPATH

    PYTHONPATH是Python搜索路径,默认我们import的模块都会从PYTHONPATH里面寻找. 打印PYTHONPATH: import os print sys.path >['' ...

  7. python基础--------字符串的调用详解(2)

    Python 字符串的的调用方法~~~@@@ 17.  strip  : 去除字符串左右两边指定的字符 18.   rstrip : 去除字符串右边指定的字符 19 .   lstrip  :  去除 ...

  8. Js高级程序设计~读书笔记

    1.函数-函数声明和函数表达式 解析器在向执行环境加载数据时,函数声明和函数表达式的对待不同. 解析器会率先执行函数声明,将会在任何使用到它的地方前加载, 而对于函数表达式,只会在执行到的时候去加载: ...

  9. es6面向对象

    <script> class user{ constructor(name,age){ this.name=name; this.age=age; } showName(){ alert( ...

  10. bootstrap-table使用详解

    尴尬,标记果然到了一周之后.... 首先引入文件不必提,引入bootstrap和bootstrap-table <link rel="stylesheet" href=&qu ...