ADD.UW

RISC-V ADD.UW 指令详解

指令手册OP-32 (R-type)

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

指令语法

add.uw rd, rs1, rs2
操作数说明
本指令为 OP-32 (R-type) 格式,请根据汇编语法确认各操作数位置。
Zba地址生成

指令行为说明

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

ADD.UW 指令解析与执行动画

从机器码字段解析开始,依次展示操作数读取、该指令专属语义计算和 ISA 可见状态更新。

rd
rs1
rs2
add.uw
,
,
执行环境
t1(x6)
0x0000000000000014
a0(x10)
0x0000000000001000
31..25
24..20
19..15
14..12
11..7
6..0
0000100
funct7
01010
rs2
00110
rs1
000
funct3
00101
rd
0111011
opcode
执行数据路径
instruction
0x08A302BB
opcode
0111011 -> OP-32
funct3
000 -> ADD.UW
funct7
0000100 -> ADD.UW selector
rd / rs1 / rs2
t0(x5) / t1(x6)=0x0000000000000014 / a0(x10)=0x0000000000001000
rs1[31:0]
0x00000014 -> zero-extend = 0x0000000000000014
RV64 XLEN-wide add
0x0000000000001000 + 0x0000000000000014 = 0x0000000000001014
x5
t0(x5) = 0x0000000000001014
当前步骤

概念步骤:拿到 32-bit 指令编码

机器码按当前指令格式切成字段,动画从 encoding/decode 开始。

encoding: 0x08A302BB
syntax : add.uw t0(x5), t1(x6), a0(x10)
result : t0(x5) = 0x0000000000001014
架构可见结果
t0(x5) = 0x0000000000001014

该动画展示 ISA 可见的解码和状态变化,不表示任何特定 CPU 的流水线、缓存、预测或时序实现。

快速理解与检索要点

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

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

常见使用场景

地址与指针

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

类型转换

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

使用前检查清单

语法检查
  • 确认当前指令格式为 OP-32 (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。