A veces un programa debe cambiar el flujo del programa en forma incondicional o bajo una condicin (Para tomar una decisin), por lo tanto debe haber instrucciones que permitan cambiar el flujo de un programa sin ningn requisito, o en caso de que una condicin se cumpla. Eisten instrucciones para !ste propsito. "on las instrucciones de saltos incondicionales # condicionales, que saltan a un determinado punto si se cumpla la condicin. Saltos incondicionales. Empecemos por el salto sin condiciones, con el que podremos cambiar el control a cualquier punto del programa. "er$a como el %&oto' del (asic, simplemente transferir el control a otro punto del programa. )a orden es *+P (de *ump, salto) "i record is a ,estas alturas los registros -". /P, se podr0 ver que, es lo que hace realmente la instruccin, # no es mas que incrementar o decremento /P para llegar a la 1ona del programa a la que queremos transferir el control (/P es el 2ffset que indica la 1ona de memoria que contiene la siguiente instruccin a ejecutar, # -" el segmento) El formato mas sencillo para el salto ser$a *+P 34565h, lo que saltar$a a esa 1ona. Pero es digamos que %algo pesado' calcular en que, direccin va a estar esa instruccin, con lo que utili1aremos etiquetas. )a nica instruccin que eiste para !ste fin es *+P (Abreviatura de *7+P, que significa en ingl!s "A)8A9). )a sintais es la siguiente. *+P ::::::::. Es la ubicacin de la instruccin en donde se continuar0 el programa (A partir de !sta se ejecutan las siguientes). Ejemplo. ::::. 3;33 +2< A:, ;333 ::::. 3;34 *+P 3;3= ::::. 3;3> :29 A:, A: ::::. 3;3= /?8 63 En !ste caso al ejecutarse la instruccin de salto incondicional (*+P), se contina la ejecucin a partir de la instruccin (/?8 63h), no ejecut0ndose la instruccin :29 (@sta instruccin reali1a la operacin :29 de el operando 6 sobre el operando ;) que provocar$a el borrado de registro A: (Aue provocar$a que A: tome el valor 3), si se ejecuta. Es decir, se ejecutan las siguientes instrucciones. +2< A:, ;333 *+P 3;3= /?8 63 ?o se ejecuta B:29 A:, A:B por el salto incondicional. El operando puede ser una direccin constante (Por ejemplo 3;3=), un salto a nivel de offset, tambi!n puede ser un salto largo (Aue cambie los valores de los registros -" e /P), (Por ejemplo CCCC. 3333, que salta al 92+ (/2"). 8ambi!n puede ser el valor de un registro, por ejemplo. *+P D/ En !ste caso salta a la instruccin apuntada por D/. 8ambi!n puede ser un valor apuntado por un registro puntero, por ejemplo. *+P E"/F 1 JORGE DAVID YAEZ GONZALEZ. ZULMA MARIELA GONZALEZ RAMOS. En !ste caso salta a la instruccin apuntada por el valor apuntado por "/. El operando puede ser cualquier direccionamiento v0lido (Puede ser cualquiera de los direccionamientos utili1ados en el operando origen de la instruccin +2<, eplicados anteriormente). Saltos Condicionales. 9ecord is aquel /CG8HE?GE)"E, o el C29, o el IH/)EGD2. (ien, pues aqu$ esta lo que suple a estas instrucciones en lenguaje ensamblador. "e basan completamente en los flags, pero est0n simplificados de tal manera que no har0n falta saberlos de memoria para poder hacerlos. )os saltos podr$an resumirse en un modo %(asic' de la manera /CG8HE?G&282 de tal manera que cuando se cumple una condicin se salta a un sitio determinado. "on similares a *+P en la sintais, pero la diferencia es el nombre. )as instrucciones son las siguientes. *E o *J. "alta si est0 prendido el bit cero del registro de banderas. 2bjetivo. "altar si la ltima comparacin reali1ada da igual. *A o *?(E. "alta si el bit carr# (-C) o el bit cero (JC) del registro de banderas est0 desactivado. 2bjetivo. "altar si la ltima comparacin reali1ada con nmeros naturales da ma#or. *( o *?AE. "alta si -C est0 activada. 2bjetivo. "altar si la ltima comparacin reali1ada con nmeros naturales da menor. *& o *?)E. "alta si JC es cero o si 2C # "C son iguales. 2bjetivo. "altar si la ltima comparacin reali1ada con nmeros enteros da ma#or. *) o *?&E. "altar si "C es diferente a 2C 2bjetivo. "altar si la ltima comparacin reali1ada con nmeros enteros da menor. *-. "altar si -C est0 prendida 2bjetivo. "altar si ha# acarreo *2. "altar si 2C est0 prendido 2bjetivo. "altar si ha# desbordamiento *P. "altar si PC est0 prendido 2bjetivo. "altar si ha# paridad *". "altar si "C est0 prendido 2bjetivo. "altar si es negativo *?E o *?J. -omportamiento inverso a *E o *J *?A o *(E. -omportamiento inverso a *A o *?(E *?( o *AE. -omportamiento inverso a *( o *?AE *?& o *)E. -omportamiento inverso a *& o *?)E *?) o *&E. -omportamiento inverso a *) o *?&E *?-. -omportamiento inverso a *- *?2. -omportamiento inverso a *2 *?P o *P2. -omportamiento inverso a *P *?". -omportamiento inverso a *" Ha# otras instrucciones que hacen saltos condicionales, pero que no necesitan la instruccin -+P, son las siguientes. *-:J. "alta si el registro -: es cero. )22P. Decremento -:, rest0ndole ; # salta si -: es distinto de cero. 2bjetivo. Hacer un bucle, utili1ando como contador -: )22PE. Decremento -: en ; # salta si -: es distinto de cero # JC est0 prendido. 2bjetivo. Hacer un bucle, utili1ando como contador -: # terminar si el contador llega a cero, o se apaga el bit cero. )22P?E. Decremento -: en ; # salta si JC est0 prendido 2bjetivo. Hacer un bucle que siga funcionando hasta que se apague el bit -ero. )a sintais de !stas instrucciones son similares a la instruccin *+P, lo nico que cambia es el nombre. Saltos lejanos y cortos. 2 JORGE DAVID YAEZ GONZALEZ. ZULMA MARIELA GONZALEZ RAMOS. Ahora algo sobre los saltos lejanos, cercanos # cortos. El salto corto se reali1a entre el punto en el que se esta # K;6= o L;6M, o sea que la cantidad que se puede contener en un b#te con signo. A veces es necesario indicar que se trata de salto corto, cercano o lejano. El salto cercano se reali1a contando como distancia el contenido de dos b#tes, o que el rango ser$a desde 46=N= a L46=NM b#tes de distancia. O el lejano se reali1a contando como distancia el contenido de cuatro b#tes, #,P paso de calcular la distancia. Por ejemplo. es incorrecto que ha#a en la direccin ;33h una instruccin que diga *+P "H298 >33h, #a que la distancia no corresponde a un salto cort. Adem0s el salto dependiendo de que sea cercano, corto o largo se codifica de manera diferente en modo headecimal. 3 JORGE DAVID YAEZ GONZALEZ. ZULMA MARIELA GONZALEZ RAMOS.