CSR 指令里的 atomic 是内存原子吗?
不是。Zicsr 里的 atomic 指 CSR 读和写在同一条 CSR 指令中完成,不是对内存地址执行 AMO。
原子地读取 CSR 旧值到 rd,并把 rs1 的值写入同一 CSR;rd=x0 时抑制 CSR 读取
CSRRW 是 Zicsr 的 CSR 原子读/写指令:在一条指令内把目标 CSR 的旧值零扩展到 XLEN 后写入 rd,并把 rs1 的值写入该 CSR。若 rd=x0,指令不读取 CSR,也不产生 CSR 读副作用,但写操作仍按 rs1 执行。CSR 地址字段为 12 位;对不存在、权限不足或只读 CSR 的非法写入会产生 illegal-instruction 异常。
展示 Zicsr CSR 读-改-写的 ISA 可见流程:解析 SYSTEM 编码、读取 CSR、按写/置位/清位语义计算,再更新 rd 与 CSR。
CSR 名称/地址属于指令语法;旧 CSR 值和 rs1 示例值属于执行上下文。动画不赋予示例 CSR 任何具体平台字段含义。
CSRRW 是 Zicsr 定义的 I-type SYSTEM 指令,CSR 地址位于 bits 31..20。
位级视图显示当前 XLEN 的 CSR 值计算。
该动画只展示 Zicsr 定义的 ISA 可见 CSR 读写、副作用抑制和位掩码语义;不模拟具体 CSR 字段含义、异常处理器、流水线或时序。
CSRRW 把 CSR 旧值送到 rd,同时把 rs1 写入 CSR。rd=x0 是写-only CSR 操作:不读 CSR、不触发读副作用,但仍写 CSR。
结合 «csrrw x5, mepc, x6 # x5 = old mepc; mepc = x6» 等实际代码理解该场景。
结合 «csrrw x5, mepc, x6 # x5 = old mepc; mepc = x6» 等实际代码理解该场景。
不是。Zicsr 里的 atomic 指 CSR 读和写在同一条 CSR 指令中完成,不是对内存地址执行 AMO。
不一样。rd=x0 只在 CSRRW/CSRRWI 中抑制 CSR 读取;rs1=x0 或 uimm=0 只在 CSRRS/CSRRC 及其立即数形式中抑制 CSR 写入。