前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RISC-V指令集讲解(6)load/store指令

RISC-V指令集讲解(6)load/store指令

原创
作者头像
IC知识库
修改2021-07-31 19:19:29
6.7K0
修改2021-07-31 19:19:29
举报
文章被收录于专栏:IC知识库平台

1.加载-存储指令

RV32I是一个加载-存储(load-store)架构。也是只有load和store指令才能访问存储器和外设(CPU 内的寄存器只能由算术指令操作) [1]。load和store指令将寄存器和存储器/外设的值相互交换。

load指令被编码成I-type,其opcode为0000_011,store指令被编码成S-type,opcode为0100_011,如图1所示。

有效地址是由rs1寄存器中的值加上符号位扩展的12位立即数(store指令中的立即数被拆分成了两个部分)得到的。

一般来说,load指令将存储器/外设中有效地址的值复制一份到rd寄存器,store指令将rs2寄存器中的值复制到存储器/外设中的有效地址 [1]。

图1 load/store机器编码格式 [1]

2.LOAD指令

2.1.LW

LW(load word)指令格式为LW rd,offset(rs1)。x[rd] = sext ( M [x[rs1] + sext(offset) ] [31:0] )

其机器码如图2所示,其funct3为010。该指令是从有效地址中读取四个字节(一个字,word),并写入rd寄存器。

指令示例:

LW x13,4(x12)

在x12寄存器中的数加上4的偏移量对应地址中,读出四个字节,存到x13寄存器中。

opcode为000_0011

funct3为010

immediate为12’b0000_0000_0100

rs1为 5’b0_1100

rd为 5’b0_1101

所以LW x13,4(x12)对应的机器码为0000_0000_0100_01100_010_01101_0000011,对应的16进制为32’h0046_2683

图2 LW机器编码格式 [2]

 2.2.LH

LH(load halfword)指令格式为LH rd,offset(rs1)。x[rd] = sext( M [x[rs1] + sext(offset)] [15:0])

其机器码如图3所示,其funct3为001。该指令是从有效地址中读取两个字节(半个字,halfword),经符号位扩展后写入rd寄存器。

图3 LH机器编码格式 [2]

指令示例:

LH x13,0(x12)

在x12寄存器中的对应地址中,读出两个字节,经符号位扩展后,存到x13寄存器中,如下图所示。

2.3.LHU

LHU(load halfword,unsigned)指令格式为LHU rd,offset(rs1)。x[rd] = M[x[rs1] + sext(offset)][15:0]

其机器码如图4所示,其funct3为101。该指令是从有效地址中读取两个字节(半个字,halfword),经零扩展后写入rd寄存器。

指令示例:

LHU x13,0(x12)

在x12寄存器中的对应地址中,读出两个字节,经零扩展后,存到x13寄存器中。

图4 LHU机器编码格式 [2]

2.4.LB

LB(load byte)指令格式为LB rd,offset(rs1)。x[rd] = sext( M [x[rs1] + sext(offset)] [7:0])

其机器码如图5所示,其funct3为000。该指令是从有效地址中读取一个字节(byte),经符号位扩展后写入rd寄存器。

指令示例:

LB x13,0(x12)

在x12寄存器中的对应地址中,读出一个字节,经符号位扩展后,存到x13寄存器中。

图5 LB机器编码格式 [2]

2.5.LBU

LBU(load byte,unsigned)指令格式为LBU rd,offset(rs1)。x[rd] = M[x[rs1] + sext(offset)][7:0]

其机器码如图6所示,其funct3为100。该指令是从有效地址中读取一个字节(byte),经零扩展后写入rd寄存器。

指令示例:

LBU x13,0(x12)

在x12寄存器中的对应地址中,读出一个字节,经零扩展后,存到x13寄存器中。

图6 LBU机器编码格式 [2]

3.STORE指令

3.1.SW

SW(store word)指令格式为SW rs2,offset(rs1)。M[x[rs1] + sext(offset)]= x[rs2][31: 0]

3.2.SH

SH(store halfword)指令格式为SH rs2,offset(rs1)。M[x[rs1] + sext(offset)] = x[rs2][15: 0]

3.3.SB

SB(store byte)指令格式为SB rs2,offset(rs1)。M[x[rs1] + sext(offset)]= x[rs2][7: 0]

备注:完整内容请搜索引擎搜索“IC知识库”查看。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 备注:完整内容请搜索引擎搜索“IC知识库”查看。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档