Vous êtes sur la page 1sur 59

1.1. Lenguaje de Bajo Nivel.

Se denomina lenguaje mquina a la serie de datos que la parte fsica de la computadora o hardware, es capaz de interpretar. Una computadora digital o, mejor dicho, su parte fsica, slo distingue datos de tipo binario, es decir, constituidos por dos nicos valores a los que se denomina valor ! valor " ! que, fsicamente, se materializan con tensiones comprendidas entre ! #. voltios ! entre # ! $ voltios, respectivamente. %ara representar datos que contengan una informacin se utilizan una serie de unos ! ceros cu!o conjunto indica dicha informacin. &a informacin que hace que el hardware de la computadora realice una determinada actividad de llama instruccin. %or consiguiente una instruccin es un conjunto de unos ! ceros. &as instrucciones as formadas equivalen a acciones elementales de la m'quina, por lo que al conjunto de dichas instrucciones que son interpretadas directamente por la m'quina se denomina lenguaje mquina. (l lenguaje m'quina fue el primero que empleo el hombre para la programacin de las primeras computadoras. Una instruccin en lenguaje m'quina puede representarse de la siguiente forma)

"" "" " " " """" "" (sta secuencia es f'cilmente ejecutada por la computadora, pero es de difcil interpretacin, siendo aun mas difcil la interpretacin de un programa *conjunto de instrucciones+ escrito de esta forma. (sta dificultad hace que los errores sean frecuentes ! la correccin de los mismos costosa, cuando no imposible, al igual que la verificacin ! modificacin de los programas. &a anterior secuencia de dgitos binarios *bits+ puede indicar a la computadora que)

,,-raslade el contenido de la posicin de memoria . a la posicin de memoria /.00

Si lo vemos escrito de esta forma, lo entenderemos f'cilmente, !a que est' en nuestro lenguaje natural, pero la m'quina elemental ser' incapaz de entender nada. 1emos, pues, que la forma de indicar a la m'quina lo que debe hacer es totalmente diferente de la indicar a un ser humano lo mismo, por lo que deben emplearse sistemas de traduccin de una forma a otra.

/a se ha dicho que en un principio el programador empleaba directamente el lenguaje m'quina. (n este caso el traductor era el programador2 pero vimos tambi3n los problemas que esto causaba. 4on la pr'ctica en el manejo de la m'quina se ca! en la cuenta de que se podra utilizar la propia m'quina para a!udar en la traduccin de estos programas. (s decir, que si a una m'quina elemental se le dotaba de un programa, tambi3n elemental, que tradujera un nmero determinado de caracteres de caracteres alfab3ticos en una secuencia de unos ! ceros, se podra escribir un programa constituido por una secuencia de grupos de caracteres alfab3ticos, en la que cada uno de los grupos indicara una accin a realizar por el ordenador !, una vez escrito el programa, sera la propia m'quina la que pasara los grupos de caracteres a bits.

&as ventajas de esto son evidentes, !a que para el hombre resulta mas f'cil manipular grupos de caracteres ! la traduccin se hara de manera autom'tica. %or ejemplo, se podra escribir)

-56S&6765 "" " "" ,

""" "

(sto indicara que el contenido de la posicin "" " "" haba que pasarlo a la posicin """ " si se sabe que al grupo alfab3tico -56S&6765 le corresponde la secuencia de bits """" " ". &a m'quina traducira la anterior instruccin como)

"""" " " "" " ""

""" "

6l grupo alfab3tico se le denomina mnemotcnico, ! e8istir' un mnemot3cnico por cada instruccin. Se le da este nombre porque sirve para recordar con ma!or facilidad el conjunto de instrucciones de una determinada m'quina. 7e esta forma aparecieron los lenguajes ensambladores *6ssembler, en ingl3s+. %oco a poco, con el avance de la programacin *Software+, estas primeras ! sencillas a!udas se fueron haciendo m's complejas, permitiendo que, adem's de los mnemot3cnicos correspondientes a la operacin a realizar, se pudieran emplear otros para indicar, por ejemplo, los operandos. &a anterior instruccin se podra escribir de la siguiente forma)

-56S&6765 %9S:6 %9S:;

<ue nos resulta de m's f'cil comprensin.

-ambi3n se introdujo la posibilidad de indicar a la computadora la direccin de un salto en la secuencia de ejecucin de un programa mediante la utilizacin de etiquetas.

6 los programas que permiten pasar del programa escrito de esta manera *programa fuente, en ensamblador+ al lenguaje mquina tambi3n se les denomina normalmente ensambladores. (stos traductores, como !a se ha dicho, se fueron complicando cada vez m's para que la labor del programador fuera m's f'cil, inclu!endo los denominados directivos del ensamblador, que son rdenes o informaciones que el programador da al traductor, no instrucciones de lenguaje m'quina. 6un con todas estas sofisticaciones ! a!udas, el programador de lenguaje ensamblador debe conocer perfectamente el sistema fsico *=ardware+ de la m'quina con que trabaja, pues aunque emplee mnemot3cnicos, etiquetas, etc., 3stas sirven para indicar una posicin de memoria determinada, un registro o cualquier otra parte de la m'quina. %or eso se dice que el lenguaje ensamblador es un lenguaje de bajo nivel, es decir, ligado con el ,,hard00 concreto de una determinada m'quina. 6qu radica la diferencia importante con los lenguajes m's complejos, llamados de alto nivel, como el ;asic, %ascal, 4obol, etc., !a que en 3stos el programador no tiene porque reconocer el ,,hard00 de la m'quina. -rabaja con variables, constantes e instrucciones simblicas, ! es el traductor quien las transforma en las direcciones apropiadas.

1.2. VENTAJAS DE LOS LENGUAJES ENSAMBLADORES

(l corazn de la computadora es el microprocesador, 3ste maneja las necesidades aritm3ticas, de lgica ! de control de la computadora. (l microprocesador tiene su origen en la d3cada de los sesenta, cuando se dise>o el circuito integrado *?4 por sus siglas en ingles+ al combinar varios componentes electrnicos en un solo componente sobre un @chip@ de silicio. &os fabricantes colocaron este diminuto chip en un dispositivo parecido a un ciempi3s ! lo conectaron a un sistema en funcionamiento. 6 principios de los a>os setenta ?ntel introdujo el chip A A el cual, instalado en una computadora terminal, acompa>o a la primera generacin de microprocesadores. (n "BC# el A A evoluciono en el A A , un popular microprocesador de la segunda generacin para propsitos generales. (n "BCA ?ntel produjo la tercera generacin de procesadores A AD, para proporcionar alguna compatibilidad con el A A ! que representan un avance significativo de dise>o. 7espu3s, ?ntel desarrollo una variacin del A AD para ofrecer un dise>o sencillo ! compatibilidad con los dispositivos de entradaEsalida de ese momento. (ste nuevo procesador, el A AA, fue seleccionado por ?;F para su computadora personal en "BA". Una versin mejorada del A AA es el A "AA, ! versiones mejoradas del A AD, son los A "AD, A GAD, A HAD, A #AD ! el %entium, cada uno de ellos permite operaciones adicionales ! m's procesamiento. &a variedad de microcomputadoras tambi3n ocasiono un renovado inter3s en el lenguaje ensamblado, cu!o uso conlleva a diferentes ventajas)

Un programa escrito en el lenguaje ensamblador requiere considerablemente menos memoria ! tiempo de ejecucin que un programa escrito en los conocidos lenguajes de alto nivel, como %ascal ! 4. (l lenguaje ensamblador da a un programador la capacidad de realizar tareas mu! t3cnicas que serian difciles, si no es que imposibles de realizar en un lenguaje de alto nivel. (l conocimiento del lenguaje ensamblador permite una comprensin de la arquitectura de la maquina que ningn lenguaje de alto nivel puede ofrecer. 6unque la ma!ora de los especialistas en Software desarrolla aplicaciones en lenguajes de alto nivel, que son m's f'ciles de escribir ! de dar mantenimiento, una practica comn es recodificar en lenguaje ensamblador aquellas rutinas que han causado cuellos de botella en el procesamiento. &os programas residentes ! rutinas de servicio de interrupcin casi siempre son desarrollados en el lenguaje ensamblador.

&os lenguajes de alto nivel fueron dise>ados para eliminar las particularidades de una computadora especifica, mientras que un lenguaje ensamblador esta dise>ado para una computadora especifica, o, de manera m's correcta, para una familia especifica de microprocesadores.

6 continuacin se listan los requisitos para aprender el lenguaje ensamblador de la %4)

-ener acceso a una computadora personal de ?;F *cualquier modelo+ o una compatible. Una copia del sistema operativo FS:79S o %4:79S ! estar familiarizados con su uso. Una copia de un programa ensamblador. &as versiones de Ficrosoft son conocidas como F6SF ! <uicI6ssembler) -6SF es de ;orland ! 9%-6SF es de S!stem.

%ara el aprendizaje de lenguaje ensamblador no es necesario lo siguiente)

4onocimiento previo de un lenguaje de programacin, aunque tenerlo puede a!udarle a comprender algunos conceptos de programacin m's r'pido. 4onocimiento previo de electrnica o circuiteria. 2.1.1. UNIDAD ENTRAL DE !RO ESO.

&a 4%U constitu!e el cerebro de una computadora digital, pues realiza todas las operaciones aritm3ticas ! lgicas sobre los datos ! adem's controla todos los procesos que se desarrollan en la computadora. %or ejemplo, para que se ejecute un a instruccin, 3sta debe estar en el interior de la 4%U, concretamente en la U4 ! si ha! que realizar c'lculos, interviene la U6&. 1eamos como funciona cada una de ellas.

Unidad de

on"#ol.

%ara realizar su tarea la U4 necesita conocer, por un lado, la instruccin !, por otro, una serie de informaciones adicionales que deber' tener en cuenta para coordinar, de forma correcta, la ejecucin de la instruccin. (l resultado de la interpretacin de dichas informaciones son una serie de rdenes a los diferentes elementos de la computadora. &a U4 no emite todas las rdenes a la vez, sino siguiendo una determinada secuencia. %ara ello utiliza un elemento que le va indicando el instante en que debe ejecutar una determinada fase de la instruccin. 6 este elemento se le denomina 5eloj, ! se dice que sincroniza las acciones de la U42 cuanto m's r'pido marque el tiempo, m's r'pida ser' la ejecucin de la instruccin. Sin embargo, ha! un limite, !a que, si marca e8cesivamente r'pido, es posible que no puedan cumplir adecuadamente las rdenes de los diferentes elementos, por lo que se producir'n errores.

(n la figura G.G se esquematiza el conjunto de se>ales que utiliza la U4 ! las que genera. 4omo informaciones adicionales a las instrucciones podemos ver los impulsos de reloj ! los indicadores de estado. &os indicadores de estado son una serie de bits que se modifican segn resultados de las operaciones anteriores guardando una memoria histrica de los acontecimientos precedentes para que, en funcin de dichos acontecimientos, pueda la U4 tomar decisiones.

$igu#a 2.2. Se>ales que intervienen en la U4. &a unidad de control esta formada, b'sicamente por un elemento que interpreta las instrucciones ! varios elementos de memoria denominados registros. Uno de estos registros almacena la instruccin mientras el int3rprete est' traduciendo su significado, por lo que se denomina 5egistro de ?nstruccin *5?+. (l resto de las instrucciones permanecen en la memoria, esperando que les toque su turno de ejecucin. &a U4 por otra parte deber' conocer cu'l es la direccin de la pr8ima instruccin, para poder ir a buscarla una vez que finaliza la ejecucin de la instruccin en curso2 direccin que guarda el registro llamado 4ontador de %rograma *4%+. &os indicadores de estado est'n agrupados en un registro denominado 5egistro de (stado *5(+. &a Jigura G.H muestra los elementos que acabamos de nombrar.

$igu#a 2.%. (lementos b'sicos de la Unidad de 4ontrol. Unidad A#i"&'"i(o ) L*gi(a.

&a unidad 6ritm3tico : &gica *U6&+ es la encargada de realizar los c'lculos. &os datos sobre los que se realizan la operaciones se denominan operandos. 6l elemento encargado de ejecutar las operaciones se le denomina operador, ! esta formado por una serie de circuitos electrnicos que son capaces de sumar dos nmeros binarios o hacer las operaciones lgicas elementales) dis!uncin, conjuncin ! negacin2 incluso algunos operadores son tambi3n capaces de multiplicar, dividir ! realizar otras operaciones mas complejas.

%ara que el operador realice la operacin, los operandos se llevan a la U6& ! se guardan en unos registros denominados registros de trabajo. (l resultado de la operacin se guarda tambi3n en un registro antes de ser llevado a la memoria o a la Unidad de (ntradas ! Salidas. Jrecuentemente se utiliza un mismo registro para guardar uno de los operandos !, tambi3n, el resultado, denominado registro 6cumulador. (l operador, adem's de calcular el valor de la operacin, modifica el registro de estado segn el resultado de la operacin. 6s, si el resultado es un valor negativo, se modifica un bit de dicho registro, llamado bit negativo o bit K, poni3ndose a "2 por el contrario, el bit K permanecer' en estado mientras el contenido del acumulador no sea negativo. 7e igual forma indicara la U6& a la U4 si el resultado ha sido cero, o si ha producido algn acarreo, etc.

(n la figura G.# se muestran los elementos de la U6& ! las se>ales que intervienen.

+a, +a, U6& con tres registros) G para los operandos ! " para el resultado.

+-, +-, U6& con acumulador. $igu#a 2... (lementos ! se>ales de la 6U&.

2.1.2. UNIDAD DE MEMORIA !RIN I!AL.

&a memoria principal esta formada por un conjunto de unidades llamadas palabras. 7entro de cada una de estas palabras se guarda la informacin que constitu!e una instruccin o parte de ella *puede darse el caso de que una sola instruccin necesite varia palabras+, o un dato o parte de un dato *tambi3n un dato puede ocupar varias palabras+. 6 la cantidad de palabras que forman la F% se le denomina capacidad de memoria. 7e este modo, cuanto ma!or sea el numero de palabras ma!or ser' el numero de instrucciones ! datos que podr' almacenar la computadora. Una palabra esta formada a su vez de unidades mas elementales llamadas bits, del mismo modo que en el lenguaje natural una palabra esta formada por letras. 4ada bit solo puede guardar dos valores, el valor o el valor "2 por eso se dice que son elementos binarios. (l numero de bits que forman una palabra se llama longitud de palabra. %or regla general, las computadoras potentes tienen memorias con longitud de palabra grande, mientras que las computadoras peque>as tienen memorias con longitud de palabra menor. (n la figura G.$ se muestra como se puede estar organizada una Femoria %rincipal.

$igu#a 2./. 9rganizacin de una unidad de memoria.

&as palabras forman una matriz de " filas ! " columnas. &a primera palabra corresponder' con la direccin , la segunda con la ", ! la ultima, con la BB. &a capacidad de la memoria ser' de " L " M " palabras. -ambi3n se muestra la longitud de la palabra HA, que es de A bits, al igual que las dem's, ! la informacin que contiene, que es el valor binario " "" " .

&as palabras se distinguen entre si por la posicin que ocupan en la F%, ! se puede guardar una informacin ! luego recuperarla indicando el numero de dicha posicin. 6 los nmeros que se>alan las posiciones de memoria se les da el nombre de direcciones de memoria. &a accin de guardar una informacin en una palabra de la memoria se llama acceso de escritura, ! la accin de recuperarla, acceso de lectura. &os accesos son coordinados por la U4. &a secuencia de ordenes que debe generar la U4 se indica en la tabla G.".

(n la tabla G." *a+ se muestra un acceso de escritura. 9bs3rvese que la U4 debe indicar, adem's de la posicin donde se debe guardar el dato, el valor del dato ! las indicaciones de control que le digan a la memoria que se desea guardar el dato ! el momento en que debe iniciarse la operacin de escritura. (sta ultima orden la dar' la U4 cuando este segura de que los datos anteriores han llegado correctamente a la F%. 7espu3s de esta ultima orden, la U4 espera un tiempo para asegurar que se ha escrito la informacin en la F%. (n la tabla G." *b+ se muestra como se realiza un acceso de lectura. (n este caso, la U4 no indica el dato, puesto es precisamente lo que espera recibir. &os dem's pasos son id3nticos a los del acceso de escritura. 7esde que se inicia la secuencia hasta que finaliza transcurre un tiempo, denominado tiempo de acceso, cu!a duracin depende de la tecnologa con que esta fabricada la F%.

Ta-la 2.1. Secuencia de acceso a la memoria.

*a+ 6cceso de escritura.

*b+ 6cceso de lectura.

2.1.% UNIDAD DE ENTRADAS 0 SALIDAS.

/a se ha visto en las secciones precedentes como funcionan la 4%U ! la F%, pero puede decirse que es necesaria la comunicacin entre el interior de la computadora ! su entorno o periferia. (sta comunicacin se consigue a trav3s de dispositivos de mu! diversos tipos, como son) teclados, impresoras, pantallas, discos magn3ticos, etc. (s estos dispositivos se les conoce con el nombre gen3rico de perif3ricos. (n la figura G.D se muestran algunos perif3ricos conectados a la Unidad de (ES, la cual hace de intermediaria entre los perif3ricos ! la 4%U. &as flechas indican el sentido en que flu!e la informacin.

$igu#a 2.1. &a unidad de (ES hace de intermediaria entre la U4% ! los perif3ricos.

&a coordinacin de la comunicacin entre los perif3ricos ! la 4%U la realiza la Unidad de (ES. 9bs3rvese que esta no es un perif3rico sino un dispositivo que gestiona a los perif3ricos siguiendo las ordenes de la 4%U2 es decir, la Unidad de (ES recibe de la Unidad de 4ontrol informacin sobre el tipo de transferencia de datos que debe realizar *si es de entrada o de salida+ ! perif3rico que debe de utilizar2 si es de salida recibir' tambi3n el dato que debe enviar ! el momento de la operacin. (ntonces, la Unidad de (ES seleccionara el perif3rico ! ejecutara la operacin teniendo en cuanta las caractersticas propias de cada perif3rico. Una vez ejecutada la orden avisara a la U4 de la terminacin de la transferencia. 4ada perif3rico o parte de un perif3rico tendr' asignado un numero o direccin que servir' para identificarlo. 4uando la U4 quiera seleccionarlo enviara dicho numero a la Unidad de (ES.

%ara solucionar el problema de la imposibilidad de saber cuanto tiempo durara una transferencia de informacin con un perif3rico se han desarrollado diversas t3cnicas de comunicacin entre la 4%U ! los perif3ricos. &o mas sencillo es que la 4%U, cuando desee hacer una transferencia de informacin con un perif3rico, pregunte a la Unidad de (ES si dicho perif3rico se encuentra disponible. Si no lo esta,

debe repetir la pregunta una ! otra vez hasta obtener una respuesta afirmativa, en cu!o caso se inicia la transferencia de informacin. Si se desea obtener ma!or rendimiento del ordenador, se puede emplear otro m3todo que se denomina sincronizacin mediante interrupcin. &a caracterstica de este m3todo es que la 4%U, en lugar de dedicarse a preguntar a la Unidad de (ES por el perif3rico que desea utilizar, lo que hace es indicar a la Unidad de (ES que desea hacer una transferencia con el perif3rico, ! seguidamente, si no esta el perif3rico preparado, empieza otra tarea, olvid'ndose moment'neamente del perif3rico. 4uando este preparado, la Unidad de (ES indicara a la 4%U que puede realizarse la transferencia2 entonces, la 4%U interrumpir' la tarea que esta realizando ! atender' al perif3rico. 7e esta forma, la 4%U no pierde tiempo esperando al perif3rico.

2.1... INTER ONE2ION DE LAS UNIDADES $UN IONALES.

(n los apartados anteriores hemos visto las funciones que realiza cada unidad de la computadora, ! que se deben de comunicar entre ellas para pasarse informacin. (stas informaciones se transmiten en forma de se>ales el3ctricas !, por tanto, circulan a trav3s de conductores el3ctricos. /a sabemos que en un sistema digital las informaciones se encuentran codificadas en binario formando grupos de bits. 4ada bit de uno de estos grupos se suele enviar de una unidad a otra por un conductor diferente al del resto de los bits. 7e esta forma, si el grupo esta constituido por A bits, ser'n necesarios A conductores2 si lo forman "D bits, se emplearan "D conductores2 etc. Se hace as para ahorrar tiempo, !a que circulan todos los bits de un mismo grupo a la vez, cada uno por su conductor. 6 esta forma de enviar los datos se denomina transmisin en paralelo. 4uando la 4%U quiere leer o escribir en una determinada posicin de memoria, enviara la direccin, en paralelo, a la memoria por un conjunto de conductores el3ctricos al que se denomina bus de direcciones, !a que se utiliza e8clusivamente para enviar direcciones. 6s mismo, los datos ledos o los que se quieren escribir se trasladan mediante un conjunto de conductores el3ctricos denominado bus de datos. &as ordenes de la 4%U a la F% ! las respuestas de la F% a la 4%U son enviadas por un tercer conjunto de conductores llamado bus de control. (n la figura G.C se muestran las cone8iones de la 4%U con la F%. Se han dibujado en la figura G.C *a+ todos los conductores el3ctricos suponiendo que se emplean A hilos para el bus de datos, "D para el de direcciones ! H para el de control. (n la practica no se dibujan todos los hilos para simplificar las figuras ! se hace como en las figuras G.C *b+ ! G.C *c+.

*b+ ?ndicando sobre una lnea el nmero de conductores.

*a+ 5epresentando todos los hilos. *c+ ?ndicando el sentido de las informaciones. $igu#a 2.3. ?ntercone8iones entre la U4% ! la F%. (8isten varias formas de interconectar las unidades funcionales de la computadora entre si. Una de ellas emplea un nico conjunto de buses, como puede apreciarse en la figura G.A *a+, al que se conectan todas las unidades. (sto obliga a que, en un determinado instante, solo dos unidades puedan estar haciendo uso del mismo2 si ha! que enviar algo a la tercera unidad, se deber' esperar a que quede libre. &a principal ventaja de este sistema de intercone8in es su bajo costo, ! la principal desventaja, su ma!or lentitud. 6dem's, si se emplea el mismo bus de direcciones para indicar la de un perif3rico ! la de una posicin de memoria, no podr' coincidir el numero de ningn perif3rico con ninguna direccin de memoria2 si as lo hicieran, se producir'n errores al seleccionarse a la vez el perif3rico ! la posicin de memoria. %or lo tanto, se tendr' cuidado en asignar a los perif3ricos direcciones que no coincidan con las de la F%. (n estos casos se dice que los perif3ricos est'n mapeados en memoria, !a que la 4%U no distingue entre las transferencias a perif3ricos ! a F%.

9tra forma de interconectar las unidades de la computadora consiste en emplear conjuntos de buses diferentes para la Unidad de (ES ! la F%. 7e esta forma, aunque se encarece el sistema, se gana en velocidad ! se pueden emplear direcciones iguales para nombrar perif3ricos ! a posiciones de memoria. &a 4%U, si quiere seleccionar un perif3rico, utiliza el bus de la Unidad de (ES, ! si quiere seleccionar una posicin de memoria, utiliza el bus de memoria. (n este caso se dice que los perif3ricos no est'n mapeados en memoria. (n la figura G.A *b+ se muestra una posible cone8in con el bus mltiple.

*a+ (mpleando un solo conjunto de buses.

*b+ (mpleando dos conjuntos de buses diferentes. $igu#a 2.4. Jormas de intercone8in.

2.2. REGISTROS INTERNOS DEL !RO ESADOR.

&os registros del procesador se emplean para controlar instrucciones en ejecucin, manejar direccionamiento de memoria ! proporcionar capacidad aritm3tica. &os registros son direccionables por medio de un nombre. &os bits por convencin, se numeran de derecha a izquierda, como en)

... "$ "# "H "G "" "

B A C D $ # H G "

Regi5"#o5 de 5eg&en"o Un registro de segmento tiene "D bits de longitud ! facilita un 'rea de memoria para direccionamiento conocida como el segmento actual.

Regi5"#o S. (l 79S almacena la direccin inicial del segmento de cdigo de un programa en el registro 4S. (sta direccin de segmento, mas un valor de desplazamiento en el registro apuntador de instruccin *?%+, indica la direccin de una instruccin que es buscada para su ejecucin.

Regi5"#o DS. &a direccin inicial de un segmento de datos de programa es almacenada en el registro 7S. (n t3rminos sencillos, esta direccin, mas un valor de desplazamiento en una instruccin, genera una referencia a la localidad de un b!te especifico en el segmento de datos.

Regi5"#o SS. (l registro SS permite la colocacin en memoria de una pila, para almacenamiento temporal de direcciones ! datos. (l 79S almacena la direccin de inicio del segmento de pila de un programa en le registro SS. (sta direccin de segmento, mas un valor de desplazamiento en el registro del apuntador de pila *S%+, indica la palabra actual en la pila que esta siendo direccionada. Regi5"#o5 ES. 6lguna operaciones con cadenas de caracteres *datos de caracteres+ utilizan el registro e8tra de segmento para manejar el direccionamiento de memoria. (n este conte8to, el registro (S esta asociado con el registro 7? *ndice+. Un programa que requiere el uso del registro (S puede inicializarlo con una direccin de segmento apropiada. Regi5"#o5 $S 6 GS. Son registros e8tra de segmento en los procesadores A HAD ! posteriores.

Regi5"#o5 de 7#o7*5i"o gene#al.

&os registros de propsito general 6., ;., 4. ! 7. son los caballos de batalla del sistema. Son nicos en el sentido de que se puede direccionarlos como una palabra o como una parte de un b!te. (l ultimo b!te de la izquierda es la parte @alta@, ! el ultimo b!te de la derecha es la parte @baja@. %or ejemplo, el registro 4. consta de una parte 4= *alta+ ! una parte 4l *baja+, ! usted puede referirse a cualquier parte por su nombre.

Regi5"#o A2. (l registro 6., el acumulador principal, es utilizado para operaciones que implican entradaEsalida ! la ma!or parte de la aritm3tica. %or ejemplo, las instrucciones para multiplicar , dividir ! traducir suponen el uso del 6.. -ambi3n, algunas operaciones generan cdigo mas eficiente si se refieren al 6. en lugar de a los otros registros.

Regi5"#o B2. (l ;. es conocido como el registro base !a que es el nico registro de propsito general que puede ser ndice para direccionamiento inde8ado. -ambi3n es comn emplear el ;. para c'lculos.

Regi5"#o D2. (l 7. es conocido como l registro de datos. 6lguna operaciones de entradaEsalida requieren uso, ! las operaciones de multiplicacin ! divisin con cifras grandes suponen al 7. ! al 6. trabajando juntos.

%ude usar los registros de propsito general para suma ! resta de cifras de A, "D o HG bits.

Regi5"#o de A7un"ado# de In5"#u((ione5. (l registro apuntador de instrucciones *?%+ de "D bits contiene el desplazamiento de direccin de la siguiente instruccin que se ejecuta. (l ?% esta asociado con el registro 4S en el sentido de que el ?% indica la instruccin actual dentro del segmento de cdigo que se esta ejecutando actualmente. &os procesadores A HAD ! posteriores tienen un ?% ampliado de HG bits, llamado (?%. (n el ejemplo siguiente, el registro 4S contiene G$6#N O= ! el ?% contiene #"G=. %ara encontrar la siguiente instruccin que ser' ejecutada, el procesador combina las direcciones en el 4S ! el ?%) Segmento de direccin en el registro 4S) 7esplazamiento de direccin en el registro ?%) 7ireccin de la siguiente instruccin) G$6# = P #"G= G$($G=

Regi5"#o5 A7un"ado#e5. &os registros S% *apuntador de la pila+ / ;% *apuntador de base+ est'n asociados con el registro SS ! permiten al sistema accesar datos en el segmento de la pila.

Regi5"#o S!. (l apuntador de la pila de "D bits esta asociado con el registro SS ! proporciona un valor de desplazamiento que se refiere a la palabra actual que esta siendo procesada en la pila. &os procesadores A HAD ! posteriores tienen un apuntador de pila de HG bits, el registro (S%. (l sistema maneja de forma autom'tica estos registros. (n el ejemplo siguiente, el registro SS contiene la direccin de segmento GC;HN O= ! el S% el desplazamiento H"G=. %ara encontrar la palabra actual que esta siendo procesada en la pila, la computadora combina las direcciones en el SS ! el S%)

Regi5"#o B!. (l ;% de "D bits facilita la referencia de par'metros, los cuales son datos ! direcciones transmitidos va pila. &os procesadores A HAD ! posteriores tienen un ;% ampliado de HG bits llamado el registro (;%.

Regi5"#o5 Indi(e. &os registros S? ! 7? est'n disponibles para direccionamiento inde8ado ! para sumas ! restas. Regi5"#o SI. (l registro ndice fuente de "D bits es requerido por algunas operaciones con cadenas *de caracteres+. (n este conte8to, el S? esta asociado con el registro 7S. &os procesadores A HAD ! posteriores permiten el uso de un registro ampliado de HG bits, el (S?.

Regi5"#o DI. (l registro ndice destino tambi3n es requerido por algunas operaciones con cadenas de caracteres. (n este conte8to, el 7? esta asociado con el registro (S. &os procesadores A HAD ! posteriores permiten el uso de un registro ampliado de HG bits, el (7?.

Regi5"#o de Bande#a5. 7e los "D bits del registro de banderas, nueve son comunes a toda la familia de procesadores A AD, ! sirven para indicar el estado actual de la maquina ! el resultado del procesamiento. Fuchas instrucciones que piden comparaciones ! aritm3tica cambian el estado de las banderas, algunas cu!as instrucciones pueden realizar pruebas para determinar la accin subsecuente. (n resumen, los bits de las banderas comunes son como sigue) O$ +Ove#8lo9: de5-o#da&ien"o,. ?ndica desbordamiento de un bit de orden alto *mas a la izquierda+ despu3s de una operacin aritm3tica. D$ +di#e((i*n,. 7esigna la direccin hacia la izquierda o hacia la derecha para mover o comparar cadenas de caracteres. I$ +in"e##u7(i*n,. ?ndica que una interrupcin e8terna, como la entrada desde el teclado, sea procesada o ignorada.

T$ +"#a&7a,. %ermite la operacin del procesador en modo de un paso. &os programas depuradores, como el 7(;UQ, activan esta bandera de manera que usted pueda avanzar en la ejecucin de una sola instruccin a un tiempo, para e8aminar el efecto de esa instruccin sobre los registros de memoria. S$ +5igno,. 4ontiene el signo resultante de una operacin aritm3tica * M positivo ! " M negativo+. ;$ +(e#o,. ?ndica el resultado de una operacin aritm3tica o de comparacin * M resultado diferente de cero ! " M resultado igual a cero+. A$ +a(a##eo au<ilia#,. 4ontiene un acarreo e8terno del bit H en un dato de A bits para aritm3tica especializada. !$ +7a#idad,. ?ndica paridad par o impar de una operacin en datos de A bits de bajo orden *mas a la derecha+. $ +a(a##eo,. 4ontiene el acarreo de orden mas alto *mas a la izquierda+ despu3s de una operacin aritm3tica2 tambi3n lleva el contenido del ultimo bit en una operacin de corrimiento o de rotacin. &as banderas est'n en el registro de banderas en las siguientes posiciones)

&as banderas mas importantes para la programacin en ensamblador son 9, S, R ! 4, para operaciones de comparacin ! aritm3ticas, ! 7 para operaciones de cadenas de caracteres. &os procesadores A GAD ! posteriores tienen algunas banderas usadas para propsitos internos, en especial las que afectan al modo protegido. &os procesadores A GAD ! posteriores tienen un registro e8tendido de banderas conocido como (flags.

%.1. SEGMENTO.

Un segmento es un 'rea especial en un programa que inicia en un limite de un p'rrafo, esto es, en una localidad de regularmente divisible entre "D, o " he8adecimal. 6unque un segmento puede estar ubicado casi en cualquier lugar de la memoria !, en modo real, puede ser hasta de D#S, solo necesita tanto espacio como el programa requiera para su ejecucin. Un segmento en modo real puede ser de hasta D#S. Se puede tener cualquier numero de segmentos2 para direccionar un segmento en particular basta cambiar la direccin en el registro del segmento apropiado. &os tres segmentos principales son los segmentos de cdigo, de datos ! de la pila.

Seg&en"o de (*digo.

(l segmento de cdigo *4S+ contiene las instrucciones de maquina que son ejecutadas por lo comn la primera instruccin ejecutable esta en el inicio del segmento, ! el sistema operativo enlaza a esa localidad para iniciar la ejecucin del programa. 4omo su nombre indica, el

registro del 4S direcciona el segmento de cdigo. Si su 'rea de cdigo requiere mas de D#S, su programa puede necesitar definir mas de un segmento de cdigo. Seg&en"o de da"o5.

(l segmento de datos *7S+ contiene datos, constantes ! 'reas de trabajo definidos por el programa. (l registro 7S direcciona el segmento de datos. Si su 'rea de datos requiere mas de D#S, su programa puede necesitar definir mas de un segmento de datos. Seg&en"o de 7ila.

(n t3rminos sencillos, la pila contiene los datos ! direcciones que usted necesita guardar temporalmente o para uso de sus @llamadas@ subrutinas. (l registro de segmento de la pila *SS+ direcciona el segmento de la pila.

LIMITES DE LOS SEGMENTOS. &os registros de segmentos contienen la direccin inicial de cada segmento. &a figura H." presenta un esquema de los registros 4S, 7S ! SS2 los registros ! segmentos no necesariamente est'n en el orden mostrado. 9tros registros de segmentos son el (S *segmento e8tra+ !, en los procesadores A HAD ! posteriores, los registros JS ! QS, que contienen usos especializados. 4oma !a dijimos, un segmento inicia en un limite de p'rrafo, que es una direccin por lo comn divisible entre el "D decimal o " he8adecimal. Suponga que un segmento de datos inicia en la localidad de memoria #$J =. /a que en este ! todos los dem's casos el ultimo dgito he8adecimal de la derecha es cero, los dise>adores de computadora decidieron que seria innecesario almacenar el dgito cero en el registro del segmento. 6s, #$J = se almacena como #$J, con el cero de la e8trema derecha sobrentendido. (n donde sea apropiado, el te8to indica al cero de la derecha con corchetes, como #$JN O.

$igu#a %.1. Segmentos ! registros.

%.2. DES!LA;AMIENTO.

(n un programa, todas la localidades de memoria est'n referidas a una direccin inicial de segmento. &a distancia en b!tes desde la direccin del segmento se define como el desplazamiento *offset+. Un desplazamiento de dos b!tes *"D bits+ puede estar en el rango de = hasta JJJJ=, o bien, desde cero hasta D$, $H$. 6s el primer b!te del segmento de cdigo tiene un desplazamiento , el segundo b!te tiene un desplazamiento ", etc. hasta el desplazamiento D$, $H$. %ara referir cualquier direccin de memoria en un segmento, el procesador combina la direccin del segmento en un registro de segmento con un valor de desplazamiento. (n el ejemplo siguiente, el registro 7S contiene la direccin de segmento del segmento de datos en #$JN O= ! una instruccin hace referencia a una localidad con un desplazamiento de HG= b!tes dentro del segmento de datos.

%or lo tanto, la localidad real de memoria del b!te referido por la instruccin es #DGG=2

7ireccin del segmento 7S) #$J = 7esplazamiento) P HG= 7ireccin real) #DGG=

Kote que un programa tiene uno o mas segmentos, los cuales pueden iniciar casi en cualquier lugar de memoria, variar en tama>o ! estar en cualquier orden.

%.%. METODOS DE DIRE

IONAMIENTO.

(l campo de operacin de una instruccin especifica la operacin que se va a ejecutar. (sta operacin debe realizarse sobre algunos datos almacenados en registros de computadora o en palabras de memoria. &a manera en que eligen los operandos durante la ejecucin del programa depende del modo de direccionamiento de la instruccin. (l modo de direccionamiento especifica una regla para interpretar o modificar el campo de direccin de la instruccin antes de que se haga la referencia real al operando. &as computadoras utilizan t3cnicas de modo de direccionamiento para acomodar una o las dos siguientes consideraciones)

".: %roporcionar al usuario versatilidad de programacin al ofrecer facilidades como apuntadores a memoria, contadores para control de ciclo, inde8acin de datos ! reubicacin de datos. G.: 5educir la cantidad de bits en el campo de direccionamiento de la instruccin. &a disponibilidad de los modos de direccionamiento proporciona al programador con e8periencia en lenguaje ensamblador la fle8ibilidad para escribir programas mas eficientes en relacin con la cantidad de instrucciones ! el tiempo de ejecucin. %ara comprender los diferentes modos de direccionamiento que se presentaran en esta seccin, es imperativo entender el ciclo de operacin b'sico de la computadora. &a unidad de control de una computadora esta dise>ada para recorrer un ciclo de instrucciones que se divide en tres fases principales) ". ;squeda de la instruccin de la memoria. G. 7ecodificar la instruccin. H. (jecutar la instruccin.

=a! un registro en la computadora llamado contador de programa o %4, que lleva un registro de las instrucciones del programa almacenado en la memoria. %c contiene la direccin de la siguiente instruccin que se va a ejecutar ! se incrementa cada vez que se recupera una instruccin de la memoria. &a decodificacin realizada en el paso G determina la operacin que se va a ejecutar, el modo de direccionamiento de la instruccin ! la posicin de los operandos. 7espu3s la computadora ejecuta la instruccin ! regresa al paso " para hacer la bsqueda de la siguiente instruccin en secuencia. (n algunas computadoras el modo de direccionamiento de la instruccin se especifica con un cdigo binario distinto, como se hace con el cdigo de operacin. 9tras computadoras utilizan un cdigo binario nico que representa la operacin ! el modo de la instruccin. %ueden definirse instrucciones con diversos modos de direccionamiento !, en ocasiones, se combinan dos o mas modos de direccionamiento en una instruccin. 6unque la ma!ora de los modos de direccionamiento modifican el campo de direccin de la instruccin, ha! dos modos que no necesitan el campo de direccin. Son los modos implcito e inmediato.

MODO IM!LI ITO. (n este modo se especifican los operandos en forma implcita en la definicin de la instruccin. %or ejemplo, la instruccin @complementar acumulador@ es una instruccin de modo implcito porque el operando en el registro de acumulador esta implcito en la definicin de la instruccin. 7e hecho todas las instrucciones de referencia a registro que utilizan un acumulador son instrucciones de modo implcito. &as instrucciones de direccin cero en una computadora organizada con pila son instrucciones de modo implcito porque esta implcito que los operandos est'n en la parte superior de la pila.

MODO INMEDIATO. (n este modo se especifica el operando en la instruccin misma. (n otras palabras, una instruccin de modo inmediato tiene un campo operando, en lugar de una campo de direccin. Un campo de operando contiene el operando real que se va a usar junto con la operacin

especificada en la instruccin. &as instrucciones de modo inmediato son tiles para inicializar registros en un valor constante. Se menciono antes que el campo de direccin de una instruccin puede especificar una palabra de memoria o un registro de procesador. 4uando el campo de direccin especifica un registro de procesador se dice que la instruccin esta en modo de registro.

MODO DE REGISTRO. (n este modo, los operandos est'n en registros que residen dentro de la 4%U. Se selecciona el registro particular de un campo de registro en la instruccin. Un campo I bits puede especificar cualquiera de G a la I registros.

MODO INDIRE TO !OR REGISTRO. (n este modo la instruccin especifica un registro en la 4%U cu!o contenido proporciona la direccin del operando en la memoria. (n otras palabras, el registro seleccionado contiene la direccin del operando en lugar del operando mismo. 6ntes de utilizar una instruccin de modo indirecto por registro, el programador debe asegurarse de que la direccin de memoria del operando esta colocada en el registro del procesador con una instruccin previa. (ntonces una referencia al registro es equivalente a especificar una direccin de memoria. &a ventaja de una instruccin de modo de registro indirecto es que el campo de direccin de la instruccin utiliza menos bits para seleccionar un registro de los que necesitara para especificar una direccin de memoria en forma directa.

MODO DE DIRE

IONAMIENTO DIRE TO.

(n este modo la direccin efectiva es igual a la parte de direccin de la instruccin. (l operando reside en memoria ! su direccin la proporciona en forma directa el campo de direccin de la instruccin. (n una instruccin de tipo brinco el campo de direccin especifica la direccin de transferencia de control del programa real.

MODO DE DIRE

IONAMIENTO INDIRE TO.

(n este modo, el campo de direccin de la instruccin proporciona la direccin en que se almacena la direccin efectiva en la memoria. (l control recupera la instruccin de la memoria ! utiliza su parte de direccin para accesar la memoria una vez mas con el fin de leer la direccin efectiva. Unos cuantos modos de direccionamiento requieren que el campo de direccin de la instruccin se sume al contenido de un registro especifico en la 4%U. (n estos modos la direccin efectiva se obtiene del calculo siguiente) 7ireccin efectiva M %arte de la instruccin P (l contenido de registro 4%U. (& registro de 4%U utilizado en el calculo puede ser el contador de programa, un registro de ndice o un registro base. (n cualquier caso tenemos un modo de direccionamiento diferente que se utiliza para una aplicacin distinta.

MODO DE DIRE

IONAMIENTO INDE2ADO.

(n este modo el contenido de un registro ndice se suma a la parte de direccin de la instruccin para obtener la direccin efectiva. (l registro ndice es un registro 4%U especial que contiene un valor ndice. Un campo de direccin de la instruccin define la direccin inicial del arreglo de datos en la memoria. 4ada operando del arreglo se almacena en la memoria en relacin con la direccin inicial. &a distancia entre la direccin inicial ! la direccin del operando es el valor del ndice almacenado en el registro de ndice. 4ualquier operando en el arreglo puede accesarse con la misma instruccin siempre ! cuando el registro ndice contenga el valor de ndice correcto. (l registro ndice puede incrementarse para facilitar el acceso a operandos consecutivos. Ktese que si una instruccin de tipo ndice no inclu!e un campo de direccin en su formato, la instruccin se convierte al modo de operacin de indirecto por registro. 6lgunas computadoras dedican un registro de 4%U para que funcione e8clusivamente como un registro ndice. 7e manera implcita este registro participa cuando se utiliza una instruccin de modo ndice. (n las computadoras con muchos registros de procesador, cualquiera de los registros de la 4%U pueden contener el numero de ndice. (n tal caso, el registro debe estar especificado en forma e8plcita en una campo de registro dentro del formato de instruccin.

MODO DE DIRE

IONAMIENTO DE REGISTRO BASE.

(n este modo, el contenido de un registro base se suma a la parte de direccin de la instruccin para obtener la direccin efectiva. (sto es similar al modo de direccionamiento inde8ado, e8cepto en que el registro se denomina ahora registro base, en lugar de registro ndice. &a diferencia entre los dos modos esta en la manera en que se usan mas que en la manera en que se calculan. Se considera que un registro base contiene una direccin base ! que el campo de direccin de la instruccin proporciona un desplazamiento en relacin con esta direccin base. (l modo de direccionamiento de registro base se utiliza en las computadoras para facilitar la localizacin de los programas en memoria.

..1.

ON E!TO DE INTERRU! ION.

Una interrupcin es una operacin que suspende la ejecucin de un programa de modo que el sistema pueda realizar una accin especial. &a rutina de interrupcin ejecuta ! por lo regular regresa el control al procedimiento que fue interrumpido, el cual entonces reasume su ejecucin.

..2. TABLA DE SERVI IO DE INTERRU! ION.

4uando la computadora se enciende, el ;?9S ! el 79S establecen una tabla de servicios de interrupcin en las localidades de memoria =:HJJ=. &a tabla permite el uso de G$D *" =+ interrupciones, cada una con un desplazamiento)segmento relativo de cuatro b!tes en la forma ?%)4S. (l operando de una instruccin de interrupcin como ?K- $= identifica el tipo de solicitud. 4omo e8isten G$D entradas, cada una de cuatro b!tes, la tabla ocupa los primeros ", G# b!tes de memoria, desde = hasta HJJ=. 4ada direccin en la tabla relaciona a una ruina de ;?9S o del 79S para un tipo especifico de interrupcin. %or lo tanto los b!tes :H contienen la direccin para la interrupcin , los b!tes #:C para la interrupcin ", ! as sucesivamente)

..%. EVENTOS DE UNA INTERRU! ION.

Una interrupcin guarda en la pila el contenido del registro de banderas, el 4S, ! el ?%. por ejemplo, la direccin en la tabla de ?K- $= *que imprime la que se encuentra en la pantalla cuando el usuario presiona 4trl P %rtS4+ es "#= * $= 8 # M "#=+. &a operacin e8trae la direccin de cuatro b!tes de la posicin "#= ! almacena dos b!tes en el ?% ! dos en el 4S. &a direccin 4S)?% entonces apunta al inicio de la rutina en el 'rea del ;?9S, que ahora se ejecuta. &a interrupcin regresa va una instruccin ?5(- *regreso de interrupcin+, que saca de la pila el ?%, 4S ! las banderas ! regresa el control a la instruccin que sigue al ?K-.

Una interrupcin guarda en la pila el contenido del registro de banderas, el 4S, ! el ?%. por ejemplo, la direccin en la tabla de ?K- $= *que imprime la que se encuentra en la pantalla cuando el usuario presiona 4trl P %rtS4+ es "#= * $= 8 # M "#=+. &a operacin e8trae la direccin de cuatro b!tes de la posicin "#= ! almacena dos b!tes en el ?% ! dos en el 4S. &a direccin 4S)?% entonces apunta al inicio de la rutina en el 'rea del ;?9S, que ahora se ejecuta. &a interrupcin regresa va una instruccin ?5(- *regreso de interrupcin+, que saca de la pila el ?%, 4S ! las banderas ! regresa el control a la instruccin que sigue al ?K-. .... TI!OS DE INTERRU! IONES. &as interrupciones se dividen en dos tipos las cuales son) (8ternas ! ?nternas. Una interrupcin e8terna es provocada por un dispositivo e8terno al procesador. &as dos lneas que pueden se>alar interrupciones e8ternas son la lnea de interrupcin no enmascarable *KF?+ ! la lnea de peticin de interrupcin *?K-5+. &a lnea KF? reporta la memoria ! errores de paridad de (ES. (l procesador siempre acta sobre esta interrupcin, aun si emite un 4&? para limpiar la bandera de interrupcin en un intento por deshabilitar las interrupciones e8ternas. &a lnea ?K-5 reporta las peticiones desde los dispositivos e8ternos, en realidad, las interrupciones $= a la J=, para cronometro, el teclado, los puertos seriales, el disco duro, las unidades de disco fle8ibles ! los puertos paralelos. Una interrupcin interna ocurre como resultado de la ejecucin de una instruccin ?K- o una operacin de divisin que cause desbordamiento, ejecucin en modo de un paso o una peticin para una interrupcin e8terna, tal como (ES de disco. &os programas por lo comn utilizan interrupciones internas, que no son enmascarables, para accesar los procedimientos del ;?9S ! del 79S.

../. INTERRU! ION DE BIOS. (l ;?9S contiene un e8tenso conjunto de rutinas de entradaEsalida ! tablas que indican el estado de los dispositivos del sistema. (l dos ! los programas usuarios pueden solicitar rutinas del ;?9S para la comunicacin con los dispositivos conectados al sistema. (l m3todo para

realizar la interfaz con el ;?9S es el de las interrupciones de software. 6 continuacin se listan algunas interrupciones del ;?9S. INT ==>? 7ivisin entre cero. &lamada por un intento de dividir entre cero. Fuestra un mensaje ! por lo regular se cae el sistema. INT =1>? Un solo paso. Usado por 7(;UQ ! otros depuradores para permitir avanzar por paso a trav3s de la ejecucin de un programa. INT =2>? ?nterrupcin no enmascarare. Usada para condiciones graves de hardware, tal como errores de paridad, que siempre est'n habilitados. %or lo tanto un programa que emite una instruccin 4&? *limpiar interrupciones+ no afecta estas condiciones. INT =%>? %unto de ruptura. Usado por depuracin de programas para detener la ejecucin. INT =.>? 7esbordamiento. %uede ser causado por una operacin aritm3tica, aunque por lo regular no realiza accin alguna. INT =/>? ?mprime pantalla. =ace que el contenido de la pantalla se imprima. (mita la ?K- $= para activar la interrupcin internamente, ! presione las teclas 4ltr P %rtS4 para activarla e8ternamente. &a operacin permite interrupciones ! guarda la posicin del cursor. INT =4>? Sistema del cronometro. Una interrupcin de hardware que actualiza la hora del sistema ! *si es necesario+ la fecha. Un chip temporizador programable genera una interrupcin cada $#.BG$# milisegundos, casi "A.G veces por segundo. INT =@>? ?nterrupcin del teclado. %rovocada por presionar o soltar una tecla en el teclado. INT OB>: INT O >? 4ontrol de dispositivo serial. 4ontrola los puertos 49F" ! 49FG, respectivamente. INT =D>: INT O$>? 4ontrol de dispositivo paralelo. 4ontrola los puertos &%-" ! &%-G, respectivamente. INT =E>? 4ontrol de disco fle8ible. Se>ala actividad de disco fle8ible, como la terminacin de una operacin de (ES. INT 1=>? 7espliegue en vdeo. 6cepta el numero de funciones en el 6= para el modo de pantalla, colocacin del cursor, recorrido ! despliegue. INT 11>? 7eterminacin del equipo. 7etermina los dispositivos opcionales en el sistema ! regresa el valor en la localidad # )" = del ;?9S al 6.. *6 la hora de encender el equipo, el sistema ejecuta esta operacin ! almacena el 6. en la localidad # )" =+. INT 12>? 7eterminacin del tama>o de la memoria. (n el 6., regresa el tama>o de la memoria de la tarjeta del sistema, en t3rminos de Iilob!tes contiguos. INT 1%>? (ntradaEsalida de disco. 6cepta varias funciones en el 6= para el estado del disco, sectores ledos, sectores escritos, verificacin, formato ! obtener diagnostico.

..1. INTERRU! ION DEL DOS.

&os dos mdulos del 79S, ?9.S/S ! FS79S.S/S, facilitan el uso del ;?9S. /a que proporcionan muchas de las pruebas adicionales necesarias, las operaciones del 79S por lo

general son mas f'ciles de usar que sus contrapartes del ;?9S ! por lo comn son independientes de la maquina. IO.S0S es una interfaz de nivel bajo con el ;?9S que facilita la lectura de datos desde la memoria hacia dispositivos e8ternos. MSDOS.S0S contiene un administrador de archivos ! proporciona varios servicios. %or ejemplo, cuando un programa usuario solicita la ?K- G"=, la operacin enva informacin al FS79S.S/S por medio del contenido de los registros. %ara completar la peticin, FS79S.S/S puede traducir la informacin a una o mas llamadas a ?9.S/S, el cual a su vez llama al ;?9S. &as siguientes son las relaciones implcitas)

INTERU! IONES DEL DOS. &as interrupciones desde la G = hasta la HJ= est'n reservadas para operaciones del 79S. 6 continuacin se mencionan algunas de ellas. INT 2=>? -ermina programa. Jinaliza la ejecucin de un programa .49F, restaura las direcciones para 4ltr P ;reaI ! errores crticos, limpia los bufer de registros ! regresa el control al 79S. (sta funcin por lo regular seria colocada en el procedimiento principal ! al salir de el, 4S contendra la direccin del %S%. &a terminacin preferida es por medio de la funcin #4= de la ?K- G"=. INT 21>? %eticin de funcin al 79S. &a principal operacin del 79S necesita una funcin en el 6=. INT 22>? 7ireccin de terminacin. 4opia la direccin de esta interrupcin en el %S% del programa *en el desplazamiento 6=+ cuando el 79S carga un programa para ejecucin. 6 la terminacin del programa, el 79S transfiere el control a la direccin de la interrupcin. Sus programas no deben de emitir esta interrupcin. INT 2%>? 7ireccin de 4ltr P ;reaI. 7ise>ada para transferir el control a una rutina del 79S *por medio del %S% desplazamiento (=+ cuando usted presiona 4tlt P ;reaI o 4tlr P c. &a rutina finaliza la ejecucin de un programa o de un archivo de procesamiento por lotes. Sus programas no deben de emitir esta interrupcin. INT 2.>? Fanejador de error critico. Usada por el dos para transferir el control *por medio del %S% desplazamiento "G=+ cuando reconoce un error critico *a veces una operacin de disco o de la impresora+.Sus programas no deben de emitir esta interrupcin. INT 2/>? &ectura absoluta de disco. &ee el contenido de uno o mas sectores de disco. INT 21>? (scritura absoluta de disco. (scribe informacin desde la memoria a uno o mas sectores de disco.

INT 23>? -ermina pero permanece residente *reside en memoria+. =ace que un programa .49F al salir permanezca residente en memoria. INT 2$>? ?nterrupcin de multiple8ion. ?mplica la comunicacin entre programas, como la comunicacin del estado de un spooler de la impresora, la presencia de un controlador de dispositivo o un comando del 79S tal como 6SS?QK o 6%%(K7. INT %%>? Fanejador del ratn. %roporciona servicios para el manejo del ratn.

/.1.ELEMENTOS BASI OS. OMENTARIOS EN LENGUAJE ENSAMBLADOR.

(l uso de comentarios a lo largo de un programa puede mejorar su claridad, en especial en lenguaje ensamblador, donde el propsito de un conjunto de instrucciones con frecuencia no es claro. Un comentario empieza con punto ! coma *2+ !, en donde quiera que lo codifique, el ensamblador supone que todos los caracteres a la derecha de esa lnea son comentarios. Un comentario puede contener cualquier car'cter imprimible, inclu!endo el espacio en blanco. Un comentario puede aparecer solo en una lnea o a continuacin de una instruccin en la misma lnea, como lo muestran los dos ejemplos siguientes) ". 2 -oda esta lnea es un comentario. G. 677 6., ;. 2 4omentario en la misma lnea que la instruccin.

/a que un comentario aparece solo en un listado de un programa fuente en ensamblador ! no genera cdigo de maquina, puede incluir cualquier cantidad de comentarios sin afectar el tama>o o la ejecucin del programa ensamblado. 9tra manera de proporcionar comentarios es por medio de la directiva 49FF(K-.

!ALABRAS RESERVADAS.

4iertas palabras en lenguaje ensamblador est'n reservadas para sus propsitos propios, ! son usadas solo bajo condiciones especiales. %or categoras, las palabras reservadas inclu!en)

?nstrucciones, como F91 ! 677, que son operaciones que la computadora puede ejecutar. 7irectivas como (K7 o S(QF(K-, que se emplean para proporcionar comandos al ensamblador. 9peradores, como J65 ! S?R(, que se utilizan en e8presiones. Smbolos predefinidos, como T7ata ! TFodel, que regresan informacin a su programa.

(l uso de una palabra reservada para un propsito equivocado provoca que el ensamblador genere un mensaje de error. 1er palabras reservadas.

IDENTI$I ADORES.

Un identificador es un nombre que se aplica a elementos en el programa. &os dos tipos de identificadores son) nombre, que se refiere a la direccin de un elemento de dato. ! etiqueta, que se refiere a la direccin de una instruccin. &as mismas reglas se aplican tanto para los nombres como para las etiquetas. Un identificador puede usar los siguientes caracteres)

".: &etras del alfabeto) G.: 7gitos) H.: 4aracteres especiales

7esde la 6 hasta la R 7esde el al B *no puede ser el primer car'cter+ Signo de interrogacin * U + Subra!ado * V + Signo de pesos * W + 6rroba * T + %unto * . + *no puede ser el primer car'cter+

(l primer car'cter de un identificador debe ser una letra o un car'cter especial, e8cepto el punto. /a que el ensamblador utiliza algunos smbolos especiales en palabras que inician con el smbolo T, debe evitar usarlo en sus definiciones. (l ensamblador trata las letras ma!sculas ! minsculas como iguales. &a longitud m'8ima de un identificador es de H" caracteres *G#C desde el F6SF D. +. (jemplos de nombres validos son 49UK-, %6Q(G$ ! W(" . Se recomienda que los nombres sean descriptivos ! con significado. &os nombres de registros, como 6., 7? ! 6&, est'n reservados para hacer referencia a esos mismos registros. (n consecuencia, en una instruccin tal como) 677 6., ;. el ensamblador sabe de forma autom'tica que 6. ! ;. se refieren a los registros. Sin embargo, en una instruccin como) F91 5(QS61(, 6.

el ensamblador puede reconocer el nombre 5(QS61( solo si se define en algn lugar del programa.

INSTRU

IONES.

Un programa en lenguaje ensamblador consiste en un conjunto de enunciados. &os dos tipos de enunciados son) ". ?nstrucciones, tal como F91 ! 677, que el ensamblador traduce a cdigo objeto. G. 7irectivas, que indican al ensamblador que realiza una accin especifica, como definir un elemento de dato.

6 continuacin esta el formato general de un enunciado, en donde los corchetes indican una entrada opcional)

NidentificadorO operacin Noperando*s+O N2comentariosO

Un identificador *si e8iste+, una operacin ! un operando *si e8iste+ est'n separados por al menos un espacio en blanco o un car'cter tabulador. (8iste un m'8imo de "HG caracteres en una lnea *$"G desde el F6SF D. +, aunque la ma!ora de los programadores prefiere permanecer en los A caracteres !a que es el numero m'8imo que cabe en la pantalla. 6 continuacin se presentan dos ejemplos de enunciados)

IDENTI$I ADOR 7irectiva) 49UK?nstruccin)

O!ERA ION O!ERANDO 7; " F91 6.,

OMENTARIO 2Kom, 9p, 9perando 29peracin, G 9perand

?dentificador, operacin ! operando pueden empezar en cualquier columna. Sin embargo, si de manera consistente se inicia en la misma columna para estas tres entradas se hace un programa mas legible.

IDENTI$I ADOR

4omo !a se e8plico, el termino nombre se aplica al nombre de un elemento o directiva definida, mientras que el termino etiqueta se aplica al nombre de una instruccin.

O!ERA ION

&a operacin, que debe ser codificada, es con ma!or frecuencia usada para la definicin de 'reas de datos ! codificacin de instrucciones. %ara un elemento de datos, una operacin como 7; o 7X define un campo, 'rea de trabajo o constante.

O!ERANDO

(l operando *si e8iste+ proporciona informacin para la operacin que acta sobre el. %ara un elemento de datos, el operando identifica su valor inicial. %or ejemplo, en la definicin siguiente de un elemento de datos llamado 49UK-(5, la operacin 7; significa @definir b!te@, ! el operando inicializa su contenido con un valor cero)

%ara una instruccin, un operando indica en donde realizar la accin. Un operando de una instruccin puede tener una, dos o tal vez ninguna entrada. 6qu est'n tres ejemplos)

DIRE TIVAS !ARA LISTAR? !AGE 0 TITLE &a directiva %6Q( ! -?-&( a!udan a controlar el formato de un listado de un programa en ensamblador. (ste es su nico fin, ! no tienen efecto sobre la ejecucin subsecuente del programa. !AGE. 6l inicio de un programa, la directiva %6Q( designa el numero m'8imo de lneas para listar en una pagina ! el numero m'8imo de caracteres en una lnea. Su formato general es)

%6Q( NlongitudON, anchoO

(l ejemplo siguiente proporciona D lneas por pagina ! "HG caracteres por lnea)

%6Q( D , "HG

(l numero de lneas por pagina puede variar desde " hasta G$$, mientras que el numero de caracteres por lnea desde D hasta "HG. &a omisin de %6Q( causa que el ensamblador tome %6Q( $ , A .

TITLE. Se puede emplear la directiva -?-&( para hacer que un titulo para un programa se imprima en la lnea G de cada pagina en el listado del programa. %uede codificar -?-&( de una vez, al inicio del programa. Su formato general es)

-?-&( -e8to.

%ara el operando te8to, una t3cnica recomendada es utilizar el nombre del programa como se registra en el disco. %or ejemplo)

-?-&( %rog" Fi primer programa en ensamblador DIRE TIVA SEGMENT Un programa ensamblado en formato .(.( consiste en uno o mas segmentos. Un segmento de pila define el almac3n de la pila, un segmento de datos define los elementos de datos ! un

segmento de cdigo proporciona un cdigo ejecutable. &as directivas para definir un segmento, S(QF(K- ! (K7S tienen el formato siguiente)

(l enunciado S(QF(K- define el inicio de un segmento. (l nombre del segmento debe estar presente, ser nico ! cumplir las convenciones para nombres del lenguaje. (& enunciado (K7S indica el final del segmento ! contiene el mismo nombre del enunciado S(QF(K-. (l tama>o m'8imo de un segmento es de D#S. (l operando de un enunciado S(QF(K- puede tener tres tipos de opciones) alineacin, combinar ! clase, codificadas en este formato)

nombre

S(QF(K-

alineacin

combinar

Y clase Y

TI!O ALINEA ION. &a entrada alineacin indica el limite en el que inicia el segmento. %ara el requerimiento tpico, %656, alinea el segmento con el limite de un p'rrafo, de manera que la direccin inicial es divisible entre "D, o " =. (n ausencia de un operando hace que el ensamblador por omisin tome %656. TI!O OMBINAR. &a entrada combinar indica si se combina el segmento con otros segmentos cuando son enlazados despu3s de ensamblar. &os tipos de combinar son S-64S, 49FF9K, %U;&?4 ! la e8presin 6-. %or ejemplo, el segmento de la pila por lo comn es definido como)

nombre

S(QF(K-

%656

S-64S

%uede utilizar %U;&?4 ! 49FF9K en donde tenga el propsito de combinar de forma separada programas ensamblados cuando los enlaza. (n otros casos, donde un programa no es combinado con otros, puede omitir la opcin o codificar K9K(. TI!O LASE. &a entrada clase, encerrada entre apstrofos, es utilizada para agrupar segmentos cuando se enlazan. Se utiliza la clase YcodeY para el segmento de cdigos, YdataY por segmento de datos ! YstacIY para el segmento de la pila. (l ejemplo siguiente define un segmento de pila con tipos alineacin, combinar ! clase)

nombre

S(QF(K-

%656

S-64S

YStacIY

DIRE TIVA ASSUME. Un programa utiliza el registro SS para direccionar la pila, al registro 7S para direccionar el segmento de datos ! el registro 4S para direccionar el segmento de cdigo. %ara este fin, usted tiene que indicar al ensamblador el propsito de cada segmento en el programa. &a directiva para este propsito es 6SS(F(, codificada en el segmento de cdigo como sigue)

9%(564?9K 6SSUF(

9%(56K79 SS)nompila, 7S)nomsegdatos, 4S) nomsegcodigo,. . .

&os operandos pueden aparecer en cualquier orden. 6l igual que otras directivas, 6SSUF( es solo un mensaje que a!uda al ensamblador a convertir cdigo simblico a cdigo maquina2 aun puede tener que codificar instrucciones que fsicamente cargan direcciones en registros de segmentos en el momento de la ejecucin. " %6Q( D ,"HG G -?-&( % #6SF" (S-5U4-U56 7( UK %59Q56F6 .(.( H2::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: # S-64SSQ S(QF(K- %656 S-64S YStacIY $ ... D S-64SSQ (K7S C2::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: A 76-6SQ S(QF(K- %656 Y7ataY B ... " 76-6SQ (K7S ""2::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: "G 497(SQ S(QF(K- %656 Y4odeY "H ;(Q?K %594 J65 "# 6SSUF( SS)S-64SSQ, 7S)76-6SQ,4S)497(SQ "$ F91 6., 76-6SQ 29btiene la direccin del segmento de datos "D F91 7S, 6. 26lmacena direccin en 7S "C ... "A F91 6., #4 = 2%eticion "B ?KG"= 2Salida al 79S G ;(Q?K (K7% G" 497(SQ (K7S GG (K7 ;(Q?K

/.2. DIRE TIVAS SIM!LI$I ADAS DE SEGMENTOS

&os ensambladores de FicroSoft ! de ;orland proporcionan algunas formas abreviadas para definir segmentos. %ara usar estas abreviaturas, inicialice el modelo de memoria antes de definir algn segmento. (l formato general *inclu!endo el punto inicial+ es)

.MODEL &odelo de &e&o#ia (l modelo de memoria puede ser -?K/, SF6&&, F(7?UF, 49F%64- o &65Q(. &os requisitos para cada modelo son)

%uede utilizar cualquiera de estos modelos para un programa autnomo *esto es, un programa que no este enlazado con algn otro+. (l modelo -?K/ esta destinado para uso e8clusivo de programas .49F, los cuales tienen sus datos, cdigo ! pila en un segmento. (l modelo SF6&& e8ige que el cdigo quepa en un segmento de D#S ! los datos en otro segmento de D#S. &a directiva .F97(&& genera autom'ticamente el enunciado 6SSUF( necesario. &os formatos generales *inclu!endo el punto inicial+ para las directivas que define los segmentos de la pila, de datos ! de cdigo son)

.STA A B"a&aCoD .DATA . ODE Bno&-#eD

4ada una de estas directivas hace que el ensamblador genere el enunciado S(QF(Knecesario ! su correspondiente (K7S. &os nombres por omisin de los segmentos *que usted no tiene que definir+ son S-64S, 76-6 ! -(.- *para el segmento de cdigo+. &a figura #.H proporciona un ejemplo haciendo uso de las directivas simplificadas de segmento.

page D ,"HG -?-&( % #6SFG *(.(+ 9peraciones de mover ! sumar 2::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: .F97(& SF6&& .S-64S D# 2Se define la pila .76-6 2Se definen los datos J&76 7X G$ J&7; 7X "G$ J&74 7X U 2::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: .497( ;(Q?K %594 F91 F91 677 F91 F91 ?K;(Q?K (K7% (K7 2Se define el segmento de cdigo J65 6., Tdata 6., J&76 6., J&7; J&74, 6. 6., #4 G"= ;(Q?K = 2Se asigna la direccin de 76-6SQ *%rog. anterior+ 2Fover G$ a 6. 2Sumar "G$ a 6. 26lmacenar suma en J&74 2Salida a 79S 2Jin de procedimiento 2Jin de programa 1.1. TRANS$EREN IA DE DATOS.

&a instruccin de transferencia de datos por e8celencia es)

F91 destino, fuente entendiendo por fuente el contenido que se va a transferir a una determinada zona o registro de memoria denominada destino. (sta instruccin, por tanto, nos va a permitir transferir informacion entre registros ! memoria, memoria ! registros ! entre los propios registros utilizando alguno de los diferentes modos de direccionamiento. 4on la instruccin F91 diremos que se pueden realizar todo tipo de movimientos teniendo en cuenta las siguientes restricciones) ".: Ko se puede realizar una transferencia de datos entre dos posiciones de memoria directamente, por esta razn, siempre que queramos efectuarlas tendremos que utilizar un registro intermedio que haga de puente. %or ejemplo, para hacer la operacion 76-9" ,:: 76-9G, la instruccin F91 76-9G,76-9" sera incorrecta. &o que s sera correcto sera utilizar el registro 7., u otro, como puente ! hacer) F91 7.,76-9" F91 76-9G,7.

G.: -ampoco se puede hacer una transferencia directa entre dos registros de segmento. %or eso, como en el caso anterior, si fuera preciso se utilizara un registro como puente. H.: 6simismo, tampoco se puede cargar en los registros de segmento un dato utilizando direccionamiento inmediato, es decir, una constante, por lo que tambi3n habr' que recurrir a un registro puente cuando sea preciso.

Una instruccin util pero no imprescindible es) .4=Q 76-9", 76-9G que intercambia los contenidos de las posiciones de memoria o registros representadospor 76-9" ! 76-9G. %or ejemplo, si queremos intercambiar los contenidos de los registros 6. ! ;., podemos hacer)

F91 6U., 6. F91 6., ;. F91 ;., 6U.

en donde 6U. es una variable au8iliar que hace de puente, o simplemente utilizar) .4=Q 6., ;. &as restricciones que presenta esta operacin es que no se pueden efectuar intercambios directamente entre posiciones de memoria ni tampoco entre registros de segmento. &a instruccin .&6- tabla carga en el registro 6& el contenido de la posicin N;.ON6&O, en donde el registro ;. ha de apuntar al comienzo de una tabla. 7ichio de otra manera, 6& hace de ndice de la tabla ! de almac3n destino del contenido de la tabla.

%or ejemplo, el siguiente programa) 76-9S S(QF(K-6;&6 7; G,H,$,A,"D,GH 76-9S (K7S 497?Q9 S(QF(KF91( ;., 9JJS(- -6;&6 2 ?nicializa ;. con la direccin donde comienza la tabla F91( 6&, $ .&6- -6;&6 497?Q9 (K7S hace que al final el contenido de 6& se "D !a que es el $to. elemento de la tabla ! 6& antes de .&6- -6;&6 contenia el valor $. %ara finalizar con las instrucciones de transferencia veremos un grupo de tres instrucciones) : &(6 o cargar direccin efectiva. : &7S o cargar el puntero en 7S. : &(S o cargar el puntero en (S. denominadas de transferencia de direcciones. &a primera, &(6, carga el desplazamiento u 9JJS(- correspondiente al operando fuente en el operando destino. %or ejemplo, la instruccin F91( ;., 9JJS(- -6;&6 del ejemplo anterior sera equivalente a &(6 ;., -6;&6. &a segunda, &7S, se utiliza para cargar el valor del segmento de una variable en el registro 7S ! el desplazamiento correspondiente en el registro o posicin de memoria indicada en la instruccin. %or ejemplo, la instruccin &7S ;., KUF" hara esquem'ticamente lo siguiente)

&a tercera ! ultima de las instrucciones, &(S, es similar a &7S, con la nica salvedad de que el valor del segmento se carga sobre el registro de segmento (S en vez del 7S. 1.2. SUMA 0 RESTA. &as instrucciones 677 ! SU; realizan sumas ! restas sencillas de datos binarios. &os nmeros binarios negativos est'n representados en la forma de complemento a dos) ?nvierta todos los bits del numero positivo ! sume ". &os formatos generales para las instrucciones 677 ! SU; son)

4omo en otras instrucciones, no e8isten operaciones directas de memoria a memoria. (l ejemplo siguiente utiliza el registro 6. para sumar X9576 a X957;)

X9576 7X "GH 27efine X9576 X957; 7X G$ 27efine X957; ... F91 6., X9576 2Fueve X9576 al 6. 677 6., X957; 2Suma X957; al 6. F91 X957;, 6. 2Fueve 6. a X957;

&a figura D.". proporciona ejemplos de 677 ! SU; para el procesamiento de valores en un b!te ! en una palabra. (l procedimiento ;" 677 utiliza 677 para procesar b!tes ! el procedimiento 4" SU; utiliza SU; para procesar palabras.

-?-&(

%"H677 *49F+ 9peraciones 677 ! SU; .F97(& SF6&& .497( 95Q " = ;(Q?K) ZF% S=95- F6?K 2:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ;/-(6 7; D#= 276-9S ;/-(; 7; # = ;/-(4 7; "D= X9576 7X # = X957; 7X G = X9574 7X " = 2:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: F6?K %594 K(65 2%rocedimiento principal) 46&& ;" 677 2&lama a la rutina 677 46&& 4" SU; 2&lama a la rutina SU; ?KG"= F6?K (K7% 2 (jemplos de suma *677+ de b!tes) 2:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ;" 677 %594 F91 6&, ;/-(6 F91 ;&, ;/-(; 677 6&, ;& 2registro a registro 677 6&, ;/-(4 2memoria a registro 677 ;/-(6, ;& 2registro a memoria 677 ;&, " = 2inmediato a registro 677 ;/-(6, G$= 2inmediato a memoria 5(;" 677 (K7% 2 (jemplos de resta *SU;+ de palabras)

2:::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 4" SU; %594 F91 6., X9576 F91 ;., X957; SU; 6.,;. 25egistro a registro SU; 6.,X9574 2Femora de registro SU; X9576, ;. 25egistro de memoria SU; ;., " = 2?nmediato de registro SU; X9576, G$D= 2?nmediato de memoria 5(4" SU; (K7% (K7 ;(Q?K

De5-o#da&ien"o5 (ste alerta con los desbordamientos en las operaciones aritm3ticas. /a que un b!te solo permite el uso de un bit de signo ! siete de datos *desde :"GA hasta P"GC+, una operacin aritm3tica puede e8ceder con facilidad la capacidad de un registro de un b!te. / una suma en el registro 6&, que e8ceda su capacidad puede provocar resultados inesperados.

1.%. O!ERANDOS LOGI OS.

&a lgica booleana es importante en el dise>o de circuitos ! tiene un paralelo en la lgica de programacin. &as instrucciones para lgica booleana son 6K7, 95, .95, -(S- ! K9-, que pueden usarse para poner bits en o en " ! para manejar datos 6S4?? con propsitos aritm3ticos. (l formato general para las operaciones booleanas es)

Netiqueta )O [ operacin [ \registroEmemoria], \registroEmemoriaEinmediato][

(l primer operando se refiere a un b!te o palabra en un registro o memoria ! es el nico valor que es cambiado. (l segundo operando hace referencia a un registro o a un valor inmediato. &a operacin compara los bits de los dos operandos referenciados ! de acuerdo con esto establece las banderas 4J, 9J, %J, SJ ! RJ. AND. Si ambos bits comparados son ", establece el resultado en ". &as dem's condiciones dan como resultado . OR. Si cualquiera *o ambos+ de los bits comparados es ", el resultado es ". Si ambos bits est'n en , el resultado es . 2OR. Si uno de los bits comparados es ! el otro ", el resultado es ". Si ambos bits comparados son iguales *ambos o ambos "+, el resultado es . TEST. (stablece las banderas igual que lo hace 6K7, pero no cambia los bits de los operandos. &as operaciones siguientes 6K7, 95 ! .95 ilustran los mismos valores de bits como operandos)

5esultado)

6K7 " " "" "

95 " " "" """

.95 " " "" ""

(s til recordar la siguiente regla) el empleo de 6K7 con bits (jemplos de operaciones booleanas.

es

! el de 95 con bits " es ".

%ara los siguientes ejemplos independientes, suponga que 6& contiene "" contiene " """ ) ".: 6K7 G.: 6K7 H.: 6K7 #.: 95 $.: 95 D.: .95 C.: .95 6&,;= 2(stablece 6& a " " 6&, = 2(stablece 6& a 6&, J= 2(stablece 6& a " " ;=,6& 2(stablece ;= a "" " "" " 4&,4& 2%one en uno SJ ! RJ 6&,6& 2(stablece 6& a 6&, JJ= 2(stablece 6& a "" " "

" " ! el ;=

&os ejemplos G ! D muestran formas de limpiar un registro, ! ponerlo a cero. (l ejemplo H pone a cero los cuatro bits mas a la izquierda de 6&. -(St acta igual que 6K7, pero solo establece las banderas. 6qu est'n algunos ejemplos )

".: -(SZKR G.: -(SZKR H.: -(SZKR

;&, """" ... 6&, ... 7., JJ= ...

2 6lguno de los bits de mas a la 2 izquierda es ;& en diferentes de ceroU 2 6& contiene 2 un numero imparU 2 (l 7. contiene 2 un valor ceroU

";

La in5"#u((i*n NOT. &a instruccin K9- solo invierte los bits en un b!te o palabra en un registro o en memoria2 esto es, convierte los ceros en unos ! los unos en ceros. (l formato general es)

[ Netiqueta)O [ K9- [ \registroEmemoria] [

%or ejemplo si el 6& contiene "" " ", la instruccin K9- 6& cambia el 6& a """ " *el resultado es el mismo de .95 6&, JJ=+. &as banderas no son afectadas. 6.4. CORRIMIENTO Y ROTACION. ORRIMIENTO DE BITS.

&as instrucciones de corrimiento, que son parte de la capacidad lgica de la computadora, pueden realizar las siguientes acciones) ". =acer referencia a un registro o direccin de memoria. G. 5ecorre bits a la izquierda o a la derecha. H. 5ecorre hasta A bits en un b!te, "D bits en una palabra ! HG bits en una palabra doble. #. 4orrimiento lgico *sin signo+ o aritm3tico *con signo+.

(l segundo operando contiene el valor del corrimiento, que es una constante *un valor inmediato+ o una referencia al registro 4&. %ara los procesadores A AAEA AD, la constante inmediata solo puede ser "2 un valor de corrimiento ma!or que " debe estar contenido en el registro 4&. %rocesadores posteriores permiten constantes de corrimiento inmediato hasta H". (l formato general para el corrimiento es

[ Netiqueta)O [ 4orrim. [ \registroEmemoria], \4&Einmediato] [

o##i&ien"o de -i"5 Ea(ia la de#e(Ea. &os corrimientos hacia la derecha *S=5 ! S65+ mueven los bits hacia la derecha en el registro designado. (l bit recorrido fuera del registro mete la bandera de acarreo. &as instrucciones de corrimiento a la derecha estipulan datos lgicos *sin signo+ o aritm3ticos *con signo+)

&as siguientes instrucciones relacionadas ilustran S=5 ! datos con signo)

INSTRU

ION

AL

OMENTARIO

F91 4&, H F91 6&, " "" """; S=5 6&, " S=5 6&, 4& S=5 6., H

2 " "" """ 2 "" "" "" Un corrimiento a la derecha 2 " "" -res corrimientos adicionales a la derecha 2 1'lido para A "AD ! procesadores posteriores

(l primer S=5 desplaza el contenido de 6& un bit hacia la derecha. (l bit de mas a la derecha es enviado a la bandera de acarreo, ! el bit de mas a la izquierda se llena con un cero. (l segundo S=5 desplaza tres bits mas al 6&. &a bandera de acarreo contiene de manera sucesiva ", " ! 2 adem's, tres bits son colocados a la izquierda del 6&.

S65 se difiere de S=5 en un punto importante) S65 utiliza el bit de signo para llenar el bit vacante de mas a la izquierda. 7e esta manera, los valores positivos ! negativos retienen sus signos. &as siguientes instrucciones relacionadas ilustran S65 ! datos con signo en los que el signo es un bit ")

INSTRU

ION

AL

OMENTARIO

F91 4&, H F91 6&, " "" """; S=5 6&, " S=5 6&, 4& S=5 6., H

22 " "" """ 2 "" "" "" Un corrimiento a la derecha 2 " "" -res corrimientos adicionales a la derecha 2 1'lido para A "AD ! procesadores posteriores

(n especial, los corrimientos a la derecha son tiles para *dividir entre G+ obtener mitades de valores ! son mucho mas r'pidas que utilizar una operacin de divisin. 6l terminar una operacin de corrimiento, puede utilizar la instruccin Z4 *Salta si ha! acarreo+ para e8aminar el bit desplazado a la bandera de acarreo.

o##i&ien"o de -i"5 a la iFGuie#da. &os corrimientos hacia la izquierda *S=& ! S6&+ mueven los bits a la izquierda, en el registro designado. S=& ! S6& son id3nticos en su operacin. (l bit desplazado fuera del registro ingresa a la bandera de acarreo. &as instrucciones de corrimiento hacia la izquierda estipulan datos lgicos *sin signo+ ! aritm3ticos *con signo+)

S=&) 7esplazamiento lgico a la izquierda

S6&) 7esplazamiento aritm3tico a la izquierda

&as siguientes instrucciones relacionadas ilustran S=& para datos sin signo)

INSTRU

ION

AL

OMENTARIO

F91 4&, H F91 6&, " "" """; S=5 6&, " S=5 6&, 4& S=5 6., H

2 " "" """ 2 "" """ Un corrimiento a la izquierda 2 """ -res corrimientos mas 2 1'lido para A "AD ! procesadores posteriores

(l primer S=& desplaza el contenido de 6& un bit hacia la izquierda. (l bit de mas a la izquierda ahora se encuentra en la bandera de acarreo, ! el ultimo bit de la derecha del 6& se llena con cero. (l segundo S=& desplaza tres bits mas a el 6&. &a bandera de acarreo contiene en forma sucesiva , " ! ", ! se llena con tres ceros a la derecha del 6&.

&os corrimientos a la izquierda llenan con cero el bit de mas a la derecha. 4omo resultado de esto, S=& ! S6& don id3nticos. &os corrimientos a la izquierda en especial son tiles para duplicar valores ! son mucho mas r'pidos que usar una operacin de multiplicacin. 6l terminar una operacin de corrimiento, puede utilizar la instruccin Z4 *Salta si ha! acarreo+ para e8aminar el bit que ingreso a la bandera de acarreo.

ROTA ION DE BITS +De57laFa&ien"o (i#(ula#,

&as instrucciones de rotacin, que son parte de la capacidad lgica de la computadora, pueden realizar las siguientes acciones)

". =acer referencia a un b!te o a una palabra. G. =acer referencia a un registro o a memoria. H. 5ealizar rotacin a la derecha o a la izquierda. (l bit que es desplazado fuera llena el espacio vacante en la memoria o registro ! tambi3n se copia en la bandera de acarreo. #. 5ealizar rotacin hasta A bits en un b!te, "D bits en una palabra ! HG bits en una palabra doble. $. 5ealizar rotacin lgica *sin signo+ o aritm3tica *con signo+.

(l segundo operando contiene un valor de rotacin, el cual es una constante *un valor inmediato+ o una referencia al registro 4&. %ara los procesadores A AAEA AD, la constante inmediata solo puede ser "2 un valor de rotacin ma!or que " debe estar contenido en el registro 4&. %rocesadores posteriores permiten constantes inmediatas hasta el H". (l formato general para la rotacin es)

[ Netiqueta)O [ 5otacin [ \registroEmemoria], \4&Einmediato] [

Ro"a(i*n a la de#e(Ea de -i"5 &as rotaciones a la derecha *595 ! 545+ desplazan a la derecha los bits en el registro designado. &as instrucciones de rotacin a la derecha estipulan datos lgicos *sin signo+ o aritm3ticos *con signo+)

&as siguientes instrucciones relacionadas ilustran 595) INSTRU ION B> OMENTARIO

F91 4&, H F91 ;=, " "" """; S=5 ;=, " S=5 ;=, 4& S=5 ;., H

2 " "" """ 2 "" "" "" Una rotacin a la derecha 2 " "" -res rotaciones a la derecha 2 1'lido para A "AD ! procesadores posteriores

(l primer 595 desplaza el bit de mas a la derecha del ;= a la posicin vacante de mas a la izquierda. &a segunda ! tercera operaciones 595 realizan la rotacin de los tres bits de mas a la derecha. 545 provoca que la bandera de acarreo participe en la rotacin. 4ada bit que se desplaza fuera de la derecha se mueve al 4J ! el bit del 4J se mueve a la posicin vacante de la izquierda.

Ro"a(i*n a la iFGuie#da de -i"5 &as rotaciones a la izquierda *59& ! 54&+ desplazan a la izquierda los bits del registro designado. &as instrucciones de rotacin a la izquierda estipulan datos lgicos *sin signo+ ! aritm3ticos *con signo+)

&as siguientes instrucciones relacionadas ilustran 59&) INSTRU ION BL OMENTARIO

F91 4&, H F91 ;&, " "" """; S=5 ;&, " S=5 ;&, 4& S=5 ;., H

2 " "" """ 2 "" "" "" Una rotacin a la izquierda 2 " "" -res rotaciones a la izquierda 2 1'lido para A "AD ! procesadores posteriores

(l primer 59& desplaza el bit de mas a la izquierda del ;& a la posicin vacante de mas a la derecha. &a segunda ! tercera operaciones 59& realizan la rotacin de los tres bits de mas a la izquierda. 7e manera similar a 545, 54& tambi3n provoca que la bandera de acarreo participe en la rotacin. 4ada bit que se desplaza fuera por la izquierda se mueve al 4J, ! el bit del 4J se mueve a la posicin vacante de la derecha. %uede usar la instruccin Z4 *salta si ha! acarreo+ para comprobar el bit rotado hacia la 4J en el e8tremo de una operacin de rotacin.

1./. MULTI!LI A ION 0 DIVISION. MULTI!LI A ION

%ara la multiplicacin, la instruccin FU& maneja datos sin signo ! la instruccin ?FU& *multiplicacin entera+ maneja datos con signo. 6mbas instrucciones afectan las banderas de acarreo ! de desbordamiento. 4omo programador, usted tiene el control sobre el formato de los datos que procesa, ! tiene la responsabilidad de seleccionar la instruccin de multiplicacin apropiada. (l formato general de FU& e ?FU& es )

[ Netiqueta)O [ FU&E?FU& [ registroEmemoria [ &as operaciones de multiplicacin b'sicas son b!te a b!te, palabra por palabra ! palabras dobles por palabra dobles.

B6"e 7o# -6"e %ara multiplicar dos nmeros de un b!te, el multiplicando esta en el registro 6& ! el multiplicador es un b!te en memoria o en otro registro. %ara la instruccin FU& 7&, la operacin multiplica el contenido del 6& por el contenido del 7&. (l producto generado esta en el registro 6.. &a operacin ignora ! borra cualquier informacin que pueda estar en el 6=.

!ala-#a 7o# 7ala-#a %ara multiplicar dos nmeros de una palabra, el multiplicando esta en el registro 6. ! el multiplicador es una palabra en memoria o en otro registro. %ara la instruccin FU& 7., la operacin multiplica el contenido del 6. por el contenido del 7.. (l producto generado es una palabra doble que necesita dos registros) la parte de orden alto *mas a la izquierda+ en el 7. ! la parte de orden bajo *mas a la derecha+ en el 6.. &a operacin ignora ! borra cualquier informacin que puede estar en el 7..

!ala-#a do-le 7o# 7ala-#a do-le

%ara multiplicar dos nmeros de palabras dobles, el multiplicando esta en el registro (6. ! el multiplicador es una palabra doble en memoria o en otro registro. (l producto es generado en el par (7.)(6.. &a operacin ignora ! borra cualquier informacin que !a este en el (7..

(n los ejemplos siguientes, el multiplicador esta en un registro, el cual especifica el tipo de operacin)

INSTRU FU& 4& FU& ;. FU& (;.

ION

MULTI!LI ADOR b!te palabra palabra doble

MULTI!LI ANDO 6& 6. (6.

!RODU TO 6. 7.)6. (7.)(6.

(n los ejemplos siguientes, los multiplicadores est'n definidos en memoria) ;/-(" 7; X957" 7X 7X957" 77 U U U

O!ERA ION FU& ;/-(" FU& X957" FU& 7X957"

MULTI!LI ADOR ;/-(" X957" 7X957"

MULTI!LIANDO 6& 6. (6.

!RODU TO 6. 7.)6. (7.)(6.

DIVISION

%ara la divisin, la instruccin 7?1 *dividir+ maneja datos sin signo ! la ?7?1 *divisin entera+ maneja datos con signo. Usted es responsable de seleccionar la instruccin apropiada. (l formato general para 7?1E?7?1 es)

[ Netiqueta)O [ ?7?1E7?1 [ \registroEmemoria] [

&as operaciones de multiplicacin b'sicas son b!te entre b!te, palabra entre palabra ! palabras dobles entre palabra dobles.

!ala-#a en"#e 7ala-#a 6qu el dividendo esta en el 6. ! el divisor es un b!te en memoria o en otro registro. 7espu3s de la divisin, el residuo esta en el 6= ! el cociente esta en el 6&. /a que un cociente de un b!te es mu! peque>o :si es sin signo, un m'8imo de PG$$ *JJ=+ ! con signo P"GC *CJ=+: esta operacin tiene un uso limitado.

!ala-#a do-le en"#e 7ala-#a %ara esta operacin, el dividendo esta en el par 7.)6. ! el divisor es una palabra en memoria o en otro registro. 7espu3s de la divisin, el residuo esta en el 7. ! el cociente esta en el 6.. (l cociente de una palabra permite para datos sin signo un m'8imo de PHG, CDC *JJJJ=+ ! con signo P"D, HAH *CJJJ=+. -enemos)

!ala-#a (uHd#u7le en"#e 7ala-#a do-le 6l dividir una palabra cu'druple entre una palabra doble, el dividendo esta en el par (7.)(6. ! el divisor esta en una palabra doble en memoria o en otro registro. 7espu3s de la divisin, el residuo esta en el (7. ! el cociente en el 6(..

(n los ejemplos siguientes, de 7?1, los divisores est'n en un registro, que determina el tipo de operacin)

O!ERA ION 7?1 4& 7?1 4. 7?1 (;.

DIVISOR b!te palabra palabra doble

DIVIDENDO 6. 7.)6. (7.)(6.

O IENTE 6& 68 (6.

RESIDUO 6= 7. (7.

(n los ejemplos siguientes de 7?1, los divisores est'n definidos en memoria)

;/-(" 7; X957" 7X 7X957" 77 ...

U U U DIVISOR DIVIDENDO O IENTE 6& 6. (6. RESIDUO 6= 7. (7.

7?1 ;/-(" ;/-(" 7?1 X957" X957" 7?1 7X957" 7X957" 1.1.

6. 7.)6. (7.)(6.

OM!ARA ION.

LA INSTRU

ION M!

&a instruccin 4F% pro lo comn es utilizada para comparar dos campos de datos, uno de los cuales est'n contenidos en un registro. (l formato general para 4F% es)

[ Netiqueta)O [ 4F% [ \registroEmemoria], \registroEmemoriaEinmediato] [ (l resultado de una operacin 4F% afecta la banderas 6J, 4J, 9J, %J, SJ ! RJ, aunque no tiene que probar estas banderas de forma individual. (l cdigo siguiente prueba el registro ;. por un valor cero) . 4F% ;., 24ompara ;8 con cero ZR ;$ 2Si es cero salta a;$ . 2*6ccin si es diferente de cero+ . ;$ ) ... 27estino del salto, si ;. es cero

Si el ;. tiene cero, cmp establece RJ a " ! puede o no cambiar la configuracin de otras banderas. &a instruccin ZR *salta si es cero+ solo prueba la bandera RJ. /a que RJ tiene " *que significa una condicin cero+, ZR transfiere el control *salta+ a la direccin indicada por el operando ;$ . 9bserve que la operacin compara el primer operando con el segundo2 por ejemplo, el valor del primer operando es ma!or que, igual o menor que el valor del segundo operandoU

LA INSTRU

ION M!S

4F%S compara el contenido de una localidad de memoria *direccionada por 7S)S?+. 7ependiendo de la bandera de direccin, 4F%S incrementa o disminu!e tambi3n los registros S? ! 7? en " para b!tes, en G para palabras ! en # para palabras dobles. &a operacin establece las banderas 6J, 4J, 9J, %J, SJ ! RJ. 4uando se combinan con un prefijo 5(% ! una longitud en el 4., de manera sucesiva 4F%S puede comparar cadenas de cualquier longitud. %ero observe que 4F%S proporciona una comparacin alfanum3rica, esto es, una comparacin de acuerdo a con los valores 6S4??. 4onsidere la comparacin de dos cadenas que contienen Z(6K ! Z96K. Una comparacin de izquierda a derecha, tiene el resultado siguiente)

Z)Z ?guales ()9 7iferentes *( es menor+ 6)6 ?guales K)K ?guales

Una comparacin de los # b!tes termina con una comparacin de K con K *iguales+. 6hora !a que los dos nombres no son id3nticos, la operacin debe terminar tan pronto como la comparacin entre G caracteres sea diferente. 6lgunas derivaciones de 4F%S son las siguientes) 4F%S;. 4ompara b!tes. 4F%S7. 4ompara palabras dobles. 4F%SX. 4ompara palabras.

6 continuacin se muestra la codificacin del uso del 4F%S ! sus derivaciones)

-?-&(

%"G4F%S- *49F+ Uso de 4F%S para operaciones en cadenas .F97(& SF6&& .497( 95Q " = ;(Q?K) ZF% S=95- F6?K 2::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: K9F" 7; Y6ssemblersY 2(lementos de datos K9FG 7; Y6ssemblersY K9FH 7; " 7U% *Y Y+ 2::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: F6?K %594 K(65 2%rocedimiento principal 4&7 2?zquierda a derecha F91 4., " 2?niciar para " b!tes &(6 7?, K9FG &(6 S?, K9F" 5(%( 4F%S; 24ompare K9F")K9FG ZK( QG 2Ko es igual, saltarlo F91 ;=, " 2?gual, fijar ;= QG ) F91 4., " 2?niciar para " b!tes &(6 7?, K9FH &(6 S?, K9FG 5(%( 4F%S; 24ompare K9FG)K9FH Z( QH 2?gual, salir F91 ;&, G 2Ko es igual, fijar ;&

QH ) F91 ?KF6?K (K7% (K7 6., #4 G"= ;(Q?K = 2Salir a 79S

1.3. SALTOS

ONDI IONALES E IN ONDI IONALES.

=asta este punto los programas que hemos e8aminado han sido ejecutados en forma lineal, esto es con una instruccin secuencialmente a continuacin de otra. Sin embargo, rara vez un programa programable es tan sencillo. &a ma!ora de los programas constan de varios ciclos en los que una serie de pasos se repite hasta alcanzar un requisito especifico ! varias pruebas para determinar que accin se realiza de entre varias posibles. 5equisitos como este implican la transferencia de control a la direccin de una instruccin que no sigue de inmediato de la que se esta ejecutando actualmente. Una transferencia de control puede ser hacia adelante, para ejecutar una serie de pasos nuevos, o hacia atr's, para volver a ejecutar los mismos pasos. 4iertas instrucciones pueden transferir el control fuera del flujo secuencial normal a>adiendo un valor de desplazamiento al ?%.

Di#e((ione5 o#"a: (e#(ana 6 lejana Una operacin de salto alcanza una direccin corta por medio de un desplazamiento de un b!te, limitado a una distancia de :"GA a "GC b!tes. Una operacin de salto alcanza una direccin cercana por medio de un desplazamiento de una palabra, limitado a una distancia de :HG, CDA a HG, CDC b!tes dentro del mismo segmento. Una direccin lejana puede estar en otro segmento ! es alcanzada por medio de una direccin de segmento ! un desplazamiento2 46&& es la instruccin normal para este propsito. &a tabla siguiente indica las reglas sobre distancias para la operaciones ZF%, &99% ! 46&&. =a! poca necesidad de memorizar estas reglas, !a que el uso normal de estas instrucciones en rara ocasin causa problemas.

E"iGue"a5 de in5"#u((ione5 &as instrucciones ZF%, Znnn *salto condicional+ ! &99% requieren un operando que se refiere a la etiqueta de una instruccin. (l ejemplo siguiente salta a 6B , que es una etiqueta dada a una instruccin F91)

ZF% 6B ... 6B ) F91 6=, ...

&a etiqueta de una instruccin, tal como 6B ), terminada con dos puntos *)+ para darle atributo de cercana : esto es, la etiqueta esta dentro de un procedimiento en el mismo segmento de cdigo. uidado) Un error comn es la omisin de los dos puntos. Kote que una etiqueta de direccin en un operando de instruccin *como ZF% 6B + no tiene un car'cter de dos puntos.

La in5"#u((i*n JM! +Sal"o in(ondi(ional, Una instruccin usada comnmente para la transferencia de control es la instruccin ZF% *jump, salto, bifurcacin+. Un salto es incondicional, !a que la operacin transfiere el control bajo cualquier circunstancia. -ambi3n ZF% vaca el resultado de la instruccin previamente procesada2 por lo que, un programa con muchas operaciones de salto puede perder velocidad de procesamiento. (l formato general para ZF% es)

[ NetiquetaO [ ZF% [ direccin corta, cercana o lejana [

Una operacin ZF% dentro del mismo segmento puede ser corta o cercana *o de manera t3cnica, lejana, si el destino es un procedimiento con el atributo J65+. (n su primer paso por un programa fuente, el ensamblador genera la longitud de cada instruccin. Sin embargo, una instruccin ZF% puede ser de dos o tres b!tes de longitud. Una operacin ZF% a una etiqueta dentro de :"GA a P "GC b!tes es un salto corto. (l ensamblador genera un b!te para la operacin *(;+ ! un b!te para el operando. (l operando acta como un valor de desplazamiento que la computadora suma al registro ?% cuando se ejecuta el programa. (l ensamblador !a puede haber encontrado el operando designado *un salto hacia atr's+ dentro de :"GA b!tes, como en)

6$ ) ... ZF% 6$

(n este caso, el ensamblador genera una instruccin de maquina de dos b!tes. Una ZF% que e8cede :"GA a "GC b!tes se convierte en un salto cercano, para que el ensamblador genere un cdigo de maquina diferente *(B+ ! un operando de dos b!tes *procesadores A AAEA AD+ o un operando de cuatro b!tes *procesadores A HAD ! posteriores+. (n un salto hacia adelante, el

ensamblador aun no ha encontrado el operando designado)

ZF% 6B ... 6B )

/a que algunas versiones del ensamblador no saben en este punto si el salto es corto o cercano, generan de forma autom'tica una instruccin de tres b!tes.

-?-&(

F6?K

%age D ,"HG % AZUF% *49F+ Uso de ZF% para iterar .F97(& SF6&& .497( 95Q " = %594 K(65 F91 6., " 2?niciacin de 6., F91 ;., " 2;. ! F91 4., " 24. a " 677 677 S=& ZF% (K7% (K7 6., " ;., 6. 4., " 6G F6?K 2Sumar " a 6. 2Sumar 6. a ;. 2Fultiplicar por dos a 4. 2Saltar a la etiqueta 6G

6G )

F6?K

La in5"#u((i*n LOO! &a instruccin &99%, requiere un valor inicial en el registro 4.. (n cada iteracin, &99% de forma autom'tica disminu!e " de 4.. Si el valor en el 4. es cero, el control pasa a la instruccin que sigue2 si el valor en el 4. no es cero, el control pasa a la direccin del operando. &a distancia debe ser un salto corto, desde :"GA hasta P"GC b!tes. %ara una operacin que e8ceda este limite, el ensamblador enva un mensaje como @salto relativo fuera de rango@. (l formato general de la instruccin &99% es)

[ Netiqueta)O [ &99% [ direccin corta [

(l siguiente programa muestra el funcionamiento de la instruccin &99%.

-?-&(

%age D ,"HG % A&99% *49F+ ?lustracin de &99% .F97(& SF6&& .497( 95Q " =

F6?K

%594 F91 F91 F91 F91 677 677 S=& &99% F91 (K7% (K7

K(65 6., " ;., " 4., " 4.," 6., " ;., 6. 7., " 6G 6., #4 = F6?K

6G )

2?niciacin de 6., 2;. ! 24. a " 2?niciar 2Kmero de iteraciones 2Sumar " a 6. 2Sumar 6. a ;. 2Fultiplicar por dos a 7. 2?terar si es diferente de cero 2Salida a 79S

F6?K

(8isten dos variaciones de la instruccin &99%, ambas tambi3n decrementan el 4. en ". &99%(E&99%R *repite el ciclo mientras sea igual o repite el ciclo mientras sea cero+ continua el ciclo mientras que el valor en el 4. es cero o la condicin de cero esta establecida. &99%K(E&99%KR *repite el ciclo mientras no sea igual o repite el ciclo mientras sea cero+ continua el ciclo mientras el valor en el 4. no es cero o la condicin de cero no esta establecida.

INSTRU

IONES DE SALTO

ONDI IONAL

(l ensamblador permite usar una variedad de instrucciones de salto condicional que transfieren el control dependiendo de las configuraciones en el registro de banderas. %or ejemplo, puede comparar dos campos ! despu3s saltar de acuerdo con los valores de las banderas que la comparacin establece. (l formato general para el salto condicional es)

[ Netiqueta)O [ Znnn [ direccin corta [

4omo !a se e8plico la instruccin &99% disminu!e el registro 4.2 si es diferente de cero, transfiere el control a la direccin del operando. podra reemplazar el enunciado &99% 6G de la figura anterior con dos enunciados : uno que decremente el 4. ! otro que realice un salto condicional)

7(4 4. 2(quivalente a &99% ZKR 6G ...

7(4 ! ZKR realizan e8actamente lo que hace &99%. 7(4 decrementa en " 4. ! pone a " o a la bandera de cero *RJ+ en el registro de banderas. 7espu3s ZKR prueba la configuracin de la bandera de cero2 si el 4. es diferente de cero, el control pasa a 6G , ! si el 4. es cero el control pasa a la siguiente instruccin hacia abajo

Da"o5 (on 5igno 6 5in 5igno 7istinguir el propsito de los saltos condicionales debe clarificar su uso. (l tipo de datos *sin signo o con signo+ sobre los que se realizan las comparaciones o la aritm3tica puede

determinar cual es la instruccin a utilizar. Un dato sin signo trata todos los bits como bits de datos2 ejemplos tpicos son las cadenas de caracteres, tal como nombres o direcciones, ! valores num3ricos tal como nmeros de cliente. Un dato con signo trata el bit de mas a la izquierda como un signo, en donde es positivo ! " es negativo. (n el ejemplo siguiente, el 6. contiene "" instruccin "" ! el ;. contiene " "" . &a siguiente

4F% 6., ;.

compara el contenido de 6. con el contenido del ;.. %ara datos sin signo, el valor 6. es ma!or2 sin embargo, para datos con signo el valor 6. es menor a causa del signo negativo. Saltos con base en datos sin signo &as instrucciones siguientes de salto condicional se aplican a datos sin signo)

4ada una de estas pruebas las puede e8presar en uno de dos cdigos simblicos de operacin.

Sal"o5 (on -a5e en da"o5 (on 5igno &as instrucciones siguientes de salto condicional se aplican a datos con signo)

!#ue-a5 a#i"&'"i(a5 e57e(iale5 &as siguientes instrucciones de salto condicional tienen usos especiales)

Ko espere memorizar todas estas instrucciones2 sin embargo, como recordatorio note que un salto para datos sin signo es igual, superior o inferior, mientras que un salto para datos con signo es igual, ma!or que o menor. &os saltos que prueban banderas de acarreo, de desbordamiento ! de paridad tienen propsitos nicos.

3.1. DE$INI ION.

(l segmento de cdigo contiene el cdigo ejecutable de un programa. -ambi3n tiene uno o mas procedimientos, definidos con la directiva %594. Un segmento que tiene solo un procedimiento puede aparecer como sigue) NOMBRE nomsegmento nomproc O!ERA ION S(QF(K%594 . . O!ERANDO %656 J65 OMENTARIO

2Un 2procedimiento 2dentro

nomproc nomsegmento

. (K7% (K7S

2del segmento 2de cdigo

(l nombre del procedimiento debe estar presente, ser nico ! seguir las reglas para la formacin de nombres del lenguaje. (l operando far en este caso esta relacionado con la ejecucin del programa. 4uando usted solicita la ejecucin de un programa, el cargador de programas del 79S utiliza este nombre de procedimiento como el punto de entrada para la primera instruccin a ejecutar. &a directiva (K7% indica el fin de un procedimiento ! contiene el mismo nombre que el enunciado %594 para permitir que el ensamblador relacione a los dos. /a que los procedimientos deben estar por completo dentro de un segmento, (K7% define el final de un procedimiento antes que (K7S defina el final de un segmento.

3.2. LLAMADA DE !RO EDIMIENTOS.

=asta ahora los segmentos de cdigo han consistido solo en un procedimiento, codificado como) ;(Q?K %594 J65 . . . ;(Q?K (K7%

(n este caso el operador J65 informa al sistema que la direccin indicada es el punto de entrada para la ejecucin del programa, mientras que la directiva (K7% define el final del procedimiento. Sin embargo, un segmento de cdigo puede tener cualquier numero de procedimientos, todos distinguidos por %594 ! (K7%. Un procedimiento llamado *o subrutina+ es una seccin de cdigo que realiza una tarea definida ! clara *tal como ubicar el cursor o bien obtener entrada del teclado+. &a organizacin de un programa en procedimientos proporciona los beneficios siguientes) ". 5educe la cantidad de cdigo, !a que un procedimiento comn puede ser llamado desde cualquier lugar en el segmento de cdigo. G. Jortalece la mejor organizacin del programa. H. Jacilita la depuracin del programa, !a que los errores pueden ser aislados con ma!or claridad. #. 6!uda en el mantenimiento progresivo de programas, !a que los procedimientos son identificados de forma r'pida para su modificacin.

O7e#a(ione5

ALL 6 RET

&a instruccin 46&& transfiere el control a un procedimiento llamado, ! la instruccin 5(regresa del procedimiento llamado al procedimiento original que hizo la llamada. 5(- debe ser la ultima instruccin en un procedimiento llamado. &os formatos generales para 46&& ! 5(son)

(l cdigo objeto particular que 46&& ! 5(- generan depende de si la operacin implica un procedimiento K(65 *cercano+ o un procedimiento J65 *lejano+.

Lla&ada 6 #eg#e5o (e#(ano5. Una llamada *46&&+ a un procedimiento dentro del mismo segmento es cercana ! realiza lo siguiente)

7isminu!e el S% en G *una palabra+ Fete el ?% *que contiene el desplazamiento de la instruccin que sigue al 46&&+ en la pila. ?nserta la direccin del desplazamiento del procedimiento llamado en el ?% *esta operacin vaca el resultado de la instruccin previamente procesada+,

Un 5(- que regresa desde un procedimiento cercano realiza lo siguiente) Saca el antiguo valor de ?% de la pila ! lo enva al ?% *lo cual tambi3n vaca el resultado de la instruccin previamente procesada+. ?ncrementa el S% en G.

6hora el 4S)?% apunta a la instruccin que sigue al 46&& original en la llamada del procedimiento, en donde se reasume la ejecucin. Lla&ada 6 #eg#e5o lejano5. Una llamada *46&&+ lejana llama a un procedimiento etiquetado con J65, tal vez en un segmento de cdigo separado. Un 46&& lejano mete a la pila al 4S ! al ?%, ! 5(- los saca de la pila.

page D ,"HG % A46&&% *(.(+ &lamada a procedimientos .F97(& SF6&& .S-64S D# .76-6 2::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: .497( ;(Q?K %594 J65 46&& ;" 2&lama a ;" 2 ... F91 6.,#4 = 2Salida a 79S ?K- G"= ;(Q?K (K7% 2::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ;" %594 K(65 46&& 4" 2&lama a 4" 2 ... 5(27e regreso ;" (K7% 2<uien llama 2::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: (K7 ;(Q?K -?-&(

3.2. LLAMADA DE !RO EDIMIENTOS. =asta ahora los segmentos de cdigo han consistido solo en un procedimiento, codificado como) ;(Q?K %594 J65 . . . ;(Q?K (K7%

(n este caso el operador J65 informa al sistema que la direccin indicada es el punto de entrada para la ejecucin del programa, mientras que la directiva (K7% define el final del procedimiento. Sin embargo, un segmento de cdigo puede tener cualquier numero de procedimientos, todos distinguidos por %594 ! (K7%. Un procedimiento llamado *o subrutina+ es una seccin de cdigo que realiza una tarea definida ! clara *tal como ubicar el cursor o bien obtener entrada del teclado+. &a organizacin de un programa en procedimientos proporciona los beneficios siguientes) ". 5educe la cantidad de cdigo, !a que un procedimiento comn puede ser llamado desde cualquier lugar en el segmento de cdigo. G. Jortalece la mejor organizacin del programa. H. Jacilita la depuracin del programa, !a que los errores pueden ser aislados con ma!or claridad. #. 6!uda en el mantenimiento progresivo de programas, !a que los procedimientos son identificados de forma r'pida para su modificacin.

O7e#a(ione5

ALL 6 RET

&a instruccin 46&& transfiere el control a un procedimiento llamado, ! la instruccin 5(regresa del procedimiento llamado al procedimiento original que hizo la llamada. 5(- debe ser la ultima instruccin en un procedimiento llamado. &os formatos generales para 46&& ! 5(son)

(l cdigo objeto particular que 46&& ! 5(- generan depende de si la operacin implica un procedimiento K(65 *cercano+ o un procedimiento J65 *lejano+.

Lla&ada 6 #eg#e5o (e#(ano5. Una llamada *46&&+ a un procedimiento dentro del mismo segmento es cercana ! realiza lo siguiente)

7isminu!e el S% en G *una palabra+ Fete el ?% *que contiene el desplazamiento de la instruccin que sigue al 46&&+ en la pila. ?nserta la direccin del desplazamiento del procedimiento llamado en el ?% *esta operacin vaca el resultado de la instruccin previamente procesada+,

Un 5(- que regresa desde un procedimiento cercano realiza lo siguiente) Saca el antiguo valor de ?% de la pila ! lo enva al ?% *lo cual tambi3n vaca el resultado de la instruccin previamente procesada+. ?ncrementa el S% en G.

6hora el 4S)?% apunta a la instruccin que sigue al 46&& original en la llamada del procedimiento, en donde se reasume la ejecucin. Lla&ada 6 #eg#e5o lejano5. Una llamada *46&&+ lejana llama a un procedimiento etiquetado con J65, tal vez en un segmento de cdigo separado. Un 46&& lejano mete a la pila al 4S ! al ?%, ! 5(- los saca de la pila.

page D ,"HG % A46&&% *(.(+ &lamada a procedimientos .F97(& SF6&& .S-64S D# .76-6 2::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: .497( ;(Q?K %594 J65 46&& ;" 2&lama a ;" 2 ... F91 6.,#4 = 2Salida a 79S ?K- G"= ;(Q?K (K7% 2::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ;" %594 K(65 46&& 4" 2&lama a 4" 2 ... 5(27e regreso ;" (K7% 2<uien llama 2::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: (K7 ;(Q?K -?-&(

4.2. DE$INI ION DE UNA MA RO. Una definicin de macro aparece antes de que cualquier definicin de segmento. (8aminemos una definicin de una macro sencilla que inicializa los registros de segmento para un programa.(.()

?K?4?65(QS

F6459 F91 6., Tdata F91 7S, 6. F91 (S, 6. (K7F

27efine macro 2 ] 4uerpo de 2 ] la definicin 2 ] de la macro 2 Jin de la macro

(l nombre de esta macro es ?K?4?65(QS, aunque es aceptable cualquier otro nombre valido que sea nico. &a directiva F6459 en la primer lnea indica al ensamblador que las instrucciones que siguen, hasta (K7F *@fin de la macro@+, son parte de la definicin de la macro. &a directiva (K7F termina la definicin de la macro. &os nombres a que se hace referencia en la definicin de la macro, Tdata, 6., 7S ! (S, deben estar definidos en alguna parte del programa o deben ser dados a conocer de alguna otra forma al ensamblador. (n forma subsecuente se puede usar la macro:instruccion ?K?4?65(QS en el segmento de cdigo en donde quiera inicializar los registros. 4uando el ensamblador encuentra la macra: instruccion ?K?4?65(QS, busca en una tabla de instrucciones simblicas !, a falta de una entrada, busca macroinstrucciones. /a que el programa contiene una definicin de la macro ?K?4?65(QS, el ensamblador sustitu!e el cuerpo de la definicin generando instrucciones) la e8pansin de la macro. Un programa usara la macroinstruccion ?K?4?65(QS solo una vez, aunque otras macros est'n dise>adas para ser utilizadas cualquier numero de veces ! cada vez el ensamblador genera la misma e8pansin.

4.%. MANEJO DE !ARAMETROS.

%ara hacer una macro fle8ible, puede definir nombres en ella como argumentos mudos *ficticios+.&a definicin de la macro siguiente, llamada 7(S%&(Q65VFSQ, proporciona el uso de la funcin B= del 79S para desplegar cualquier mensaje. 4uando se usa la macroinstruccin el programador tiene que proporcionar el nombre del mensaje, el cual hace referencia a un 'rea de datos terminada por un signo de dlar.

7(S%&(Q65VFSQ

F6459 F(KS6Z( F91 6=, B= &(6 7., F(KS6Z( ?KG"= (K7F

2 6rgumento mudo

2 Jin de la macro

Un argumento mudo en una definicin de macro indica al ensamblador que haga coincidir su nombre con cualquier aparicin del mismo nombre en el cuerpo de la macro. %or ejemplo, el argumento mudo F(KS6Z( tambi3n aparece en la instruccin &(6. 4uando utiliza la macroinstruccin 7(S%&(Q65VFSQ, usted proporciona un par'metro como el nombre real del mensaje que ser' desplegado, por ejemplo)

7(S%&(Q65VFSQ F(KS6Z(G

(n este caso, F(KS6Z(G tiene que estar apropiadamente definido en el segmento de dato. (l par'metro en la microinstruccin corresponde al argumento mudo en la definicin original de la macro) 7efinicin de macro) 7(S%&(Q65VFSQ F6459 F(KS6Z( Facroinstruccin) 7(S%&(Q65VFSQ F(KS6Z(G *6rgumento+ *%arametro+

(l ensamblador !a ha hecho corresponder el argumento en la definicin original de la macro con la instruccin &(6 en el cuerpo de la macro. 6hora sustitu!e el *los+ par'metro*s+ de la macroinstruccin F(KS6Z(G por la presencia de F(KS6Z( en la instruccin &(6 ! la sustitu!e por cualquier otra aparicin de F(KS6Z(. Un argumento mudo puede contener cualquier nombre valido, inclu!endo un nombre de registro tal como 4.. %uede definir una macro con cualquier numero de argumentos mudos, separados por coma, hasta la columna "G de una lnea. (l ensamblador sustitu!e los par'metros de la macro instruccin por los argumentos mudos en la definicin de la macro, entrada por entrada, de izquierda a derecha.

4... MANEJO DE ETIIUETAS LO ALES.

6lgunas macros necesitan que se definan elementos de datos ! etiquetas de instrucciones dentro de la definicin de la macro. Si utiliza la macro mas de una vez en el mismo programa ! el ensamblador define los elementos de datos para cada aparicin, los nombres duplicados haran que el ensamblador genere un mensaje de error. %ara asegurar que cada nombre generado es nico, ha! que codificar la directiva &946& inmediatamente despu3s de la instruccin F6459. Su formato general es) &946& (tiqueta", (tiquetaG...(tiquetan.

4./.BIBLIOTE AS DE MA ROS.

7efinir una macro ! usarla solo una vez en un programa no es mu! productivo. (l enfoque habitual es catalogar las macros en una biblioteca en disco bajo un nombre descriptivo, como F6459.&?;. Usted solo tiene que reunir todas las definiciones de sus macros en un archivo ! almacenar el archivo en disco)

Facro" F6459 .... (K7F FacroG F6459 .... (K7F

%ara usar cualquiera de las macros catalogadas, en lugar de codificar las definiciones F6459 al inicio del programa utilice la directiva ?K4&U7( as)

?K4&U7( 4) F6459.&?; Facro" FacroG

(l ensamblador accesa el archivo llamado F6459 en la unidad 4 e inclu!e ambas definiciones

de macro, Facro" ! FacroG, en el programa. (l listado ensamblado contendr' una copia de las definiciones de las macros. La Di#e("iva !URGE. &a ejecucin de una instruccin ?K4&U7( hace que el ensamblador inclu!a todas las definiciones de macros que est'n especificadas en la biblioteca. Sin embargo, suponga que una biblioteca contiene las macros SUF6, 5(S-6, 7?1?7(, pero que el programa solo necesita SUF6. &a directiva %U5Q( permite que usted @elimine@ la macros 5(S-6 ! 7?1?7( que no necesita del ensamblado actual)

?J" ?K4&U7( 4)^F6459.&?; (K7?J %U5Q( 5(S-6, 7?1?7(

2?nclu!e la biblioteca completa

2(limina la macros no necesarias

Una operacin %U5Q( facilita solo el ensamblado de un programa ! no tiene efecto sobre las macros almacenadas en la biblioteca.

BIBLIOGRAFIA Lenguaje En5a&-lado# 6 !#og#a&a(ion 7a#a ! !e"e# A-el. Edi"o#ial !#en"i(e >all. Te#(e#a Edi(i*n Lenguaje5 En5a&-lado#e5 $u5"e# a-aCe#o J !e#eF Aliaga Edi"o#ial M( G#a9 >ill !#i&e#a Edi(i*n ! In"e#n Mi(Eael Ti5(Ee# J B#uno Jenn#i(E Edi"o#ial A-a(u5 IBM 6 o&7a"i-le5.

Vous aimerez peut-être aussi