SRL 的移位量来自哪里?
寄存器版本的移位量来自 rs2 的低 log2(XLEN) 位。
将rs1按rs2的低log2(XLEN)位逻辑右移(高位补零),结果写入rd
SRL 使用 opcode 0110011(0x33)、funct3 101、funct7 0000000。rs1 和 rs2 字段选择两个源寄存器,rd 字段选择目标寄存器。
SRL指令采用R型格式。将rs1的值按rs2低log2(XLEN)位指定的量进行逻辑右移(RV32取rs2[4:0],RV64取rs2[5:0]),高位补零,低位丢弃,结果写入rd。funct7=0000000, funct3=101, bit30=0。与SRA的区别在于bit30的值:SRL的bit30=0(不做符号扩展),SRA的bit30=1(进行符号扩展)。
SRL 执行逻辑右移,高位补 0,结果写入 rd。移位量来自 rs2 的低 log2(XLEN) 位。
结合 «srl x5, x6, x7 # x5 = x6 >> (x7[4:0]) (logical, zero fill)» 等实际代码理解该场景。
结合 «srl x5, x6, x7 # x5 = x6 >> (x7[4:0]) (logical, zero fill)» 等实际代码理解该场景。
结合 «srl x5, x6, x7 # x5 = x6 >> (x7[4:0]) (logical, zero fill)» 等实际代码理解该场景。
寄存器版本的移位量来自 rs2 的低 log2(XLEN) 位。
逻辑右移高位补 0;算术右移高位复制原符号位,通常用于保持有符号数的符号。