RISC-V指令集

RSIC-V指令集格式

由于在早期电脑虽然算力很强(针对于当时的其他算力工具),但是由于指令不同,所需要的电路结构不同,所以在使用时,都需要重新铺线,但是计算机的体积有特别大,所以又将算力提升节约下来的时间给浪费掉。有人提出不仅将数据存储在存储器中,同时也把指令也保存在存储器里。在RISC-V里面一条指令是32 位,但是每条指令里面既有操作也有寄存器的名字,这些东西又是如何保存的,这就涉及到指令集的格式。

在risc_v里有六种指令集,分别是寄存器和寄存器的R型指令,寄存器和立即数的I型指令,用于储存的S型指令,用于分支转移的B型指令,以及高20比特位的立即数的U型指令,用于跳转的J型指令。

R型指令 

funct7,funct3是功能码

rs2和rs1是原寄存器里面是寄存器的编号,rd是目的寄存器。opcode是操作码,0110011是所有R型指令的操作码,功能码和操作码组合使用,操作码的下面用功能来细化功能。

功能码细化。 

I型指令

由于立即数的数值范围超过0~31并且和R型相同的是有一个原寄存器和一个目的寄存器。所以在R型的基础上进行改变。

 

I型装载指令

转载的操作码是0000011,源寄存器里面是原地址寄存器的编号,目的寄存器里是目的寄存器的编号,前面是偏移量。

 

LH,装载半字的指令。从存储器读取的数据经符号扩展为32为存到目的寄存器里。

lbu,里的u是无符号数,装载无符号数。lhu是从寄存器读取16位经过0扩展为32位存到目的寄存器中。

S型

把数据从寄存器保存到存储器里,所以要有一个寄存器,一个保存存储器地址的部分为了和R型指令一样,将高7位和原寄存器的位置用来保存偏移量。

 B型

由于代码有限,所以在以pc寄存器的附近会找到分支的地址,由于用字节来偏移浪费资源,所以使用字,但是在RISC-V中,存在这16位的可变寻址,所以用2字节来表示,用I型的立即数来表示偏移量,所以有2^12个以2为增量的偏移量。相当于13位

 偏移量的计算,看第一条指令与分支之间的指令数,一个是32位,本题是4条(没写出来,是4条)4*32=8*2=16比特,16是13位的表述,13位里最后一位永远是0,故舍去。

U型指令

使用LUI可以写入高20位的数据,同时将低12位清零。使用ADDI指令可以写入低12位的数据。

J型指令 

jal将PC值加4,然后保存在rd,保存的是返回地址

j指令是jal的伪指令,比如

j指令目的寄存器时x0,从而忽略对返回地址的保存。

这才是正确用法,把PC+4保存在ra,跳转到funcname.

jalr指令是i型指令。将PC+4保存在目的寄存器,将源寄存器加偏移量实现跳转。这个偏移量不是32字节单位。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值