jpseudo

j

pseudo
Assembly RISC-V Riferimento

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

Descrizione

j esegue il salto più semplice: trasferisce sempre il controllo a un'etichetta, senza alcuna condizione associata. Un'istruzione di diramazione trasferisce il controllo solo quando un confronto ha successo. La sintassi è j label.

Questo è un salto incondizionato, noto anche come goto. I cicli e i blocchi if/else si basano su di esso. Un ciclo di base mette una diramazione condizionale in cima per decidere quando uscire, esegue il corpo del ciclo e termina con un j che ritorna in cima per il passaggio successivo. Senza quel salto, l'esecuzione cade alla fine e il ciclo non si ripete mai. In un if ed else, un j alla fine del blocco if salta oltre il blocco else, così solo uno dei due blocchi viene eseguito.

j non registra un indirizzo di ritorno, il che lo distingue da una chiamata di funzione. Usa j per spostarti all'interno del tuo codice, sia per i cicli sia per saltare un blocco, e usa call quando l'esecuzione deve tornare. Il fattore decisivo è se è necessario un ritorno.

Il manuale RISC-V codifica i salti incondizionati semplici come un jal con rd impostato a x0. Afferma che questo salto dovrebbe essere sempre usato per le diramazioni incondizionate anziché una diramazione condizionale la cui condizione è sempre vera. I salti sono anche relativi al pc, coprono un intervallo molto più ampio rispetto alle diramazioni e lasciano intatte le tabelle di predizione delle diramazioni condizionali.

j è una pseudoistruzione per la riga seguente.

jal zero, label

Questo è un jump and link che scrive l'indirizzo di ritorno nel registro zero, che lo scarta, lasciando solo il salto. L'esempio salta indietro all'inizio di un ciclo.

Si espande in

jal zero, label

L'assembler sostituisce questa pseudoistruzione con la o le istruzioni reali elencate sopra.

Esempio

j loop   # go back to the top of the loop