You are on page 1of 9

NOMBRE:

JORGE DAVID YAÑEZ GONZALEZ.


ZULMA MARIELA GONZALEZ RAMOS.

CATEDRATICO:
ING. OMAR VEGA ARRIAGA.

MATERIA:
SOFTWARE DE SISTEMAS.

CARRERA:
LIC. EN INFORMATICA. TURNO NOCTURNO.

FECHA:
13/ABRIL/2008.

1 JORGE DAVID YAÑEZ GONZALEZ.


ZULMA MARIELA GONZALEZ RAMOS.
INSTRUCCIONES DE SALTO.

Saltos incondicionales y condicionales.

A veces un programa debe cambiar el flujo del programa


en forma incondicional o bajo una condición (Para tomar
una decisión), por lo tanto debe haber instrucciones que
permitan cambiar el flujo de un programa sin ningún
requisito, o en caso de que una condición se cumpla.
Existen instrucciones para éste propósito. Son las
instrucciones de saltos incondicionales y condicionales,
que saltan a un determinado punto si se cumpla la
condición.

2 JORGE DAVID YAÑEZ GONZALEZ.


ZULMA MARIELA GONZALEZ RAMOS.
Saltos incondicionales.

Empecemos por el salto sin condiciones, con el que


podremos cambiar el control a cualquier punto del
programa.

Sería como el “Goto” del Basic, simplemente transferir el


control a otro punto del programa. La orden es

JMP (de Jump, salto)

Si record is a ‚estas alturas los registros CS: IP, se


podrá ver que‚ es lo que hace realmente la instrucción, y
no es mas que incrementar o decremento IP para llegar a
la zona del programa a la que queremos transferir el
control (IP es el Offset que indica la zona de memoria
que contiene la siguiente instrucción a ejecutar, y CS el
segmento)

El formato mas sencillo para el salto sería JMP 03424h,


lo que saltaría a esa zona.

Pero es digamos que “algo pesado” calcular en que‚


dirección va a estar esa instrucción, con lo que
utilizaremos etiquetas.

La única instrucción que existe para éste fin es JMP


(Abreviatura de JUMP, que significa en inglés SALTAR).
La sintaxis es la siguiente:

3 JORGE DAVID YAÑEZ GONZALEZ.


ZULMA MARIELA GONZALEZ RAMOS.
JMP XXXXXXXX: Es la ubicación de la instrucción en
donde se continuará el programa (A partir de ésta se
ejecutan las siguientes).
Ejemplo:
XXXX: 0100 MOV AX, 1000
XXXX: 0103 JMP 0107
XXXX: 0105 XOR AX, AX
XXXX: 0107 INT 20
En éste caso al ejecutarse la instrucción de salto
incondicional (JMP), se continúa la ejecución a partir de
la instrucción (INT 20h), no ejecutándose la instrucción
XOR (Ésta instrucción realiza la operación XOR de el
operando 2 sobre el operando 1) que provocaría el
borrado de registro AX (Que provocaría que AX tome el
valor 0), si se ejecuta.
Es decir, se ejecutan las siguientes instrucciones:
MOV AX, 1000
JMP 0107
INT 20
No se ejecuta "XOR AX, AX" por el salto incondicional.
El operando puede ser una dirección constante (Por
ejemplo 0107), un salto a nivel de offset, también puede
ser un salto largo (Que cambie los valores de los
registros CS e IP), (Por ejemplo FFFF: 0000, que salta al
ROM BIOS).

4 JORGE DAVID YAÑEZ GONZALEZ.


ZULMA MARIELA GONZALEZ RAMOS.
También puede ser el valor de un registro, por ejemplo:
JMP DI
En éste caso salta a la instrucción apuntada por DI.
También puede ser un valor apuntado por un registro
puntero, por ejemplo:
JMP [SI]
En éste caso salta a la instrucción apuntada por el valor
apuntado por SI.
El operando puede ser cualquier direccionamiento válido
(Puede ser cualquiera de los direccionamientos utilizados
en el operando origen de la instrucción MOV, explicados
anteriormente).

5 JORGE DAVID YAÑEZ GONZALEZ.


ZULMA MARIELA GONZALEZ RAMOS.
Saltos Condicionales.

Record is aquel IF-THEN-ELSE, o el FOR, o el WHILE-


DO.
Bien, pues aquí esta lo que suple a estas instrucciones en
lenguaje ensamblador. Se basan completamente en los
flags, pero están simplificados de tal manera que no
harán falta saberlos de memoria para poder hacerlos.
Los saltos podrían resumirse en un modo “Basic” de la
manera IF-THEN-GOTO de tal manera que cuando se
cumple una condición se salta a un sitio determinado.

Son similares a JMP en la sintaxis, pero la diferencia es


el nombre.
Las instrucciones son las siguientes:
JE o JZ: Salta si está prendido el bit cero del registro
de banderas.
Objetivo: Saltar si la última comparación realizada da
igual.
JA o JNBE: Salta si el bit carry (CF) o el bit cero (ZF)
del registro de banderas está desactivado.
Objetivo: Saltar si la última comparación realizada con
números naturales da mayor.
JB o JNAE: Salta si CF está activada.
Objetivo: Saltar si la última comparación realizada con
números naturales da menor.
JG o JNLE: Salta si ZF es cero o si OF y SF son iguales.

6 JORGE DAVID YAÑEZ GONZALEZ.


ZULMA MARIELA GONZALEZ RAMOS.
Objetivo: Saltar si la última comparación realizada con
números enteros da mayor.
JL o JNGE: Saltar si SF es diferente a OF
Objetivo: Saltar si la última comparación realizada con
números enteros da menor.
JC: Saltar si CF está prendida
Objetivo: Saltar si hay acarreo
JO: Saltar si OF está prendido
Objetivo: Saltar si hay desbordamiento
JP: Saltar si PF está prendido
Objetivo: Saltar si hay paridad
JS: Saltar si SF está prendido
Objetivo: Saltar si es negativo
JNE o JNZ: Comportamiento inverso a JE o JZ
JNA o JBE: Comportamiento inverso a JA o JNBE
JNB o JAE: Comportamiento inverso a JB o JNAE
JNG o JLE: Comportamiento inverso a JG o JNLE
JNL o JGE: Comportamiento inverso a JL o JNGE
JNC: Comportamiento inverso a JC
JNO: Comportamiento inverso a JO
JNP o JPO: Comportamiento inverso a JP
JNS: Comportamiento inverso a JS
Hay otras instrucciones que hacen saltos condicionales,
pero que no necesitan la instrucción CMP, son las
siguientes:

7 JORGE DAVID YAÑEZ GONZALEZ.


ZULMA MARIELA GONZALEZ RAMOS.
JCXZ: Salta si el registro CX es cero.
LOOP: Decremento CX, restándole 1 y salta si CX es
distinto de cero.
Objetivo: Hacer un bucle, utilizando como contador CX
LOOPE: Decremento CX en 1 y salta si CX es distinto de
cero y ZF está prendido.
Objetivo: Hacer un bucle, utilizando como contador CX y
terminar si el contador llega a cero, o se apaga el bit
cero.
LOOPNE: Decremento CX en 1 y salta si ZF está
prendido
Objetivo: Hacer un bucle que siga funcionando hasta que
se apague el bit Cero.
La sintaxis de éstas instrucciones son similares a la
instrucción JMP, lo único que cambia es el nombre.

8 JORGE DAVID YAÑEZ GONZALEZ.


ZULMA MARIELA GONZALEZ RAMOS.
Saltos lejanos y cortos.

Ahora algo sobre los saltos lejanos, cercanos y cortos.


El salto corto se realiza entre el punto en el que se esta
y +127 o −128, o sea que la cantidad que se puede
contener en un byte con signo. A veces es necesario
indicar que se trata de salto corto, cercano o lejano.

El salto cercano se realiza contando como distancia el


contenido de dos bytes, o que el rango sería desde
32767 a −32768 bytes de distancia.
Y el lejano se realiza contando como distancia el
contenido de cuatro bytes, y,… paso de calcular la
distancia.

Por ejemplo: es incorrecto que haya en la dirección 100h


una instrucción que diga JMP SHORT 500h, ya que la
distancia no corresponde a un salto cortó. Además el
salto dependiendo de que sea cercano, corto o largo se
codifica de manera diferente en modo hexadecimal.

9 JORGE DAVID YAÑEZ GONZALEZ.


ZULMA MARIELA GONZALEZ RAMOS.

You might also like