sll

sll

RISC-V Assembler Referenz

lyszt.net behandelt sll und andere RISC-V-Befehle ausführlicher.

Kodierungsformat

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

Beschreibung

sll verschiebt die Bits einer Zahl nach links. Ein Register enthält 32 Bits in einer Reihe, und eine Verschiebung bewegt die gesamte Reihe um eine bestimmte Anzahl von Positionen nach links oder rechts. Der Name steht für shift left logical (logische Linksverschiebung). In der untenstehenden Form wird der Wert in rs1 um die in rs2 angegebene Anzahl von Stellen nach links verschoben, und das Ergebnis geht nach rd.

sll rd, rs1, rs2

Während sich die Bits nach links bewegen, füllen Nullen die leeren Positionen auf der rechten Seite, und Bits, die über den linken Rand hinausgeschoben werden, gehen verloren.

Eine Linksverschiebung um eine Stelle verdoppelt eine Zahl, so wie das Anhängen einer 0 an eine Dezimalzahl sie mit zehn multipliziert. Eine Verschiebung um 1 multipliziert mit 2, eine Verschiebung um 2 multipliziert mit 4, und eine Verschiebung um 3 multipliziert mit 8. Eine Verschiebung kostet den Prozessor weniger als eine Multiplikation, was sie zum schnellen Weg macht, mit Zweierpotenzen zu multiplizieren. Der Array-Zugriff beruht darauf, weil die Adresse jedes Elements eine feste Anzahl von Bytes, eine Zweierpotenz, hinter der vorherigen liegt.

Laut dem RISC-V-Handbuch wird der Verschiebungsbetrag in den unteren 5 Bits des Registers rs2 gehalten. Fünf Bits decken 0 bis 31 Stellen ab, sodass die übrigen Bits von rs2 keine Wirkung haben. Das Handbuch nennt sll eine logische Linksverschiebung, was bedeutet, dass Nullen in die unteren Bits eintreten.

In dieser Form stammt der Verschiebungsbetrag aus einem Register, was zu einem Betrag passt, der während der Programmausführung berechnet wird. Verwenden Sie slli für einen festen Betrag. Das Beispiel verschiebt 3 um 2 Stellen nach links, multipliziert es mit 4 und ergibt 12.

Beispiel

li t0, 3
li t1, 2
sll t2, t0, t1   # t2 = 12