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