sext-w

RISC-V sext-w 伪指令详解

汇编器伪指令

RV64 符号扩展字伪指令,展开为 addiw rd, rs, 0。它取 rs 的低 32 位并按 bit31 符号扩展到 XLEN。

你写下的是
sext.w rd, rs
常见真实展开
addiw rd, rs, 0

这条伪指令到底在帮你省什么

RV64 的 32 位整数结果通常需要保持符号扩展不变量;sext.w 用一条直观伪指令表达 addiw +0 的常见用法。

sext-w 的核心作用是“RV64 32 位符号扩展”。它是汇编器层面的简写;调试、审计或阅读机器码时,应回到页面列出的真实展开指令和相关重定位语义来判断行为。

官方语义核对重点

官方汇编手册把 sext-w 作为汇编器层面的伪指令/别名处理,硬件执行的是展开后的真实指令序列。
真实语义以 ADDIW 等展开指令的 ISA 定义为准;本页不把 sext-w 当作独立硬件 opcode。

可用性与扩展条件

基础条件
  • RV64I word 指令语义
单指令/标准写法条件
  • RV64 使用 ADDIW rd, rs, 0
回退/边界
RV32 上没有同样的 XLEN 扩展需求;普通寄存器宽度已经是 32 位。
备注
  • 结果按 bit31 符号扩展到 XLEN。

展开过程怎么理解

步骤 1
ADDIW 加 0,取 rs 的低 32 位结果并符号扩展到 XLEN。

在 objdump / 反汇编里可能看到什么

反汇编可能显示伪指令,也可能显示展开后的真实指令,取决于工具选项和上下文。

官方依据与阅读顺序

本页把伪指令当作汇编器层面的别名或宏来解释:先看它会展开成哪些真实指令,再回到官方 ISA 手册理解真实指令的行为。涉及 ABI、重定位或链接器松弛时,以 psABI 文档为准。

什么时候优先想到它

RV64 上把 32 位有符号整数规范化到 XLEN
读取或生成依赖 ADDIW +0 的编译器序列
与 zext.w 对照理解 32 位符号扩展和零扩展

容易混淆 / 常见误区

这是符号扩展,不是零扩展;bit31 为 1 时高位填 1
依赖 RV64 的 ADDIW 语义,RV32 上没有同样意义
如果需要零扩展 32 位,应看 zext.w

常见问题

sext-w 是真实 RISC-V 指令吗?

sext-w 是汇编器伪指令或别名,不是单独硬件 opcode。页面中的“常见真实展开”列出官方展开,真实行为由展开后的 ISA 指令决定。

使用 sext-w 时最容易误解什么?

这是符号扩展,不是零扩展;bit31 为 1 时高位填 1