srai

srai

Assembly RISC-V Riferimento

lyszt.net tratta srai e altre istruzioni RISC-V in modo più dettagliato.

Formato di codifica

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

Descrizione

srai sposta i bit a destra di una quantità fissa e copia il bit di segno nelle posizioni superiori liberate, il che mantiene negativi i numeri negativi. È la forma a quantità costante di sra, ed è per questo che il riempimento preserva il segno. La i significa immediato, una costante codificata nell'istruzione.

La sintassi di srai è mostrata di seguito, con amount come costante tra 0 e 31.

srai rd, rs1, amount

Uno spostamento a destra di una posizione dimezza un numero e lascia il segno invariato, quindi srai divide un numero con segno per una potenza di due. La riga successiva divide un valore con segno per 8, sia per input positivi che negativi.

srai t0, t0, 3

srai arrotonda per difetto, verso il valore più negativo. Spostare -7 a destra di 1 dà -4, mentre div con un divisore di 2 dà -3 perché arrotonda verso zero. I due concordano sui numeri non negativi e sulle divisioni senza resto. Differiscono di uno solo quando un numero negativo lascia un resto. Il codice grafico, audio e dei segnali in genere necessita dell'arrotondamento per difetto.

Il manuale RISC-V codifica gli spostamenti costanti come una specializzazione del formato di tipo I, uno dei layout di istruzione standard. La quantità di spostamento occupa i 5 bit inferiori del campo immediato, e il bit 30 dell'istruzione distingue i due spostamenti a destra. srai esegue uno spostamento aritmetico a destra, e il bit di segno originale riempie i bit superiori liberati.

Dei quattro spostamenti, srai gestisce i numeri con segno che vengono divisi e srli gestisce bit grezzi o numeri che non diventano mai negativi. Le forme senza i, sra e srl, prendono una distanza di spostamento calcolata durante l'esecuzione del programma.

Esempio

li t0, -8
srai t1, t0, 1   # t1 = -4 (sign-filled)