csrsi

RISC-V csrsi 伪指令详解

汇编器伪指令

立即数设置 CSR 位伪指令,展开为 csrrsi x0, csr, uimm。它按 5 位立即数中为 1 的位设置 CSR,并不返回旧值。

你写下的是
csrsi csr, uimm
常见真实展开
csrrsi x0, csr, uimm

这条伪指令到底在帮你省什么

CSRRS/CSRRC/CSRRW 同时具备读写能力;该伪指令固定 rd 或 rs 为 x0,让“只读、只写、只置位、只清位”的意图更清晰。

csrsi 的核心作用是“用立即数设置 CSR 位”。它是汇编器层面的简写;调试、审计或阅读机器码时,应回到页面列出的真实展开指令和相关重定位语义来判断行为。

官方语义核对重点

官方汇编手册把 csrsi 作为汇编器层面的伪指令/别名处理,硬件执行的是展开后的真实指令序列。
真实语义以 CSRRSI 等展开指令的 ISA 定义为准;本页不把 csrsi 当作独立硬件 opcode。
CSR 读写、置位、清位和立即数字段行为以 Zicsr 的 CSRRW/CSRRS/CSRRC 及立即数变体语义为准。

展开过程怎么理解

步骤 1
CSRRSI 用 5 位立即数置位 csr 中对应位,rd=x0 不返回旧值。

在 objdump / 反汇编里可能看到什么

反汇编可能显示 CSR 伪指令,也可能显示对应的 CSRRS/CSRRC/CSRRW 真实指令。

官方依据与阅读顺序

本页把伪指令当作汇编器层面的别名或宏来解释:先看它会展开成哪些真实指令,再回到官方 ISA 手册理解真实指令的行为。涉及 ABI、重定位或链接器松弛时,以 psABI 文档为准。

什么时候优先想到它

读取或修改状态寄存器
写特权级相关的低层代码
让 CSR 操作意图比底层读改写指令更明确

容易混淆 / 常见误区

CSR 是否存在、可读写以及所需特权级由 Privileged ISA 或相关扩展定义,伪指令本身不绕过权限检查
带 i 的形式只有 5 位无符号立即数字段,不适合写入任意 XLEN 常量
写 CSR 可能有副作用;不要把它当作普通内存变量赋值

常见问题

csrsi 是真实 RISC-V 指令吗?

csrsi 是汇编器伪指令或别名,不是单独硬件 opcode。页面中的“常见真实展开”列出官方展开,真实行为由展开后的 ISA 指令决定。

使用 csrsi 时最容易误解什么?

CSR 是否存在、可读写以及所需特权级由 Privileged ISA 或相关扩展定义,伪指令本身不绕过权限检查