首页/指令库/MOP-R-16
MOP.R.16

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

指令手册I-type

Zimop MOP.R.16,默认把 0 写入 rd,可由未来扩展重定义为读取 rs1 并写 rd。

指令语法

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

指令编码

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

MOP-R-16 使用 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=16)
opcode: 1110011 (0x73)
funct3: 100 (0x4)
固定 n 选择子(bits 31..20): 110000011100 (0xc1c)

指令行为说明

MOP.R.16 是 Zimop may-be-operation,推荐语法为 mop.r.16 rd, rs1。若没有其他扩展重定义该编码,官方默认行为是把 0 写入 x[rd];该编码空间允许未来扩展定义为读取 x[rs1] 并写入 x[rd]。标准软件不应执行 MOP,除非明确面向重定义该 MOP 的扩展。

快速理解与检索要点

MOP.R.16 是 Zimop 为未来扩展预留的兼容编码;未被重定义时,它的可见结果是 rd 得到 0。

官方说明 MOP.R.n 编码位于 SYSTEM 主 opcode。
MOP.R.n 允许未来扩展读取 rs1 并写 rd,但默认不读取 rs1。

常见使用场景

系统与特权

结合 «mop.r.16 t0, t1» 等实际代码理解该场景。

扩展兼容性

结合 «mop.r.16 t0, t1» 等实际代码理解该场景。

使用前检查清单

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

容易混淆 / 常见误区

默认行为不是“完全不写寄存器”的 NOP;MOP.R.n 默认写 0 到 rd。
默认 Zimop MOP 不携带从 rs1 到 rd 的语法依赖;重定义扩展可另行规定。
不要把 Zimop MOP.R.n 与 Zcmop C.MOP.n 混淆,后者默认不写寄存器。

常见问题

MOP.R.16 默认是 NOP 吗?

不是纯 NOP。它默认把 0 写入 rd。

普通软件能随便执行 MOP.R.16 吗?

不应如此,除非软件明确面向重定义该 MOP 的扩展。