srli

srli

RISC-V 汇编 参考

lyszt.net 更详细地介绍了 srli 和其他 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

描述

srli 将位向右移动固定量,并在空出的高位填入 0。它是 srl 的常量形式,srl 涵盖了其机制和零填充。i 表示立即数(immediate),即编码在指令中的常量。

srli 的形式如下所示,其中 amount 是 0 到 31 的固定数字。

srli rd, rs1, amount

右移每移动一位就将数字减半一次,而零填充将该值视为永不为负,因此 srli 将无符号数除以 2 的幂且没有余数。下一行将 t0 除以四。

srli t0, t0, 2

与掩码 AND 结合使用时,srli 从打包值中提取一个字段。将该字段下移到最低位,然后应用 andi 只保留其位。读取一个字(word)的第二个字节需要右移 8 位并与 0xff 进行 AND。

RISC-V 手册将常量移位编码为 I 型格式的一种特化,I 型格式是标准指令布局之一。移位量占据立即数字段的低 5 位,指令的第 30 位区分两种右移。srli 执行逻辑右移,0 进入高位。

srli 始终用 0 填充。这适用于原始位模式和永不为负的数字。对于可能为负的有符号值,0 会覆盖符号标记。有符号除以 2 的幂使用 srai。两者之间的选择反映了你如何解读寄存器的位。

示例

li t0, -8
srli t1, t0, 1   # t1 = 2147483644 (zero-filled)