Saltos en Ensamblador
JUMP es una instrucción que se escribe JMP y su propósito es hacer saltos en el código
|
Los saltos son instrucciones que producen un cambio en la ejecución del programa, como en las funciones o métodos que se utilizan en los lenguajes de alto nivel.
En el caso de JMP es un salto INCONDICIONAL que salta hasta la etiqueta destino en forma automática, esto quiere decir que no se ocupa cumplir ningún tipo de condición, entonces se utiliza para desviar el flujo de un programa sin tomar en cuenta condiciones, es la única instrucción dentro del marco "incondicional" de saltos, ya que el resto de ellos es condicionado a alguna variable o registro.
Hablando de forma más técnica: Este salto puede ser tanto lejano como cercano, y la dirección puede venir dada en valor inmediato (generalmente mediante una etiqueta) o en memoria. Un salto cercano tiene lugar dentro del mismo segmento (llamado también salto intrasegmento por este motivo), cargando IP(Indica dirección de memoria donde esta la instrucción que se ejecuta) con el nuevo offset. Los saltos lejanos cambiar el valor tanto de IP (EIP en modo protegido) como de CS (Code Segment). El tipo de salto se puede indicar mediante los prefijos near o far en cada caso.
Sintaxis para salto Para poder realizar saltos con JMP es importante tener etiquetas en nuestro codigo, que son pequeños segmentos con nombre a los que podremos dirigirnos con el nombre de la etiqueta, de tal forma que el salto queda escrito así:
Al ver el ejemplo anterior resulta interesante pensar que en ensamblador no existen las estructuras condicionales que hay en lenguajes de alto nivel (IF, FOR, DO, WHILE, etc) pero mediante Saltos (Condicionales e Incondicionales) es posible obtener el mismo funcionamiento, el hecho de que no estén de forma implícita en una palabra que manda a llamar la función solo quiere decir que nosotros tenemos que construir el algoritmo.
Entonces no tenemos estructuras condicionales pero si tenemos muchas funciones de Saltos Condicionados, la diferencia principal es que estos siempre usan una instrucción llamada CMP (de Comparar) y dependiendo lo que deseemos utilizaremos un salto especifico, estas son mas de 30 instrucciones de salto condicional (A excepción de JMP que solo esta haciendo acto de presencia representando los saltos incondicionales)
Estos son los saltos más usados:
Hablando de forma más técnica: Este salto puede ser tanto lejano como cercano, y la dirección puede venir dada en valor inmediato (generalmente mediante una etiqueta) o en memoria. Un salto cercano tiene lugar dentro del mismo segmento (llamado también salto intrasegmento por este motivo), cargando IP(Indica dirección de memoria donde esta la instrucción que se ejecuta) con el nuevo offset. Los saltos lejanos cambiar el valor tanto de IP (EIP en modo protegido) como de CS (Code Segment). El tipo de salto se puede indicar mediante los prefijos near o far en cada caso.
Sintaxis para salto Para poder realizar saltos con JMP es importante tener etiquetas en nuestro codigo, que son pequeños segmentos con nombre a los que podremos dirigirnos con el nombre de la etiqueta, de tal forma que el salto queda escrito así:
- JMP <Nombre de Etiqueta>
- .model small
- .stack
- datos SEGMENT 'data';Crear Segmento DATOS
- M1 db ' Mensaje ETIQUETA 1 / SALTO #2 ',10,13,'$'
- M2 db ' Mensaje ETIQUETA 2 / SALTO #1 ',10,13,'$'
- datos ENDS
- codigo SEGMENT 'code' ;Crear Segmento de CODIGO
- assume CS:codigo, DS:datos
- .startup
- JMP ETIQUETA 2
- ETIQUETA 1
- mov ax, seg datos
- mov ds, ax
- mov dx, offset M1
- mov ah,09h
- int 21h
- JMP SALIDA
- ETIQUETA 2
- mov ax, seg datos
- mov ds, ax
- mov dx, offset M2
- mov ah,09h
- int 21h
- JMP ETIQUETA 1
- SALIDA:
- mov ax,4c00h
- int 21h
- .exit
- codigo ENDS
- end
Al ver el ejemplo anterior resulta interesante pensar que en ensamblador no existen las estructuras condicionales que hay en lenguajes de alto nivel (IF, FOR, DO, WHILE, etc) pero mediante Saltos (Condicionales e Incondicionales) es posible obtener el mismo funcionamiento, el hecho de que no estén de forma implícita en una palabra que manda a llamar la función solo quiere decir que nosotros tenemos que construir el algoritmo.
Entonces no tenemos estructuras condicionales pero si tenemos muchas funciones de Saltos Condicionados, la diferencia principal es que estos siempre usan una instrucción llamada CMP (de Comparar) y dependiendo lo que deseemos utilizaremos un salto especifico, estas son mas de 30 instrucciones de salto condicional (A excepción de JMP que solo esta haciendo acto de presencia representando los saltos incondicionales)
Estos son los saltos más usados:
- JMP - Salto incondicional Directo
- JE -Salto por Igual
- JNE - Salto por NO igual
- JG - Salto por Mayor
- JNG - Salto por NO Mayor
- JGE - Salto por Mayor Igual
- JNGE - Salto por NO Mayor Igual
- JL - Salto por Menor
- JNL - Salto por No Menor
- JLE - Salto por Menor Igual
- JNLE - Salto por NO menor Igual
- JS - Salto Negativo
Al no saber si entraremos a ese tema, dejo la siguiente sección llena de páginas en las que podremos encontrar mucha información respecto al tema, así como ejemplos, sintaxis y teoría.
CAPÍTULO II: REPITE CONMIGO. TENGO UN 8086, TENGO 8086..
CAPÍTULO VI: JUEGO DE INSTRUCCIONES DEL 8086 ¡Mamá, ya sé sumar!
Programación en Lenguaje Ensamblador: Primeros Pasos
Programación en MASM: Saltos y Bucles
Lectura recomendada en Computadora, Si es en Navegador de Celular hay que habilitar la opción: "SITIO DE ESCRITORIO" para una visualización correcta c:
ResponderBorrarINFORMACIÓN MUY ÚTIL PARA EL MOMENTO ;)
ResponderBorrar