j
pseudolyszt.net couvre j et d'autres instructions RISC-V plus en détail.
Description
j effectue le saut le plus simple : il transfère toujours le contrôle vers une étiquette, sans aucune condition attachée. Une instruction de branchement transfère le contrôle uniquement lorsqu'une comparaison réussit. La syntaxe est j label.
Il s'agit d'un saut inconditionnel, également appelé goto. Les boucles et les blocs if/else en dépendent. Une boucle de base place un branchement conditionnel en haut pour décider quand sortir, exécute le corps de la boucle, et se termine par un j qui revient en haut pour le passage suivant. Sans ce saut, l'exécution tombe à la fin et la boucle ne se répète jamais. Dans un if et else, un j à la fin du bloc if saute par-dessus le bloc else, de sorte qu'un seul des deux blocs s'exécute.
j n'enregistre pas d'adresse de retour, ce qui le distingue d'un appel de fonction. Utilisez j pour vous déplacer dans votre code, que ce soit pour des boucles ou pour sauter un bloc, et utilisez call lorsque l'exécution doit revenir. Le facteur décisif est de savoir si un retour est nécessaire.
Le manuel RISC-V encode les sauts inconditionnels simples comme un jal avec rd défini à x0. Il indique que ce saut doit toujours être utilisé pour les branchements inconditionnels plutôt qu'un branchement conditionnel dont la condition est toujours vraie. Les sauts sont également relatifs au pc, couvrent une plage beaucoup plus large que les branchements, et laissent les tables de prédiction de branchement conditionnel intactes.
j est une pseudo-instruction pour la ligne ci-dessous.
jal zero, label
Il s'agit d'un jump and link qui écrit l'adresse de retour dans le registre zero, qui la rejette, ne laissant que le saut. L'exemple revient au début d'une boucle.
Se développe en
jal zero, label
L'assembleur remplace cette pseudo-instruction par la ou les instructions réelles listées ci-dessus.
Exemple
j loop # go back to the top of the loop
Références
- [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.5.2, Conditional Branches, pages 31 to 32.
