移位量为 0 时会怎样?
保留 rs1[31:0],再把 bit31 符号扩展到 64 位。例如 rs1=0x1234567880000000、rd≠x0 时结果为 0xffffffff80000000。
将rs1低32位算术右移rs2[4:0]位,结果符号扩展至64位写入rd
SRAW指令采用R型格式(opcode=0111011, funct7=0100000, funct3=101)。对rs1的低32位进行算术右移(高位用原bit31填充),移位量由rs2的低5位指定,结果符号扩展至64位后写入rd。
RV64I; XLEN=64; 32-bit result → sign extension
sraw rd, rs1, rs2假设取指成功、无异步中断及额外扩展检查;同名寄存器共用一份初值。
本例固定 IALIGN=32、指令长 32 位;PC 必须为 4 字节对齐。
0x40C5D53B解析当前指令字段并读取写回前源值;还没有提交结果。
这是架构效果的教学步骤,不代表处理器流水线或周期。
SRAW 仅适用于 RV64I:忽略 rs1 高 32 位,按rs2[4:0]算术右移低 32 位,再符号扩展到 64 位。
结合 «sraw x10, x11, x12 # RV64I: x11=0x1234567880000000, x12=33 -> x10=0xffffffffc0000000» 等实际代码理解该场景。
保留 rs1[31:0],再把 bit31 符号扩展到 64 位。例如 rs1=0x1234567880000000、rd≠x0 时结果为 0xffffffff80000000。
SRAW 只使用 rs2[4:0],例如 rs2=33 时右移 1 位。