SRAI 的移位量来自哪里?
立即数版本的移位量来自 shamt 字段;RV32I 中是 5 位。
将rs1算术右移shamt位(高位用原符号位填充),结果写入rd
SRAI 使用 opcode 0010011(0x13)、funct3 101、funct7 0100000。rs1 字段选择源寄存器,12 位立即数提供第二操作数,rd 选择目标寄存器。
SRAI指令属于I型格式的特化子类(opcode=0010011, funct3=101, funct7=0100000)。rs1按移位量shamt进行算术右移:高位用rs1的原符号位(bit31)填充以保持符号不变,低位移出的位丢弃,结果写入rd。funct7的bit30=1(编码为0100000),正是这一点与SRLI区分开来。用于有符号整数除以2的幂次。
SRAI 执行立即数算术右移,高位复制原符号位,结果写入 rd。移位量来自 shamt 立即数字段。
结合 «srai x5, x6, 2 # x5 = x6 >> 2 (signed, sign-extended)» 等实际代码理解该场景。
结合 «srai x5, x6, 2 # x5 = x6 >> 2 (signed, sign-extended)» 等实际代码理解该场景。
结合 «srai x5, x6, 2 # x5 = x6 >> 2 (signed, sign-extended)» 等实际代码理解该场景。
立即数版本的移位量来自 shamt 字段;RV32I 中是 5 位。
逻辑右移高位补 0;算术右移高位复制原符号位,通常用于保持有符号数的符号。