jalr
lyszt.net tratta jalr e altre istruzioni RISC-V in modo più dettagliato.
Formato di codifica
Descrizione
jalr appartiene alla stessa famiglia di jal, con la r che sta per registro. Entrambe le istruzioni saltano e memorizzano un indirizzo di ritorno, come descritto nella pagina jal. La differenza è la destinazione del salto. jal salta a un'etichetta fissata quando il programma viene scritto, mentre jalr salta a un indirizzo contenuto in un registro, il che consente di calcolare la destinazione in fase di esecuzione.
Questo è ciò che consente a una funzione di ritornare. Il chiamante inserisce un indirizzo di ritorno nel registro ra, e la funzione ritorna usando jalr per raggiungere l'indirizzo in ra. L'istruzione ret è un jalr verso ra.
La stessa capacità si applica ogni volta che la destinazione è sconosciuta in anticipo. Copre le chiamate a una funzione il cui indirizzo è stato passato, e la selezione tra routine elencate in una tabella di indirizzi, che è il modo in cui una grande istruzione switch o un interprete effettua il dispatch.
Secondo il manuale RISC-V, jalr aggiunge l'immediato a 12 bit con estensione del segno al registro rs1, quindi cancella il bit meno significativo del risultato. Memorizza l'indirizzo dell'istruzione successiva, pc più 4, in rd, e x0 può servire come destinazione quando non è necessario un indirizzo di ritorno. Un lui seguito da jalr raggiunge qualsiasi indirizzo assoluto a 32 bit, e un auipc seguito da jalr raggiunge qualsiasi indirizzo relativo al pc a 32 bit. Entrambe le istruzioni di salto sollevano un'eccezione se l'indirizzo di destinazione non è allineato a un confine di quattro byte.
Il formato di jalr appare di seguito. Salta all'indirizzo nel registro rs più un piccolo offset opzionale, e memorizza l'indirizzo di ritorno in rd.
jalr rd, rs, offset
Come con jal, il registro che scrive viene sovrascritto, quindi vale la stessa attenzione nel preservare ra.
Esempio
la t0, target jalr ra, t0, 0 # jump to target; ra holds the return address
Riferimenti
- [1]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.5.1, Unconditional Jumps, page 30.
- [2]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4.1, Integer Register-Immediate Instructions, pages 28 to 29.
