slli

slli

Assembleur RISC-V Référence

lyszt.net couvre slli 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

slli décale les bits vers la gauche d'une quantité fixe. L'opération correspond à sll : les bits glissent vers la gauche, des zéros remplissent le côté droit, les bits qui dépassent le bord gauche sont perdus, et chaque position déplacée double la valeur (la page sll couvre le mécanisme). L'instruction contient la distance de décalage comme constante, donc aucun registre ne la fournit. Le i signifie immédiat, qui est le terme désignant une constante écrite dans l'instruction.

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

slli rd, rs1, amount

La ligne suivante décale t0 vers la gauche de 3 positions, ce qui le multiplie par 8.

slli t1, t0, 3

Les tableaux rendent cette instruction courante. Une valeur de 32 bits dans un tableau occupe 4 octets, donc l'élément numéro i se trouve à i fois 4 octets du début, et un décalage à gauche de 2 multiplie par 4. Le schéma habituel décale l'indice pour produire un décalage en octets, ajoute l'adresse de début du tableau, puis charge la valeur. Repérer cette séquence décalage, addition et chargement aide lors de la lecture d'assembleur écrit par d'autres.

Le manuel RISC-V encode les décalages par une constante comme une spécialisation du format de type I, l'une des dispositions d'instruction standard. rs1 contient l'opérande à décaler, et les 5 bits inférieurs du champ immédiat contiennent la quantité de décalage. slli effectue un décalage logique vers la gauche, et des zéros entrent dans les bits inférieurs.

Utilisez slli lorsque la distance de décalage est connue au moment où vous écrivez le code. Utilisez sll lorsque la quantité est calculée pendant l'exécution du programme. L'exemple décale 5 vers la gauche de 3, ce qui donne 5 fois 8, soit 40.

Exemple

li t0, 5
slli t1, t0, 3   # t1 = 5 << 3 = 40  (5 * 8)