sra
lyszt.net behandelt sra und andere RISC-V-Befehle ausführlicher.
Kodierungsformat
Beschreibung
sra ist die zweite Rechtsverschiebung, neben srl. Der Name steht für shift right arithmetic (arithmetische Rechtsverschiebung). Die folgende Form verschiebt rs1 um den in rs2 enthaltenen Betrag nach rechts.
sra rd, rs1, rs2
Wie jede Rechtsverschiebung bewegt sie Bits zum niedrigen Ende und verwirft die, die herausfallen. Die Behandlung der leeren oberen Positionen unterscheidet sich von srl.
RISC-V verwendet ein vorzeichenbehaftetes Schema, bei dem das oberste Bit das Vorzeichen markiert, und eine 1 dort bedeutet, dass die Zahl negativ ist. srl füllt die Oberseite mit 0en, was die Vorzeichenmarkierung löscht und eine negative Zahl in eine große positive verwandelt. sra füllt die Oberseite mit Kopien des vorhandenen Vorzeichenbits, sodass die Füllung bei einer negativen Zahl aus 1en und bei einer positiven aus 0en besteht. Die Zahl behält ihr Vorzeichen.
sra dividiert eine vorzeichenbehaftete Zahl durch eine Zweierpotenz. Eine Verschiebung um 1 halbiert sie, eine Verschiebung um 3 dividiert sie durch 8, und negative Zahlen bleiben negativ. Das Ergebnis rundet nach unten, zum negativeren Wert hin, sodass -7 um 1 nach rechts verschoben -4 ergibt, während die Anweisung div -3 ergibt. Grafik- und Audiocode akzeptiert normalerweise die Abrundung nach unten.
Das RISC-V-Handbuch hält den Verschiebungsbetrag in den unteren 5 Bits des Registers rs2. Fünf Bits decken 0 bis 31 Stellen ab, sodass die anderen Bits von rs2 keine Wirkung haben. Das Handbuch beschreibt sra als arithmetische Rechtsverschiebung, die das ursprüngliche Vorzeichenbit in die frei gewordenen oberen Bits kopiert.
Verwenden Sie sra für vorzeichenbehaftete Zahlen und srl für rohe Bitmuster oder Zahlen, die nie negativ sind. Für einen festen Betrag verwenden Sie die Konstantenform srai.
Beispiel
li t0, -8 li t1, 1 sra t2, t0, t1 # t2 = -4 (sign-filled)
