RISC-V汇编学习笔记(二):RISC-V汇编语言访存指令

废话:

大三老菜狗来更新啦,哎,感叹一下生活不易,天天犯困。

注释:

RISC-V汇编学习笔记系列是RISC-V学习笔记系列下的一个分支,在这里着重讲解的是RISC-V的汇编指令是如何实现的。对读懂RISC-V有一定的帮助,但因为不是主线剧情所以会更加随意一点。

 字节:

1.位(Bit):计算机系统中不同格式的数据有的会低于32位,但很有低于8位的,我们以8位作为单位数据,以8位的倍数来存储数据。[上一章我们就说到我们使用的开源项目是RV32的(及32位的)]

2.字节(Byte):8位的数据量为一个字节,一个32位的字就是由4字节组成的。

3.在RISC-V的存储系统中,以字节为单位来寻址。每一个字地址可拆分到4个字节地址,在小端系统中某个字的地址与它的最低位字节地址是相同的。

存储器的大端和小端:

区分:

1.大端与小端是字节在存储器中存储顺序的两种方式

2.大端是将一个字数据的最位字节存储在最字节地址上(中国采用大端)

3.小端是将一个字数据的最位字节存储在最字节地址上

BYTE3                BYTE2                BYTE1                BYTE0

 00000000           00000000            00000100            00000001

                                                                 大端   |   小端

ADDR3        ADDR2        ADDR1        ADDR0  |   ADDR3        ADDR2        ADDR1        ADDR0  

BYTE0        BYTE1         BYTE2         BYTE3       BYTE3        BYTE2         BYTE1         BYTE0

 寄存器与存储器的差异:

1.32个32位的寄存器组只有128个字节的容量

2.DRAM存储器的容量很多都是GB的(现在应该没有MB的了吧,我们通常称为内存)

3.寄存器的访问速度是DRAM的数百倍

从存储器读取数据到寄存器中:

RISC-V使用lw指令(Load Word)将数据存储器装载到寄存器中

in C                               in RISC-V

int    A[100];   <——>  lw         x10, 12(x15)        # Reg x10 get A[3],x10 = A[3]

g = h + A[3];                add       x11, x12, x10      # g = h + A[3]

注释:x15 - 基址寄存器(指向A[0]);12 - 12bytes也就是3字节偏移量,一个字节偏移量为4bytes

将寄存器的内容存到存储器中:

RISC-V使用sw指令(Store Word)将寄存器的内容存到存储器中

in C                                    in RISC-V

int           A[100];  <——>  lw         x10, 12(x15)       # Reg x10 get A[3],x10 = A[3]

A[10] = h + A[3];               add       x10, x12, x10     # Reg x10 get h + A[3],x10 = h + A[3]

                                           sw        x10, 40(x15)       # A[10] = h + A[3]         

注释:x15 - 基址寄存器(存放A[0]);12,40 - 提供的bytes数;字节数据的地址值需要是4的倍数

RISC-V的读字节数据和写字节数据:

RISC-V提供字节数据的访存指令

传输指令lb(load byte)和sb(store byte),他们的指令格式与lw和sw一样,但只针对1字节的源数据进行操作。

1.sb:将寄存器中最低字节位的1字节数据保存到对应字节地址中。

2.lb:将字节地址中的1字节数据符号扩展后装载到对应的寄存器中。

lb    x10, 3(x11)          # 将寄存器x11的内容+3得到一个地址,读取该地址中得内容,存到x10寄存                                        器当中

3.lbu:对比lb是采用全零地址进行扩展

4.RISC-V不存在无符号保存指令sbu保存字节时只会覆盖对应存储地址得字节数据不会进行位扩展(这玩意是有点抽象的)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值