SLLI 的移位量来自哪里?
立即数版本的移位量来自 shamt 字段;RV32I 中是 5 位。
将rs1逻辑左移shamt位(低位补零),结果写入rd
SLLI 使用 opcode 0010011(0x13)、funct3 001、funct7 0000000。rs1 字段选择源寄存器,12 位立即数提供第二操作数,rd 选择目标寄存器。
SLLI指令属于I型格式的特化子类(opcode=0010011, funct3=001, funct7=0000000)。操作数rs1按移位量shamt(位于立即数字段的低5位,即inst[24:20])进行逻辑左移,左侧移出的位丢弃,低位补零,结果写入rd。对于RV32I,移位量范围为0~31。funct7的高6位必须为全零(0000000),bit30=0。
SLLI 执行立即数逻辑左移,低位补 0,结果写入 rd。移位量来自 shamt 立即数字段。
结合 «slli x5, x6, 2 # x5 = x6 << 2 (multiply by 4)» 等实际代码理解该场景。
结合 «slli x5, x6, 2 # x5 = x6 << 2 (multiply by 4)» 等实际代码理解该场景。
立即数版本的移位量来自 shamt 字段;RV32I 中是 5 位。
逻辑右移高位补 0;算术右移高位复制原符号位,通常用于保持有符号数的符号。