LWU 和 LW 在 RV64I 中有什么区别?
二者都读取 32 位字。LWU 将其零扩展到 64 位;LW 将 bit 31 符号扩展到高 32 位。
从内存加载 32 位字,零扩展至 64 位后写入 rd
LWU 指令采用 I 型格式(opcode=0000011,funct3=110),仅属于 RV64I。它从有效字节地址 rs1 加符号扩展 12 位偏移读取 32 位字,零扩展至 64 位后写入 rd。自然对齐地址是 4 的倍数;对非自然对齐访问,EEI 定义其完成、地址未对齐异常或访问错误分支。与 LW 不同,LW 在 RV64I 中把 32 位值符号扩展至 64 位。
从机器码字段解析开始,依次展示操作数读取、该指令专属语义计算和 ISA 可见状态更新。
仅当有效地址不是 4 的倍数时使用此 EEI 分支;自然对齐访问不得引发地址未对齐异常。
机器码按当前指令格式切成字段,动画从 encoding/decode 开始。
该动画展示 ISA 可见的解码和状态变化,不表示任何特定 CPU 的流水线、缓存、预测或时序实现。
LWU 仅在 RV64I 中可用:先以 rs1 加符号扩展 12 位偏移形成有效字节地址,再把内存中的 32 位值零扩展到 64 位写入 rd。
结合 «lwu x10, 0(x11) # load unsigned 32-bit value, x10 = zero-extend(*x11)» 等实际代码理解该场景。
二者都读取 32 位字。LWU 将其零扩展到 64 位;LW 将 bit 31 符号扩展到高 32 位。
不能。LWU 是 RV64I 增加的加载指令;RV32I 没有 64 位目标寄存器可供该零扩展结果写入。