srli

srli

Assembleur RISC-V Référence

lyszt.net couvre srli et d'autres instructions RISC-V plus en détail.

Format d'encodage

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

Description

srli décale les bits vers la droite d'une quantité fixe et place des 0 dans les positions supérieures libérées. C'est la forme à quantité constante de srl, qui couvre la mécanique et le remplissage par des zéros. Le i signifie immédiat, une constante encodée dans l'instruction.

La forme de srli apparaît ci-dessous, où amount est un nombre fixe de 0 à 31.

srli rd, rs1, amount

Un décalage à droite divise un nombre par deux une fois pour chaque position déplacée, et le remplissage par des zéros traite la valeur comme jamais négative, donc srli divise un nombre non signé par une puissance de deux sans reste. La ligne suivante divise t0 par quatre.

srli t0, t0, 2

Combiné à un AND de masquage, srli extrait un champ d'une valeur compactée. Décalez le champ vers le bas, puis appliquez andi pour ne conserver que ses bits. Lire le deuxième octet d'un mot nécessite un décalage à droite de 8 et un AND avec 0xff.

Le manuel RISC-V encode les décalages constants comme une spécialisation du format de type I, l'une des dispositions d'instruction standard. La quantité de décalage occupe les 5 bits inférieurs du champ immédiat, et le bit 30 de l'instruction distingue les deux décalages à droite. srli effectue un décalage à droite logique, et des 0 entrent dans les bits supérieurs.

srli remplit toujours avec des 0. Cela convient aux motifs de bits bruts et aux nombres qui ne sont jamais négatifs. Sur une valeur signée qui peut être négative, les 0 écrasent le marqueur de signe. La division signée par une puissance de deux utilise srai. Le choix entre les deux reflète la façon dont vous lisez les bits du registre.

Exemple

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