sll
lyszt.net 更详细地介绍了 sll 和其他 RISC-V 指令。
编码格式
R
31–25funct7
24–20rs2
19–15rs1
14–12funct3
11–7rd
6–0opcode
I
31–20imm[11:0]
19–15rs1
14–12funct3
11–7rd
6–0opcode
S
31–25imm[11:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:0]
6–0opcode
B
31–25imm[12,10:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:1,11]
6–0opcode
U
31–12imm[31:12]
11–7rd
6–0opcode
J
31–12imm[20,10:1,11,19:12]
11–7rd
6–0opcode
描述
sll 将数字的比特向左移动。一个寄存器保存一行 32 个比特,移位将整行向左或向右移动若干位置。这个名字代表 shift left logical(逻辑左移)。在下面的形式中,rs1 中的值向左移动 rs2 中给出的位数,结果存入 rd。
sll rd, rs1, rs2
当比特向左移动时,零填充右侧的空位,被推出左边缘的比特则被丢弃。
左移一位使数字翻倍,就像在十进制数后追加一个 0 使其乘以十一样。移位 1 乘以 2,移位 2 乘以 4,移位 3 乘以 8。移位比乘法对处理器的开销更小,这使它成为乘以 2 的幂的快速途径。数组访问依赖于此,因为每个元素的地址比前一个元素远固定的 2 的幂字节数。
根据 RISC-V 手册,移位量保存在寄存器 rs2 的低 5 位中。5 位覆盖 0 到 31 位,因此 rs2 的其余位没有影响。手册称 sll 为逻辑左移,意思是零进入低位。
在这种形式中,移位量来自寄存器,适合程序运行时计算出的量。固定量请使用 slli。示例将 3 左移 2 位,乘以 4 得到 12。
示例
li t0, 3 li t1, 2 sll t2, t0, t1 # t2 = 12
