srl

srl

Assembly RISC-V Riferimento

lyszt.net tratta srl 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

srl sposta i bit verso destra, l'inverso di ciò che fa sll. Le lettere stanno per shift right logical (scorrimento logico a destra). Questa forma prende i bit di rs1, li sposta a destra del numero indicato in rs2 e memorizza il risultato in rd.

srl rd, rs1, rs2

Tutti i bit spinti oltre l'estremità destra vengono persi, e degli 0 riempiono le posizioni liberate a sinistra.

Questo riempimento con zeri spiega la parola logical. Uno scorrimento a destra dimezza un valore, quindi uno scorrimento di 1 divide per 2 e uno scorrimento di 3 divide per 8. Il resto viene scartato, coerentemente con la divisione intera. srl divide rapidamente un numero senza segno per una potenza di due.

Esistono due istruzioni di scorrimento a destra, e la differenza sta in ciò che viene inserito nei bit alti svuotati. srl vi mette degli 0. La sua controparte sra copia il bit di segno in quelle posizioni, il che preserva il segno dei numeri negativi. Scegli srl per un pattern di bit grezzo o un valore che non può essere negativo. Su un valore con segno che può essere negativo, srl produce un grande numero positivo, e sra è l'istruzione corretta in quel caso.

Secondo il manuale RISC-V, il conteggio dello scorrimento occupa i 5 bit bassi del registro rs2. Questi 5 bit coprono da 0 a 31 posizioni, quindi i bit rimanenti di rs2 vengono ignorati. Il manuale chiama srl uno scorrimento logico a destra, che inserisce zeri in cima.

Quando il conteggio dello scorrimento è una costante, usa la forma immediata srli.

Esempio

li t0, -8
li t1, 1
srl t2, t0, t1   # t2 = 2147483644 (zero-filled)