ADD.UW

RISC-V ADD.UW 指令详解

指令手册R-type

无符号字加法(RV64),将rs1的低32位零扩展后与rs2相加

指令语法

add.uw rd, rs1, rs2
操作数说明
目标寄存器 rd:存放运算结果的通用寄存器。
源寄存器 rs1:第一个操作数寄存器。
源寄存器 rs2:第二个操作数寄存器。
BZba地址生成

指令行为说明

add.uw 是 RV64 Zba 指令,将 rs1 的低 32 位零扩展后与 rs2 按 XLEN 宽加法相加,结果写入 rd。

快速理解与检索要点

add.uw 常用于 RV64 地址生成:先把 rs1[31:0] 零扩展,再与 rs2 相加。

这些指令属于 B 扩展中的具体子扩展,按 XLEN 宽整数寄存器值运算。
它是 Zba 地址生成位操作,不是普通 ADDW;结果不是 32 位符号扩展。

常见使用场景

地址与指针

结合 «add.uw x10, x11, x12» 等实际代码理解该场景。

类型转换

结合 «add.uw x10, x11, x12» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认当前指令格式为 R-type。
  • 确认操作数排列顺序与示例一致。
语义检查
  • 确认目标寄存器用途和调用约定兼容。
  • 确认该指令不是伪指令展开后的底层形式。

容易混淆 / 常见误区

仅适用于 RV64;RV32 没有该指令。
只有 rs1 的低 32 位被零扩展;rs2 作为 XLEN 宽加数参与。
add.uw rd, rs1, x0 可用于零扩展 32 位字,但 addiw 是符号扩展语义。

常见问题

add.uw 会访问内存吗?

不会。它只读取整数寄存器操作数并写回 rd。

add.uw 和 addw 有什么区别?

add.uw 零扩展 rs1 的低 32 位后与 rs2 做 XLEN 加法;addw 做 32 位加法并把 bit31 符号扩展到 XLEN。