NOMBRE:
JORGE DAVID YAÑEZ GONZALEZ. ZULMA MARIELA GONZALEZ RAMOS.
CATEDRATICO: ING. OMAR VEGA ARRIAGA.
MATERIA:
SOFTWARE DE SISTEMAS.
CARRERA: LIC. EN INFORMATICA.
FECHA:
13/ABRIL/2008.
1 JORGE DAVID YAÑEZ GONZALEZ.
ZULMA MARIELA GONZALEZ RAMOS.
TURNO NOCTURNO.
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 WHILEDO. 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.