RISC-V指令集

1、寄存器

RV32I有32个通用寄存器,以及一个PC寄存器。其中有一个通过硬件设置的值恒为 0 的 x0 寄存器
在这里插入图片描述
注:RISC-V的32个寄存器x0~x31是用0~31这些数字来表示。

2、基础指令

RISC-V有六种基本指令格式:
在这里插入图片描述
每个字段名称的含义:


  • opcode(操作码):指令的基本操作,这个缩写是它惯用名称。
  • rd: 目的操作寄存器,用来存放操作结果。
  • funct3: 一个另外的操作码字段。
  • rs1: 第一个源操作数寄存器。
  • rs2: 第二个源操作数寄存器。
  • funct7: 一个另外的操作码字段。
  • imm:立即数

2.1、R 型指令

字段:
funct7rs2rs1funct3rdopcode
7位5位5位3位5位7位
指令:

在这里插入图片描述

示例:
add a0, a1, a2  //a0 = a1 + a2
sub a0, a1, a2  //a0 = a1 - a2
sll a0, a1, a2  //a0 = a1 << a2(低位补0)
srl a0, a1, a2  //a0 = a1 >> a2(高位补0)
sra a0, a1, a2  //a0 = a1 >> a2 (算术右移,高位补原来的符号位)
slt a0, a1, a2  //a1 < a2 ? a0 = 1 : a0 = 0
xor a0, a1, a2  //a0 = a1 ^ a2
or a0, a1, a2   //a0 = a1 | a2
and a0, a1, a2  //a0 = a1 & a2

2.2、I 型指令

字段:
immrs1funct3rdopcode
12位5位3位5位7位
指令:

在这里插入图片描述

示例:
addi a0, a1, 0x5  //a0 = a1 + 0x5
subi a0, a1, 0x05  //a0 = a1 - 0x05
slli a0, a1, 0x05  //a0 = a1 << 0x05(低位补0)
srli a0, a1, 0x05  //a0 = a1 >> 0x05(高位补0)
srai a0, a1, 0x05  //a0 = a1 >> 0x05 (算术右移,高位补原来的符号位)
slti a0, a1, 0x05  //a1 < 0x05 ? a0 = 1 : a0 = 0
xori a0, a1, 0x05  //a0 = a1 ^ 0x05
ori a0, a1, 0x05   //a0 = a1 | 0x05
andi a0, a1, 0x05  //a0 = a1 & 0x05

取值指令—Load

字段:
immrs1funct3rdopcode
12位5位3位5位7位
指令:

在这里插入图片描述

示例:
lb x10,  0(x1)  //将x1的值加上0,将这个值作为地址, 取出这个地址所对应的内存中的值, 将这个值赋值给x10(取出的是8位数值)
lh x10,  0(x1)  //从内存中取出16位数值
lw x10, 0(x1)  //从内存中取出32位数值
lbu x10, 0(x1) //从内存中取出8位无符号数值
lhu x10, 0(x1) //从内存中取出16位无符号数值

2.3、S 型指令

字段:
imm[11:5]rs2rs1funct3imm[4:0]opcode
7位5位5位3位5位7位
指令:

在这里插入图片描述

示例:
sb  x10, 0(x1)  //x1的值加上0,将这个值作为地址, 将x10的值存储到上述地址所对应的内存中去 (只会将x10的值的低8位写入)
sh  x10, 0(x1)  //只会将x10的值的低16位写入
sw  x10, 0(x1)  //只会将x10的值的低32位写入

2.4、B 型指令

字段:
imm[12]imm[10:5]rs2rs1funct3imm[4:1]imm[11]opcode
1位6位5位5位3位4位1位7位
指令:

在这里插入图片描述

指令示例含义备注
beqbeq a1, a2, Lableif(a1 == a2){goto Label;}Lable是任意自定义的标签
bnebne a1, a2, Lableif(a1 != a2){goto Label;}
bltblt a1, a2, Lableif(a1 < a2){goto Label;}
bgtbgt a1, a2, 100if(a1 > a2){goto Label;}100与Label对应着相同的指令, 实际上在运行时Label会变成pc+xxx
bgebge a1, a2, 100if(a1 >= a2){goto Label;}
bleble a1, a2, 100if(a1 <= a2){goto Lable;}

2.5、U 型指令

字段:
imm[31:12]rdopcode
20位5位7位
指令:

在这里插入图片描述

lui  x10, 0x65432 //得到立即数的高20位,低位补0,立即数范围为:0x00~0xFFFFF

2.6、J 型指令

字段:
imm[20]imm[10:1]imm[11]imm[19:12]rdopcode
1位10位1位8位5位7位
指令:

在这里插入图片描述

示例:
jal ra, symbol    // 跳转到Symbol中去, 并把ra设置成返回地址 Symbol 可以是自定义的Label ,也可以是某个函数名
jal ra, 100       // 跳转到pc + 100 * 2的地方中去, 并把ra设置成返回地址  pc相对寻址,对应的是位置无关代码(PIC)
jalr ra, 40(x10)  //跳转到x10+40 的地方中去, 并把ra设置成返回地址x10+40必须是绝对地址,指向内存中某个确定的地方(往往是函数的开头),非PIC

3、汇编语言翻译成机器语言

示例1:


例题

对于符号表示为:

add x9, x20, x21

的RISC-V指令,首先以十进制表示,然后用二进制表示

答案

有上面的介绍可知add指令的字段如下:
在这里插入图片描述
直接用十进制表示如下:

funct7rs2rs1funct3rdopcode
021200951

一条指令的每一段称为一个宇段。

第一、第四和第六个字段(0、0 和 51)组合起来告诉RISC-V计算机该指令执行加法操作。

第二个字段给出了作为加法运算的第二个源操作数的寄存器编号(21 表示 x21),

第三个字段给出了加法运算的另一个源操作数(20代表×20)。

第五个字段存放要接收总和的奇存器编号(9代表x9)。

因此,该指令将寄存器 x20 和寄存器 x21 相加并将和存放在寄存器x9中。

用二进制表示如下:

funct7rs2rs1funct3rdopcode
00000001010110100000010010110011

总上,add x9, x20, x21 的RISC-V指令对应的机器码为: 00000001010110100000010010110011


示例2


例题

有以下几条汇编:

ld x9, 240(x10)
add x9, x21, x9
addi x9, x9, 1
sd x9, 240(x10)

将它们翻译为对应的机器码

答案

🏄 自己尝试解答一下 🏄


  • 46
    点赞
  • 346
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
### 回答1: RISC-V(Rez Instruction Set Computer – Five)是一种开源的指令集架构(ISA),由加州大学伯克利分校的研究团队开发。RISC-V的设计理念是简化指令集和硬件结构,以提高处理器性能和效能。 RISC-V采用了精简的指令集,包括基本的数据传输、算术、逻辑和分支指令,这些指令可以完成基本的计算任务。相比较传统的复杂指令集计算机(CISC),RISC-V有更少的指令类型,并且指令长度固定,这有助于简化处理器设计和优化执行效率。 RISC-V指令集的特点之一是可扩展性。通过引入标准的扩展指令集,开发者可以根据应用的需求扩展RISC-V指令集来支持不同的功能,如浮点运算、向量运算等。这种灵活性使得RISC-V适用于各种不同的应用领域,从嵌入式系统到高性能计算,都可以使用RISC-V进行开发。 另一个重要的特点是RISC-V是一个开源的指令集架构。这意味着任何人都可以免费获取RISC-V的技术文档和相关工具,并将其用于自己的项目中。这种开放性推动了RISC-V的广泛应用和发展,并吸引了全球范围内的学术界、工业界和研究机构的关注和参与。 总的来说,RISC-V指令集是一种简化、灵活和开源的指令集架构,具有高性能和高效能的特点。它的简洁设计和扩展性使得它适用于各种应用领域,并受到全球范围内广泛的关注和采用。 ### 回答2: RISC-V是一种开放、免费的指令集架构,它是由加州大学伯克利分校开发的。RISC-V指令集被设计为简洁、精简和灵活,旨在满足各种应用领域的需求。 RISC-V是一个以精简指令集(Reduced Instruction Set Computing)为基础的架构,它的设计原则是简化指令集并提高性能。它的指令集被划分为几个基本类别,包括整数运算、浮点运算、向量操作和特权指令等。 RISC-V架构的一大特点是可扩展性。它支持不同的扩展,并允许用户根据自己的需求添加自定义的指令集扩展,从而提高系统的效率和灵活性。这种可扩展性使得RISC-V架构适用于不同的应用领域,包括嵌入式系统、移动设备和高性能计算等。 另外,RISC-V指令集还支持虚拟化和多核处理。虚拟化技术使得多个虚拟机能够在同一硬件平台上同时运行,提高了系统资源的利用率。多核处理技术则能够实现并行计算,加快处理速度。 总之,RISC-V指令集是一种开放、免费、精简、灵活和可扩展的架构,适用于各种应用领域。它的设计原则是以性能为导向,提供高效的计算能力,并支持虚拟化和多核处理技术。随着RISC-V的不断发展,相信它将会在未来成为更多系统和设备的首选指令集。 ### 回答3: RISC-V指令集是一种开放的指令集架构,它的设计目标是简化指令集,提高性能,并且便于扩展。RISC是“精简指令集计算机”的缩写,它强调指令集的精简和效率。而V代表RISC-V是一个可扩展的指令集,可以根据需求进行定制和扩展。 RISC-V指令集以其开放性和可移植性而受到广泛关注。相比于其他商业化指令集架构,RISC-V的设计是开放源代码的,这意味着任何人都可以自由使用、修改和定制RISC-V架构的指令集并开发相关的硬件和软件。 RISC-V指令集的设计也注重了性能和效率。它采用了简化、统一的指令格式和指令集拓展的方式,使得处理器可以更高效地执行指令。在指令集拓展方面,RISC-V提供了可选的标准拓展,如整数拓展、浮点数拓展和向量拓展,以满足各种应用领域的需求。 通过RISC-V的可扩展性,用户可以根据自己的需求定制指令集。这意味着用户可以根据具体应用的特点和需求,选择适当的指令集拓展,并进行针对性的优化。这种定制化的设计使得RISC-V可以应用于各种领域,如嵌入式系统、服务器和超级计算机等。 总结来说,RISC-V指令集是一种开放、简化、高效和可扩展的指令集架构。它的开放性使得任何人都可以自由使用和定制,而其简化和高效的设计则使得处理器可以高效地执行指令。通过可选的指令集拓展,用户可以根据不同应用领域的需求进行定制,使得RISC-V可以广泛应用于各种领域。

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点灯大师~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值