首页/指令库/MOP.R.29
MOP.R.29

RISC-V MOP.R.29 指令详解

指令手册SYSTEM (Zimop MOP.R)

MOP.R.29 是 Zimop 1.0 的 may-be-operation;未被其他扩展重定义时,将 0 写入 x[rd]。

指令语法

mop.r.29 rd, rs1
操作数说明
rd:默认语义把 0 写入 x[rd];rd=x0 时该架构写入被丢弃,x0 保持 0。
rs1:推荐汇编语法中的显式寄存器字段;默认 Zimop 定义不读取它,也不带从 rs1 到 rd 的语法依赖。
bits 31..20 是固定的 MOP.R.n 选择子,不是汇编立即数,也不能按 12 位有符号值进行符号扩展;未来重定义扩展才可规定读取 rs1。
Zimop系统与特权

扩展条件:RV32/RV64,需实现 Zimop 1.0。下述写零行为仅适用于未被其他扩展重定义的编码;不能据此保证未实现 Zimop 的处理器可执行本指令。

指令编码

31..20
fixed n selector
19..15
rs1
14..12
funct3
11..7
rd
6..0
opcode

MOP.R.29 使用 opcode 1110011(0x73)、funct3 100。MOP.R.n 使用 SYSTEM 字段:bits 31..20 是固定的 n 选择子,rs1 和 rd 是显式寄存器字段,funct3=100,opcode=SYSTEM。默认定义只向 x[rd] 写 0;rs1 不是默认读取的源操作数。

格式: Zimop MOP.R SYSTEM 字段(n=29)
opcode: 1110011 (0x73)
funct3: 100 (0x4)
固定 n 选择子(bits 31..20): 110011011101 (0xcdd)

指令行为说明

MOP.R.29 的推荐语法为 mop.r.29 rd, rs1。rd 和 rs1 均可指定任意整数寄存器 x0–x31,包括相同寄存器。默认 Zimop 行为只把 0 写入 x[rd],不读取 x[rs1],也不建立 rs1 到 rd 的语法依赖;rd=x0 时 x0 仍保持 0。其他扩展可以重定义该编码,规定读取 rs1 或不同的架构效果。标准软件不应执行 MOP,除非明确面向重定义该 MOP 的扩展。

快速理解与检索要点

MOP.R.29 是 Zimop 1.0 的 may-be-operation;未被其他扩展重定义时,将 0 写入 x[rd]。

Zimop 1.0 定义 32 条 MOP.R.n(n=0–31);MOP.R.29 是其中编号 29 的 32 位指令。
编码 bits 31..20 固定为 110011011101(0xcdd);bits 19..15 为 rs1,14..12 为 funct3=100,11..7 为 rd,6..0 为 SYSTEM opcode=1110011。
推荐语法只有 rd、rs1 两个整数寄存器操作数,没有立即数;两者可取 x0–x31 且可重叠。
未被重定义时,结果为零,与 rs1 的旧值无关;rd=x0 不改变硬连线零寄存器。

常见使用场景

Zimop 扩展兼容性

仅演示未被重定义的 Zimop 行为:mop.r.29 x5, x6 将 x5 设为 0,与 x6 原值无关;x6 保持原值。普通软件只应在明确面向重定义该 MOP 的扩展时执行它。

使用前检查清单

语法检查
  • 确认汇编语法只有 rd、rs1;bits 31..20 是固定的 MOP.R.n 选择子,不是立即数。
  • 确认任意 x 寄存器都可作为 rd 或 rs1;默认定义不读取 rs1,也不产生 rs1 到 rd 的语法依赖。
语义检查
  • 确认未被其他扩展重定义时只向 x[rd] 写入 0;rd=x0 时 x0 仍保持 0。
  • 不要假定未来重定义扩展的具体操作;标准软件只应在明确面向该重定义扩展时执行该 MOP。

容易混淆 / 常见误区

默认写零不同于不写寄存器的 NOP 或 HINT;rd=x0 时也不能据此忽略重定义扩展的效果。
没有立即数操作数;助记符末尾的编号选择固定编码,不是运行时的数值输入。
默认行为不读取 rs1,也不建立 rs1 到 rd 的语法依赖;重定义扩展可另行规定。
标准软件只应在明确面向重定义该 MOP 的扩展时执行它。

常见问题

MOP.R.29 默认是纯 NOP 吗?

不是。未被其他扩展重定义时,mop.r.29 x5, x6 把 x5 写为 0,与 x6 的值无关;x6 不变。rd=x0 时 x0 保持 0。

MOP.R.29 有立即数操作数吗?

没有。语法是 mop.r.29 rd, rs1;bits 31..20 固定为 0xcdd,是指令选择子而非有符号立即数。