Riscv CSR指令详解

一、CSR简介

在Riscv中CSR是Control and Status Register(控制和状态寄存器)的简写,注意CSR就是寄存器。而CSR指令就是操作CSR寄存器的一组指令。CSR最多有4096个。CSR独立编址。

二、CSR指令

所有的CSR指令都会对CSR进行读——改——写操作。CSR指令中共有12位(20-31位)用来指示被“读改写”的是哪一个寄存器。
CSR指令

CSRRW指令

CSRRW指令可以原子性地读写CSR(Atomic Read/Write CSR)。

Created with Raphaël 2.2.0 开始 指定的CSR的值存入目的通用寄存器 源通用寄存器的值存入目的CSR 结束

注意,若目的通用寄存器为x0,则不会执行读取操作;若源通用寄存器为x0或立即数0也不会进行写入CSR操作。
指令格式:CSRRW rd, csr, rs1

CSRRS指令

CSRRS指令可以原子性地读取并置位CSR的指定位(Atomic Read and Set Bits in CSR)。此指令会读取指定CSR的值到目的寄存器;然后将源通用寄存器作为掩码,写bit 1到CSR——也就是源通用寄存器中所有为1的位所对应的CSR中的那一位都会被写1(如果那一位可写的话),源通用寄存器中所有为0的位所对应的CSR中的位都保持原来的值
指令格式:CSRRS rd, csr, rs1

CSRRC指令

CSRRC指令可以原子性地读取并清零CSR的指定位(Atomic Read and Clear Bits in CSR)。此指令和CSRRS指令类似,需要注意的是源通用寄存器中为1的位在CSR中所对应的位会被清零
指令格式:CSRRC rd, csr, rs1

CSRRWI指令

此指令和CSRRW指令类似,只不过将32位的源寄存器替换为了5位的无符号立即数,5位的立即数在赋值到CSR之前会在立即数前补0,使其整体为32位。
指令格式:CSRRWI rd, csr, uimm

CSRRSI指令

此指令和CSRRS类似,只不过将源寄存器替换为了5位的无符号立即数,0-拓展方式和CSRRWI一样。
指令格式:CSRRWI rd, csr, uimm

CSRRCI指令

此指令和CSRRC类似,只不过将源寄存器替换为了5位的无符号立即数,0-拓展方式和CSRRWI一样。
指令格式:CSRRWI rd, csr, uimm

  • 11
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值