jr
pseudolyszt.net tratta jr e altre istruzioni RISC-V in modo più dettagliato.
Descrizione
jr salta a un indirizzo memorizzato in un registro. Il nome sta per jump register (salto a registro). j salta a un'etichetta fissa scritta nel codice. jr salta all'indirizzo che un registro contiene, che il programma determina mentre viene eseguito. Non salva alcun indirizzo di ritorno.
jr è una pseudoistruzione per la riga sottostante, un salto a registro che scarta l'indirizzo di ritorno (vedi jalr).
jalr zero, rs, 0
Una tabella di salto è un array in memoria che contiene gli indirizzi di diverse routine, e jr viene usato con essa. Per scegliere la routine numero i, il programma calcola il suo slot nella tabella, carica l'indirizzo memorizzato lì in un registro e usa jr per saltarvi. Una ricerca e un salto sostituiscono una lunga serie di confronti (è il caso 0, il caso 1, il caso 2 e così via), qualunque sia il numero di casi. Le istruzioni switch dense e il ciclo interno di un interprete effettuano il dispatch in questo modo.
Il manuale RISC-V codifica i salti indiretti incondizionati semplici come un jalr con rd impostato su x0. Osserva che jalr non tratta il suo immediato come un multiplo di 2 byte, a differenza dei salti condizionali, e che la maggior parte degli usi di jalr ha un immediato zero o viene dopo un lui o un auipc.
Il ritorno da una funzione è un salto all'indirizzo in ra, quindi ret è jr ra sotto un altro nome. Il gruppo delle istruzioni di salto differisce in base a da dove proviene l'indirizzo e se viene salvato un indirizzo di ritorno.
Si espande in
jalr zero, rs, 0
L'assembler sostituisce questa pseudoistruzione con la o le istruzioni reali elencate sopra.
Esempio
la t0, target jr t0 # jump to the address held in t0
