jrpseudo

jr

pseudo
Assembly RISC-V Riferimento

lyszt.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