首页/指令库/MOP.RR.3
MOP.RR.3

RISC-V MOP.RR.3 指令详解

指令手册Zimop MOP.RR SYSTEM fields

MOP.RR.3 在 Zimop 默认定义下将 0 写入 rd;重定义扩展可使用 rs1、rs2。

指令语法

mop.rr.3 rd, rs1, rs2
操作数说明
rd:默认语义把 0 写入 x[rd];rd=x0 时该架构写入被丢弃,x0 保持 0。
rs1 和 rs2:推荐汇编语法中的显式寄存器字段;默认 Zimop 定义不读取它们,也不带从任一源到 rd 的语法依赖。
bits 31..25 是固定的 MOP.RR.n 选择子;未来重定义扩展才可规定读取 rs1、rs2 或两者。
Zimop系统与特权

指令编码

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

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

格式: Zimop MOP.RR SYSTEM 字段(n=3)
opcode: 1110011 (0x73)
funct3: 100 (0x4)
固定 n 选择子: 1000111 (0x47)

指令行为说明

MOP.RR.3 是 Zimop may-be-operation,推荐语法为 mop.rr.3 rd, rs1, rs2。若没有其他扩展重定义该编码,官方默认行为是把 0 写入 x[rd];该编码空间允许未来扩展定义为读取 x[rs1] 与 x[rs2] 并写入 x[rd]。标准软件不应执行 MOP,除非明确面向重定义该 MOP 的扩展。 在 RV32/RV64 中,rd 可选择 x0,此时 x0 仍为 0;寄存器重叠不会把默认行为变成复制或运算。

快速理解与检索要点

MOP.RR.3 是 Zimop 的三寄存器 MOP 编码;未被重定义时,它把 0 写入 rd。

官方定义 8 个 MOP.RR.n,编号 0 到 7。
MOP.RR.n 允许未来扩展读取 rs1/rs2 并写 rd,但默认不读取源寄存器,也不建立源到目的的语法依赖。
32 位 SYSTEM 编码的 bits 31..25 固定为 1000111;rs2、rs1、rd 均为显式 5 位字段,funct3=100,opcode=1110011。
Zimop 1.0 的默认语义适用于 RV32/RV64:结果是 XLEN 位零,不对源字段做算术运算。

常见使用场景

系统与特权

假定 RV32/RV64 Zimop 1.0 已实现且没有重定义适用:mop.rr.3 x5, x6, x7 写 x5=0,与 x6、x7 原值无关;x6、x7 不变。rd 与源字段重叠时仍写零;rd=x0 时 x0 保持 0。普通软件只应在明确面向重定义该 MOP 的扩展时执行它。

扩展兼容性

假定 RV32/RV64 Zimop 1.0 已实现且没有重定义适用:mop.rr.3 x5, x6, x7 写 x5=0,与 x6、x7 原值无关;x6、x7 不变。rd 与源字段重叠时仍写零;rd=x0 时 x0 保持 0。普通软件只应在明确面向重定义该 MOP 的扩展时执行它。

使用前检查清单

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

容易混淆 / 常见误区

默认行为不是“完全不写寄存器”的 NOP;MOP.RR.n 默认写 0 到 rd。
默认 Zimop MOP 不携带从 rs1/rs2 到 rd 的语法依赖;重定义扩展可另行规定。
Zimop 只定义 MOP.RR.0 到 MOP.RR.7。

常见问题

MOP.RR.3 默认会写 rd 吗?

会,但只在 Zimop 默认定义适用时;rd=x0 时 x0 保持 0。重定义扩展适用时应使用其语义。

MOP.RR.3 和 MOP.R.3 的区别是什么?

两者默认都写零。MOP.RR 的推荐语法含 rd、rs1、rs2,允许重定义扩展使用两个源;MOP.R 只含 rd、rs1,允许重定义扩展使用一个源。