Las instrucciones de salto, también conocidas como branching o jumps, son instrucciones que permiten cambiar la secuencia natural de ejecución de un programa. En lugar de ejecutar las instrucciones de manera lineal, estas instrucciones redirigen el flujo a una dirección de memoria específica o etiqueta definida.
Existen dos tipos principales de saltos:
1. Saltos incondicionales: Cambian el flujo del programa sin evaluar ninguna condición.
2. Saltos condicionales: Cambian el flujo del programa solo si se cumple una condición determinada (generalmente comparaciones entre valores).
Las instrucciones de salto incondicional redirigen el flujo del programa directamente a una nueva ubicación, sin evaluar ninguna condición.
Ejemplo de uso de JMP:
JMP etiqueta ; Salta directamente a la etiqueta "etiqueta"
etiqueta:
; Código ejecutado después del salto
Las instrucciones de salto condicional dependen del resultado de una operación anterior, generalmente una comparación o una operación aritmética. Estas instrucciones verifican ciertos bits de los registros de estado (como el flag de cero o el flag de signo) para determinar si deben ejecutar el salto.
MOV AX, 5 ; Carga el valor 5 en AX
CMP AX, 10 ; Compara AX con 10
JE es_igual ; Salta a "es_igual" si AX es igual a 10
MOV BX, 20 ; Esta línea se ejecuta si AX no es igual a 10
JMP fin ; Salta al final del programa
es_igual:
MOV BX, 30 ; Esta línea se ejecuta si AX es igual a 10
fin:
; Continúa la ejecución normal
En este ejemplo, CMP compara el contenido del registro AX con el valor 10. Si AX es igual a 10, el salto JE lleva el flujo a la etiqueta es_igual; si no, continúa ejecutando el siguiente código y luego salta a fin.
Las instrucciones de salto son esenciales para implementar bucles. Por ejemplo, utilizando JNZ (Jump if Not Zero), se puede repetir un bloque de código hasta que una condición sea falsa.
MOV CX, 5 ; Inicializa CX con 5
bucle:
; Código del bucle
DEC CX ; Decrementa CX
JNZ bucle ; Salta a "bucle" si CX no es cero
Este ejemplo continúa ejecutando el bloque de código mientras CX no sea cero, creando un bucle simple controlado por un contador.
Jorge García
Fullstack developer