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