j
pseudolyszt.net cubre j y otras instrucciones RISC-V con más detalle.
Descripción
j realiza el salto más simple: siempre transfiere el control a una etiqueta, sin ninguna condición asociada. Una instrucción de bifurcación transfiere el control solo cuando una comparación tiene éxito. La sintaxis es j label.
Este es un salto incondicional, también conocido como goto. Los bucles y los bloques if/else dependen de él. Un bucle básico coloca una bifurcación condicional al principio para decidir cuándo salir, ejecuta el cuerpo del bucle y termina con un j que regresa al principio para la siguiente pasada. Sin ese salto, la ejecución cae fuera del final y el bucle nunca se repite. En un if y else, un j al final del bloque if salta por encima del bloque else, de modo que solo se ejecuta uno de los dos bloques.
j no registra una dirección de retorno, lo que lo distingue de una llamada a función. Usa j para moverte dentro de tu código, ya sea para bucles o para saltar un bloque, y usa call cuando la ejecución deba regresar. El factor decisivo es si se necesita un retorno.
El manual de RISC-V codifica los saltos incondicionales simples como un jal con rd establecido en x0. Afirma que este salto siempre debe usarse para bifurcaciones incondicionales en lugar de una bifurcación condicional cuya condición sea siempre verdadera. Los saltos también son relativos al pc, cubren un rango mucho más amplio que las bifurcaciones y dejan intactas las tablas de predicción de bifurcaciones condicionales.
j es una pseudoinstrucción para la línea de abajo.
jal zero, label
Este es un salto y enlace que escribe la dirección de retorno en el registro zero, que la descarta, dejando solo el salto. El ejemplo salta de vuelta al principio de un bucle.
Se expande a
jal zero, label
El ensamblador reemplaza esta pseudoinstrucción con la instrucción o instrucciones reales enumeradas arriba.
Ejemplo
j loop # go back to the top of the loop
Referencias
- [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.
