Volver a la página principal
viernes 25 octubre 2024
68

Cómo usar instrucciones de salto en ensamblador para controlar el flujo del programa

¿Qué son las instrucciones de salto en ensamblador?

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

Instrucciones de salto incondicional

Las instrucciones de salto incondicional redirigen el flujo del programa directamente a una nueva ubicación, sin evaluar ninguna condición.

  • JMP: Salto incondicional a una etiqueta o dirección.

Ejemplo de uso de JMP:

JMP etiqueta   ; Salta directamente a la etiqueta "etiqueta"

etiqueta:
    ; Código ejecutado después del salto

Instrucciones de salto condicional

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.

Instrucciones comunes de salto condicional:

  • JE / JZ: Salta si es igual o si el resultado es cero (Jump if Equal / Jump if Zero).
  • JNE / JNZ: Salta si no es igual o si el resultado no es cero (Jump if Not Equal / Jump if Not Zero).
  • JG / JNLE: Salta si es mayor (Jump if Greater).
  • JL / JNGE: Salta si es menor (Jump if Less).
  • JGE: Salta si es mayor o igual (Jump if Greater or Equal).
  • JLE: Salta si es menor o igual (Jump if Less or Equal).

Ejemplo básico de salto condicional:

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.

Saltos en bucles

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.

Ejemplo de bucle simple:

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.

Etiquetas:
assembly
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer