sra
lyszt.net tratta sra e altre istruzioni RISC-V in modo più dettagliato.
Formato di codifica
Descrizione
sra è il secondo shift a destra, accanto a srl. Il nome sta per shift right arithmetic (scorrimento aritmetico a destra). La forma seguente sposta rs1 a destra della quantità contenuta in rs2.
sra rd, rs1, rs2
Come qualsiasi shift a destra, sposta i bit verso l'estremità bassa e scarta quelli che cadono. Il suo trattamento delle posizioni superiori vuote differisce da srl.
RISC-V usa uno schema con segno in cui il bit più alto indica il segno, e un 1 lì significa che il numero è negativo. srl riempie la parte alta con 0, il che cancella il marcatore di segno e trasforma un numero negativo in un grande numero positivo. sra riempie la parte alta con copie del bit di segno esistente, quindi il riempimento è di 1 per un numero negativo e di 0 per uno positivo. Il numero mantiene il suo segno.
sra divide un numero con segno per una potenza di due. Uno shift di 1 lo dimezza, uno shift di 3 lo divide per 8, e i numeri negativi rimangono negativi. Il risultato arrotonda verso il basso, verso il valore più negativo, quindi -7 spostato a destra di 1 dà -4 mentre l'istruzione div dà -3. Il codice grafico e audio di solito accetta l'arrotondamento verso il basso.
Il manuale RISC-V tiene la quantità di shift nei 5 bit inferiori del registro rs2. Cinque bit coprono da 0 a 31 posizioni, quindi gli altri bit di rs2 non hanno effetto. Il manuale descrive sra come uno scorrimento aritmetico a destra, che copia il bit di segno originale nei bit superiori liberati.
Usa sra per i numeri con segno e srl per pattern di bit grezzi o numeri che non sono mai negativi. Per una quantità fissa, usa la forma costante srai.
Esempio
li t0, -8 li t1, 1 sra t2, t0, t1 # t2 = -4 (sign-filled)
