[小知识]总结CSRs寄存器的读写指令

在之前的文章中介绍scr1时,对CPU IPIC register操作指令是有限制的,只能用csrrw/csrrwi。那这堆指令到底什么区别呢

SCR1(RISC-V)介绍_kuankuan02的博客-CSDN博客

针对CSRs操作指令,我们来重新梳理一下。

首先明确,真正的机器码只有6条指令:

csrrw (CSR read and write) ,这是读写操作,csr中的值写入rd,rs1的值写入csr。

csrrwi是csrrw的立即数扩展,rs1寄存器保存值变为一个立即数,对csr的操作是一致的。

csrrs(CSR read and set), 这是读并置位操作,csr中的值写入rd, rs1的值或上(or)csr中的值再写入csr。

csrrsi是csrrs的立即数扩展,rs1寄存器保存值变为一个立即数,对csr的操作是一致的。

csrrc(CSR read and clear),这是读并清除操作,csr中的值读入rd,根据rs1的值对csr中的值按位清0 再写入csr中。

csrrci是csrrc的立即数扩展,rs1寄存器保存值变为一个立即数,对csr的操作是一致的。

各种资料中其他的csr指令均是伪指令,我们举例gnu中的伪指令:

csrr rd,csr 读一个csr中的值到rd中,相当于

csrrs rd,csr,zero

csrw csr ,rs1 写rs1寄存器的值到csr中,相当于

csrrw zero,csr,rs1

csrc csr, rs1 根据rs1中的值按位对csr的值清0,相当于

csrrc zero,csr,rs1

csrs csr, rs1 根据rs1的值按位对csr的值置1,相当于

csrrs zero,csr,rs1

以 i 结尾的伪指令,都是立即数指令,用立即数替换了rs1,操作是一致的。

总结起来很简单:

1,想对csr连读带写,可选用基础的6条csr指令直接搞定;

2,仅仅是读的话,哪条基础指令都可以,一般会用伪指令;

3,以 i 结尾的,不管是基础指令还是伪指令,都是立即数作为参数的,在指令中操作这个立即数替换了 rs1

4,csr基础的操作,就简单的3种区别,w (直接写 ), s(设置) , c(清除),不计i的4字母指令都是伪指令;

5,http://crva.ict.ac.cn/documents/RISC-V-Reader-Chinese-v2p1.pdf  ,上csr指令有些名字错误,主要看内容描述

6,伪指令仅仅是方便程序员读写代码,最终编译器还是都给转成了基础指令。

  • 12
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值