Está en la página 1de 19

Instituto Tecnolgico de Durango Ingeniera en Sistemas Computacionales

Lenguaje Ensamblador Ing. Jos Lauro Sols Gallegos

Unidad I Introduccin En esta ocasin, vamos a impartir la materia de Lenguaje Ensamblador (LE), jvenes, alguno de ustedes a odo hablar sobre el LE? Efectivamente el LE es un lenguaje de programacin, pero porque el nombre de LE?. En un principio, las computadoras se programaban directamente en el lenguaje natural de ellas, es decir, el lenguaje binario, ceros y unos, las personas que programaban estas primeras computadoras eran cientficos que estaban muy relacionados con el lenguaje binario, y por supuesto lo entendan muy bien. Con la evolucin de la electrnica y la tecnologa de las computadoras, stas se hicieron ms pequeas y ms accesibles a empresas e instituciones de mediano tamao, entonces hizo falta programarlas de una manera ms fcil que en lenguaje binario lenguaje mquina. Ahora, 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 0 y valor 1 y que, fsicamente, se materializan con tensiones de energa comprendidas entre 0 y 4.0 voltios y entre 4 y 5 voltios, respectivamente, entonces, para representar datos que contengan una informacin, se utilizan una serie de unos y ceros que en conjunto indican dicha informacin. Por otra parte, la informacin que hace que el hardware de la computadora realice una determinada actividad se llama instruccin. Por consiguiente una instruccin es un conjunto de unos y ceros. Las instrucciones as formadas equivalen a acciones elementales de la mquina, por lo que al conjunto de dichas instrucciones que son interpretadas directamente por la mquina se denomina lenguaje mquina. El lenguaje mquina fue el primero que empleo el hombre para la programacin de las primeras computadoras, all por los aos 40s y 50s. Una instruccin en lenguaje mquina puede representarse de la siguiente forma: 011011001010010011110110 Esta secuencia es fcilmente ejecutada por la computadora, pero es de difcil interpretacin para el hombre, siendo aun ms difcil la interpretacin de un programa (conjunto de instrucciones) escrito de esta forma. Esta dificultad hace que los errores sean frecuentes y la correccin de los mismos costosa, cuando no imposible, al igual que la verificacin y modificacin de los programas.

Macrocomputadora ENIAC, programada directamente por el usuario

Ya se ha dicho que en un principio el programador empleaba directamente el lenguaje mquina, entonces era el mismo Programador quin deba introducir el cdigo binario a la computadora (codificar), y adems entender el resultado (decodificar) que la misma computadora entregaba, que por supuesto estaba tambin en cdigo binario. Puede usted imaginarse algn caso especfico de esto? Por ejemplo: 011011001010010011110110 La anterior secuencia de dgitos binarios (bits) puede indicar a la computadora que: <<Traslade el contenido de la posicin de memoria X a la posicin de memoria Y>> Si lo vemos escrito de esta ltima forma, lo entenderemos fcilmente, ya que est en nuestro lenguaje natural, pero la mquina elemental ser incapaz de entender nada. Vemos, pues, que la forma de indicar a la mquina 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. Con la prctica en el manejo de la mquina se cay en la cuenta de que se podra utilizar la propia mquina para ayudar en la traduccin de los programas (codificacin). Es decir, que si a una mquina elemental se le dotaba de un programa, tambin elemental, que tradujera un nmero determinado de caracteres alfabticos en una secuencia de unos y ceros, se podra escribir un programa constituido por una secuencia de grupos de caracteres alfabticos, en la que cada uno de los grupos indicara una accin a realizar por la computadora y, una vez escrito el programa, sera la propia mquina la que pasara los grupos de caracteres a bits. Las ventajas de esto son evidentes, ya que para el hombre resulta ms fcil manipular grupos de caracteres y la traduccin se hara de manera automtica. Por ejemplo, se podra escribir: TRASLADAR 10100100, 11110110 Esto indicara que el contenido de la posicin 11110110 haba que pasarlo a la posicin 10100100 si se sabe que al grupo alfabtico TRASLADAR le corresponde (o equivale) la secuencia de bits 01101100. La mquina traducira la anterior instruccin como: 01101100 11010110 00011101 Al grupo alfabtico se le denomina mnemotcnico, y existir un mnemotcnico por cada instruccin. Se le da este nombre porque sirve para recordar con mayor facilidad el conjunto de instrucciones de una determinada mquina. De esta forma aparecieron los lenguajes ensambladores (Assembler, en ingls), y poco a poco con el avance de la programacin (Software), estas primeras y sencillas ayudas se fueron haciendo ms complejas, permitiendo que, adems de los mnemotcnicos correspondientes a la operacin a realizar, se pudieran emplear otros para indicar, por ejemplo, los operandos (por ejemplo el de : sumar). La anterior secuencia de bits se podra escribir de la siguiente forma: TRASLADAR POS-A POS-B Que nos resulta de ms fcil comprensin. A los programas que permiten pasar del programa escrito de esta manera (programa fuente) al lenguaje mquina tambin se les denomina normalmente ensambladores. Estos traductores, como ya se ha dicho, se fueron complicando cada vez ms para que la labor del programador fuera ms fcil, incluyendo los denominados directivas del ensamblador, que son rdenes o informaciones que el programador da al traductor, no instrucciones a traducir. Aun con todas estas sofisticaciones y ayudas, el programador de lenguaje ensamblador debe conocer el sistema fsico (Hardware) de la mquina con que trabaja, pues aunque emplee mnemotcnicos, etiquetas, directivas, etc., stas sirven para indicar una posicin de memoria determinada, un registro o cualquier otra parte de la mquina, y estos son elementos que se deben de conocer. Por eso se dice que el lenguaje ensamblador es un lenguaje de bajo nivel, es decir, ligado con el hardware concreto de una determinada mquina. Aqu radica la diferencia importante con los lenguajes ms complejos, llamados de alto nivel, como el C, Basic, Pascal, Cobol, etc., ya que en stos el programador no tiene porque reconocer el hardware de la mquina. Trabaja con variables, constantes e instrucciones simblicas, y es el traductor quien las transforma en las direcciones e instrucciones apropiadas. Entonces, el lenguaje de programacin que hemos utilizado (como el C++ por ejemplo), requiere de un proceso de traduccin, lo que nosotros escribimos es el cdigo fuente, como la instruccin: cout<<Hola Mundo;. El software

que traduce este cdigo fuente a Lenguaje Ensamblador, se llama Programa Compilador, y el cdigo ya en Lenguaje Ensamblador, es traducido a Lenguaje Mquina (ejecutable), por un programa llamado Programa Ensamblador.

Pirmide de Traduccin del Software Sistemas Numricos Como se haba comentado antes, el cdigo binario es el lenguaje que utiliza la computadora para realizar todas sus funciones internamente (hardware), este lenguaje est formado por 2 smbolos, el cero (0) y el uno (1). Estos 2 smbolos representan la funcin bsica interna de una computadora, la ausencia (0) la presencia (1) de tensin elctrica o voltaje. El sistema numrico decimal, es el que estamos acostumbrados a usar, este tiene 10 smbolos (0,1,2, 3,4,5,6,7,8,9), y cuando es necesaria representar cantidades mayores a 9 (o sea de 10 en adelante), se utiliza una combinacin de smbolos. En el sistema numrico binario se pueden representar las mismas cantidades que en decimal, solo que solo se usan dos smbolos, y por consiguiente, la expresin de las cantidades se ver expresada con ms digitos. Por ejemplo: El nmero 2008 en decimal, expresado en binario sera: 11111011000. A esta serie de unos y ceros se la llama secuencia de bits, y son exactamente 11 bits. El proceso de conversin es el denominado divisiones sucesivas, el cual consiste en ir dividiendo entre dos la cantidad inicial en decimal (en este caso 2008), y luego ir calculando el residuo entero, entonces se dice que: 2008 entre 2, es igual a 1004 y sobra 0. 1004 entre 2, es igual a 502 y sobra 0, 502 entre 2, es igual a 251 y sobra 0, 251 entre 2 es igual a 125 y sobra 1, 125 % 2 = 62, y sobra 1, 62 % 2 = 31, y sobra 0, 31 % 2 = 15, y sobra 1, 15 % 2 = 7, y sobra 1, 7 % 2 = 3, y sobra 1, 3 % 2 = 1, y sobra 1, 1 % 2 = NO TOCA, y solo sobra 1.

Y el resultado final ser que 2008 decimal convertido a binario es: 11111011000.

Al bit ubicado en la posicin ms a la izquierda se le llama bit ms significativo (MSB del ingls: More Significant Bit), pues es el que ms vale numricamente, y al ubicado ms a la derecha se le llama bit menos significativo (LSB del ingls: Least Significant Bit). Para realizar el proceso inverso, convertir de binario a decimal, se representa el nmero en binario matemticamente como se hace en decimal, por ejemplo, en decimal, el nmero 2008 est expresado de forma 3 2 1 0 abreviada, matemticamente el nmero 2008 se representa as: (2x10 ) + (0x10 ) + (0x10 ) + (8x10 ) = 2000 + 0 + 0 + 8 = 2008. Entonces para convertir 11111011000 binario a decimal, se tendra que: (1x2 ) + (1x2 ) + (1x2 ) + (1x2 ) + (1x2 ) 5 4 3 2 1 0 + (0x2 ) + (1x2 ) + (1x2 ) + (0x2 ) + (0x2 ) + (0x2 ) = 1024 + 512 + 256 + 128 + 64 + 0 + 16 + 8 + 0 + 0 + 0 = 2008. El sistema numrico decimal es usado por los programadores en sus cdigos y operaciones, el binario es usado internamente por la computadora, pero existen otros sistemas numricos adicionales que sirven como intermediarios entre los dos primeros, as muchos sistemas de cmputo y programas (software de sistema) utilizan al sistema numrico hexadecimal (formado por 16 smbolos) y el sistema octal (formado por 8 smbolos). Los smbolos del hexadecimal sern: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F Los smbolos para el octal sern: 0, 1, 2, 3, 4, 5, 6, 7 Observe que para el caso del sistema numrico hexadecimal, existe un smbolo para expresar la cantidad 10 (diez), que es el smbolo A, y para la cantidad 15 (quince) es el smbolo F. El proceso de conversin de decimal a hexadecimal es similar a l de decimal a binario, solo que ahora la divisin es entre 16 (diecisis).
10 9 8 7 6

En el proceso inverso (de hexadecimal a decimal), se realiza lo mismo que de binario a decimal, solo que ahorra la 2 1 0 base es 16. Entonces se tiene que 7D8 hexadecimal a decimal ser: (7x16 ) + (13x16 ) + (8x16 ) = 1792 + 208 + 8 = 2008. Ntese que al representar cantidades en hexadecimal, el nmero de dgitos es menor, mientras que en binario, el nmero de dgitos para la misma cantidad es mayor.

Para que supone que lo anterior pueda servir? En resumen, podemos decir que entre ms sea la cantidad de smbolos que se usen en un sistema numrico, menor ser la cantidad de dgitos que se utilicen para representar las cantidades, y al revs, entre menos sea la cantidad de smbolos en un sistema numrico, mayor ser la cantidad de dgitos que se utilicen para representar las cantidades. Ejercicio: Exprese una cantidad arriba y una cantidad abajo de las mostradas a continuacin (estn en hexadecimal). FF0F FEFF FF AF FFFA F9 Respuesta: En el primer ejemplo (FF0F), una cantidad arriba ser: FF10, y una cantidad abajo: FF0E.

El Microprocesador El corazn de la computadora es el microprocesador, ste maneja las necesidades aritmticas, de lgica y de control de la computadora. El microprocesador tiene su origen en la dcada de los sesenta, cuando se diseo el circuito integrado (IC por sus siglas en ingles) al combinar varios componentes electrnicos en un solo componente sobre un "chip" de silicio. Chip Intel 8008 Inicialmente los fabricantes colocaron este diminuto chip en un dispositivo parecido a un ciempis y lo conectaron a un sistema en funcionamiento. A principios de los aos setenta Intel (la principal fabricante de Microprocesadores) introdujo el chip 8008 el cual, instalado en una computadora terminal, acompao a la primera generacin de microprocesadores, y con esto, se dio inicio a la gran cantidad y tipos de procesadores que se tienen hoy en da.

Tabla de procesadores Intel (2006) La variedad de microcomputadoras tambin ocasiono un renovado inters en el lenguaje ensamblador, cuyo uso conlleva a diferentes ventajas: - Un programa escrito en el lenguaje ensamblador requiere considerablemente menos memoria y tiempo de ejecucin que un programa escrito en los conocidos lenguajes de alto nivel, como Pascal y C. - El lenguaje ensamblador da a un programador la capacidad de realizar tareas muy tcnicas que serian difciles, si no es que imposibles de realizar en un lenguaje de alto nivel. - El conocimiento del lenguaje ensamblador permite una comprensin de la arquitectura de la maquina que ningn lenguaje de alto nivel puede ofrecer. - Aunque la mayora de los especialistas en Software desarrolla aplicaciones en lenguajes de alto nivel, que son ms fciles de escribir y de dar mantenimiento, una practica comn es recodificar en lenguaje ensamblador aquellas rutinas que han causado cuellos de botella en el procesamiento. - Los programas residentes y rutinas de servicio de interrupcin casi siempre son desarrollados en el lenguaje ensamblador. Los lenguajes de alto nivel fueron diseados para eliminar las particularidades de una computadora especifica, mientras que un lenguaje ensamblador esta diseado para una computadora especifica, o, de manera ms correcta, para una familia especifica de microprocesadores. Para el aprendizaje del lenguaje ensamblador no es necesario lo siguiente: - Conocimiento previo de un lenguaje de programacin, aunque tenerlo puede ayudarle a comprender algunos conceptos de programacin ms rpido. - Conocimiento avanzado de electrnica o circuiteria. En resumen, podemos decir que el LE es el lenguaje del Microprocesador, este recibe todas las rdenes en LE, luego convierte las ordenes que recibi en cdigos binarios, que despus se mandan al resto de la circuiteria en el sistema. Todos los microprocesadores reciben rdenes en LE, pero existen varios tipos de Lenguajes Ensambladores, no es lo mismo una arquitectura de Microcomputadora PC, a una arquitectura de Macintosh, o Workstation, mientras en las PCs se utiliza un LE compatible con Intel, en las otras arquitecturas se puede usar un LE compatible con la empresa Motorola. Especficamente, las computadoras compatibles con IBM o Intel, usan un LE llamado del 8086, y una computadora de la marca Apple, puede usar un ensamblador compatible con un software llamado del Z80. Por popularidad y facilidad de uso y acceso, el LE que se utilizar en este curso es el compatible con el 8086, de la empresa Intel

Unidades funcionales Un elemento importante del hardware de la PC es la unidad del sistema, que contiene una tarjeta de sistema, fuente de poder y ranuras de expansin para tarjetas opcionales. Los elementos de la tarjeta de sistema son un microprocesador, memoria de solo lectura (ROM) y memoria de acceso aleatorio (RAM). El cerebro de la PC y compatibles es un microprocesador basado en la familia 8086 de Intel ( alguno genrico, como los AMD, Cyrix, o serie K), que realiza todo el procesamiento de datos e instrucciones. Los procesadores varan en velocidad y capacidad de memoria, registros y bus de datos. Un bus de datos transfiere datos entre el procesador, la memoria y los dispositivos externos. Aunque existen muchos tipos de computadoras digitales segn se tenga en cuenta su tamao, velocidad de proceso, complejidad de diseo fsico, etc., los principios fundamentales bsicos de funcionamiento son esencialmente los mismos en todos ellos. Se puede decir que una computadora est formada por tres partes fundamentales, aunque una de ellas es subdividida en dos partes no menos importantes. En la figura siguiente se muestran dichas partes, llamadas genricamente unidades funcionales debido a que, desde el punto de vista del funcionamiento, son independientes. El nombre de cada parte nos indica la funcin que realiza. As, la Unidad Central de Proceso (CPU) es la que coordina el funcionamiento conjunto de las dems unidades y realiza los clculos necesarios; por eso la podemos subdividir en una Unidad de Control (UC) y en una unidad de clculo o Unidad Aritmtico-Lgica (UAL), y adicionalmente una Memoria Interna, llamada Registros del CPU. La unidad de Memoria Principal (MP) se encarga de almacenar las instrucciones que realizar la Unidad de Control al ejecutar un programa y los datos que sern procesados. La Unidad de Entradas y Salidas ser la encargada de la comunicacin con el exterior a travs de los perifricos. Estos perifricos pueden ser: de entrada, como los teclados; de salida, como los tubos de rayos catdicos (CRT monitor), y de entrada y salida, como los discos magnticos. Descripcin General Unidad Central de Proceso.- La CPU constituye el cerebro de una computadora digital, pues realiza todas las operaciones aritmticas y lgicas sobre los datos y adems controla todos los procesos que se desarrollan en la computadora. Por ejemplo, para que se ejecute una instruccin, sta debe estar en el interior de la CPU, concretamente en la UC y si hay que realizar clculos, interviene la UAL. Unidad de Control.- Para realizar su tarea la UC necesita conocer, por un lado, la instruccin y, por otro, una serie de informaciones adicionales que deber tener en cuenta para coordinar, de forma correcta, la ejecucin de la instruccin. El resultado de la interpretacin de dichas informaciones son una serie de rdenes a los diferentes elementos de la computadora. La UC no emite todas las rdenes a la vez, sino siguiendo una determinada secuencia. Para ello utiliza un elemento que le va indicando el instante en que debe ejecutar una determinada fase de la instruccin. A este elemento se le denomina Reloj, y se dice que sincroniza las acciones de la UC; cuanto ms rpido marque el tiempo, ms rpida ser la ejecucin de la instruccin. Sin embargo, hay un lmite, ya que, si marca excesivamente rpido, es posible que no puedan cumplir adecuadamente las rdenes de los diferentes elementos, por lo que se producirn errores. Unidad Aritmtico Lgica.- La unidad aritmtico lgica (UAL) es la encargada de realizar los clculos. Los datos sobre los que se realizan las operaciones se denominan operandos. Al elemento encargado de ejecutar las operaciones se le denomina operador, y esta formado por una serie de circuitos electrnicos que son capaces de sumar dos nmeros binarios o hacer las operaciones lgicas elementales: disyuncin, conjuncin y negacin; incluso algunos operadores son tambin capaces de multiplicar, dividir y realizar otras operaciones mas complejas. Para que el operador realice la operacin, los operandos se llevan a la UAL y se guardan en unos registros denominados registros de trabajo. El resultado de la operacin se guarda tambin en un registro antes de ser

llevado a la memoria o a la unidad de entradas y salidas. Frecuentemente se utiliza un mismo registro para guardar uno de los operandos y tambin el resultado, a este se le denomina Registro Acumulador. Unidad de Memoria Principal.- La memoria principal esta formada por un conjunto de unidades llamadas palabras ( Localidades de Memoria). Dentro de cada una de estas palabras se guarda la informacin que constituye 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 (tambin un dato puede ocupar varias palabras). A la cantidad de palabras que forman la MP se le denomina capacidad de memoria. De este modo, cuanto mayor sea el nmero de palabras mayor ser el nmero de instrucciones y 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. Cada bit solo puede guardar dos valores, el valor 0 o el valor 1; por eso se dice que son elementos binarios. El nmero de bits que forman una palabra se llama longitud de palabra ( tamao de palabra). Por regla general, las computadoras potentes tienen memorias con longitud de palabra grande, mientras que las computadoras pequeas tienen memorias con longitud de palabra menor. En la figura siguiente se muestra como puede estar organizada una Memoria Principal y los componentes ms importantes de una memoria.

Organizacin de una unidad de memoria

Componentes de la memoria En la figura de la izquierda, las palabras forman una matriz de 10 filas y 10 columnas. La primera palabra corresponder con la direccin 00, la segunda con la 01, y la ultima, con la 99. La capacidad de la memoria ser de 10 * 10 = 100 palabras. Tambin se muestra la longitud de la palabra 38, que es de 8 bits, al igual que las dems, y la informacin que contiene, que es el valor binario 10011010. Las palabras se distinguen entre si por la posicin que ocupan en la MP, y se puede guardar una informacin y luego recuperarla indicando el numero de dicha posicin. A los nmeros que sealan las posiciones de memoria se les da el nombre de direcciones de memoria. La accin de guardar una informacin en una palabra de la memoria se llama acceso de escritura, y la accin de recuperarla, acceso de lectura. Los accesos son coordinados por la UC. Unidad de Entradas y Salidas.- Ya se ha visto en las secciones precedentes como funcionan la CPU y la MP, pero puede decirse que es necesaria la comunicacin entre el interior de la computadora y su entorno o periferia. Esta comunicacin se consigue a travs de dispositivos de muy diversos tipos, como son: teclados, impresoras, pantallas, discos magnticos, etc. Es estos dispositivos se les conoce con el nombre genrico de perifricos. En la figura siguiente se muestran algunos perifricos conectados a la Unidad de E/S, la cual hace de intermediaria entre los perifricos y la CPU. Las flechas indican el sentido en que fluye la informacin.

La unidad de E/S hace de intermediaria entre la UCP y los perifricos La coordinacin de la comunicacin entre los perifricos y la CPU la realiza la Unidad de E/S. Obsrvese que esta no es un perifrico sino un dispositivo que gestiona a los perifricos siguiendo las ordenes de la CPU; es decir, la Unidad de E/S recibe de la Unidad de Control informacin sobre el tipo de transferencia de datos que debe realizar (si es de entrada o de salida) y perifrico que debe de utilizar; si es de salida recibir tambin el dato que debe enviar y el momento de la operacin. Entonces, la Unidad de E/S seleccionara el perifrico y ejecutara la operacin teniendo en cuenta las caractersticas propias de cada perifrico. Una vez ejecutada la orden avisar a la UC de la terminacin de la transferencia. Cada perifrico o parte de un perifrico tendr asignado un numero o direccin que servir para identificarlo. Cuando la UC quiera seleccionarlo enviara dicho nmero a la Unidad de E/S. Para solucionar el problema de la imposibilidad de saber cuanto tiempo durara una transferencia de informacin con un perifrico se han desarrollado diversas tcnicas de comunicacin entre la CPU y los perifricos. Lo ms sencillo es que la CPU, cuando desee hacer una transferencia de informacin con un perifrico, pregunte a la Unidad de E/S si dicho perifrico se encuentra disponible. Si no lo esta, debe repetir la pregunta una y otra vez hasta obtener una respuesta afirmativa, en cuyo caso se inicia la transferencia de informacin. Si se desea obtener mayor rendimiento de la computadora, se puede emplear otro mtodo que se denomina sincronizacin mediante interrupcin. La caracterstica de este mtodo es que la CPU, en lugar de dedicarse a preguntar a la Unidad de E/S por el perifrico que desea utilizar, lo que hace es indicar a la Unidad de E/S que desea hacer una transferencia con el perifrico, y seguidamente, si no esta el perifrico preparado, empieza otra tarea, olvidndose momentneamente del perifrico. Cuando este preparado, la Unidad de E/S indicara a la CPU que puede realizarse la transferencia; entonces, la CPU interrumpir la tarea que esta realizando y atender al perifrico. De esta forma, la CPU no pierde tiempo esperando al perifrico. Interconexin de las unidades funcionales En los temas anteriores hemos visto las funciones que realiza cada unidad de la computadora, y que se deben de comunicar entre ellas para pasarse informacin. Estas informaciones se transmiten en forma de seales elctricas y, por tanto, circulan a travs de conductores elctricos. Ya sabemos que en un sistema digital las informaciones se encuentran codificadas en binario formando grupos de bits. Cada bit de uno de estos grupos se suele enviar de una unidad a otra por un conductor diferente al del resto de los bits. De esta forma, si el grupo esta constituido por 8 bits, sern necesarios 8 conductores; si lo forman 16 bits, se emplearan 16 conductores; etc. Se hace as para ahorrar tiempo, ya que circulan todos los bits de un

mismo grupo a la vez, cada uno por su conductor. A esta forma de enviar los datos se le denomina transmisin en paralelo. Cuando la CPU quiere leer o escribir en una determinada posicin de memoria, enviara la direccin, en paralelo, a la memoria por un conjunto de conductores elctricos al que se denomina bus de direcciones, ya que se utiliza exclusivamente para enviar direcciones. As mismo, los datos ledos o los que se quieren escribir se trasladan mediante un conjunto de conductores elctricos denominado bus de datos. Las ordenes de la CPU a la MP y las respuestas de la MP a la CPU son enviadas por un tercer conjunto de conductores llamado bus de control. En la figura siguiente se muestran las conexiones de la CPU con la MP. Se han dibujado en la figura (a) todos los conductores elctricos suponiendo que se emplean 8 hilos para el bus de datos, 16 para el de direcciones y 3 para el de control. En la practica no se dibujan todos los hilos para simplificar las figuras y se hace como en las figuras (b) y (c).

Interconexiones entre la UCP y la MP Existen 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 siguiente (a), al que se conectan todas las unidades. Esto obliga a que, en un determinado instante, solo dos unidades puedan estar haciendo uso del mismo; si hay que enviar algo a la tercera unidad, se deber esperar a que quede libre.

Formas de interconexin

La principal ventaja de este sistema de interconexin es su bajo costo, y la principal desventaja, su mayor lentitud. Adems, si se emplea el mismo bus de direcciones para indicar la de un perifrico y la de una posicin de memoria, no podr coincidir el nmero de ningn perifrico con ninguna direccin de memoria; si as lo hicieran, se producirn errores al seleccionarse a la vez el perifrico y la posicin de memoria. Por lo tanto, se tendr cuidado en asignar a los perifricos direcciones que no coincidan con las de la MP. En estos casos se dice que los perifricos estn mapeados en memoria, ya que la CPU no distingue entre las transferencias a perifricos y a MP. Otra forma de interconectar las unidades de la computadora consiste en emplear conjuntos de buses diferentes para la Unidad de E/S y la MP. De esta forma, aunque se encarece el sistema, se gana en velocidad y se pueden emplear direcciones iguales para nombrar perifricos y a posiciones de memoria. La CPU, si quiere seleccionar un perifrico, utiliza el bus de la Unidad de E/S, y si quiere seleccionar una posicin de memoria, utiliza el bus de memoria. En este caso se dice que los perifricos no estn mapeados en memoria. En la figura anterior (b) se muestra una posible conexin con el bus mltiple. Registros del Procesador Los registros del procesador se emplean para controlar instrucciones en ejecucin, manejar direccionamiento de memoria y proporcionar capacidad aritmtica. Los registros son direccionables o utilizables por medio de un nombre. Los bits por convencin, se numeran de derecha a izquierda, como en: ... 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Los registros son la memora interna de un CPU, y varan en nmero como en tamao segn el modelo de microprocesador del que se est hablando, as, en la arquitectura del 80286, se tienen 13 registros todos de 16 bits. Los registros en la CPU 80286, se pueden catalogar en 5 diferentes secciones: Los registros Generales, los registros de Segmento, los registros Apuntadores, los registros ndices, y el registro de Banderas. Es importante aclarar que todos los registros de la CPU 80286 son de un tamao de 16 bits, y solo los registros generales se pueden usar completos de 16 bits o por mitades de 8 bits. Registros de propsito general Los registros de propsito general son: el Acumulador (AX), el Base (BX), el Contador (CX) y el registro de datos (DX), estos son los caballos de batalla del sistema. La forma de usar en programacin en LE estos registros, es con su nombre abreviado, entonces si quiere hacer referencia al registro acumulador, deber usar el nombre AX. Los registros generales son nicos respecto a los dems, en el sentido de que se pueden direccional usar como una palabra (16 bits) o como una parte de tamao de un byte (8 bits). El byte de la izquierda es la parte "alta", y el byte de la derecha es la parte "baja". Por ejemplo, el registro AX consta de una parte AH (alta) y una parte Al (baja), y usted puede referirse a cualquier parte por su nombre. Registro AX. El registro AX, el acumulador principal, es utilizado para operaciones que implican entrada/salida y la mayor parte de la aritmtica. Por ejemplo, las instrucciones para multiplicar, dividir y traducir suponen el uso del AX. Tambin, algunas operaciones generan cdigo ms eficiente si se refieren al AX en lugar de a los otros registros.

Registro BX. El BX es conocido como el registro base ya que es el nico registro de propsito general que puede ser ndice para direccionamiento indexado (direccionamiento de memoria). Tambin es comn emplear el BX para clculos.

Registro CX. El CX es conocido como el registro contador, y es utilizado para realizar ciclos y bucles, este registro est relacionado con todo lo referente a repeticiones de cdigo, aunque no es el nico que se puede usar para realizar ciclos..

Registro DX. El DX es conocido como el registro de datos. Algunas operaciones de entrada/salida requieren uso, y las operaciones de multiplicacin y divisin con cifras grandes suponen al DX y al AX trabajando juntos.

Pude usar los registros de propsito general para suma y resta de cifras de 8, 16 o 32 bits. Los registros indicados en las figuras con el nombre de EAX, EBX, ECX y EDX, son los registros de 32 bits que se usan en procesadores ms modernos al 286. La letra E es del ingles Extended extendido. La programacin en LE se basa en 3 niveles, programacin bsica, programacin media y programacin avanzada. En el primer caso, solo se utilizan los registros generales, para el caso segundo y tercero, se utilizan el resto de los registros, y es en este tipo de programacin donde se alcanza a visualizar el potencial del LE, claro es que para llegar a estos niveles de programacin se requiere de una constante prctica y avance en los tipos y caractersticas de los programas realizados. Los registros de Segmento Un registro de segmento tiene 16 bits de longitud y facilita un rea de memoria para direccionamiento conocida como el segmento actual. Los cuatro registros de segmento son: registro de Segmento de Cdigo (CS.- del Ingls Code Segment), Segmento de Datos (DS.- del ingls Data Segment), Segmento se Pila (SS.- del ingls Stack Segment) y Segmento Extra (ES.- del ingls Extra Segment). Registro CS. El DOS (Sistema Operativo de Disco) almacena la direccin inicial del segmento de cdigo de un programa en el registro CS. Esta direccin de segmento, mas un valor de desplazamiento en el registro apuntador de instruccin (IP), indica la direccin de una instruccin que es buscada para su ejecucin. Registro DS. La direccin inicial de un segmento de datos de programa es almacenada en el registro DS. En trminos sencillos, esta direccin, mas un valor de desplazamiento en una instruccin, genera una referencia a la localidad de un byte especifico en el segmento de datos. Registro SS. El registro SS permite la colocacin en memoria de una pila, para almacenamiento temporal de direcciones y datos. El DOS almacena la direccin de inicio del segmento de pila de un programa en el registro SS. Registros ES. Algunas operaciones con cadenas de caracteres (datos de caracteres) utilizan el registro extra de segmento para manejar el direccionamiento de memoria. En este contexto, el registro ES esta asociado con el registro DI (ndice). Los registros de segmento son utilizados cuando se quiere crear un programa en el que se defina manualmente las zonas o segmentos de que est constituido, es decir, un programa en cualquier lenguaje de programacin, est formado por 4 partes importantes, estas son: el segmento de cdigo, el de datos, el de pila y el extra, cada uno de estos segmentos tiene su propia funcin y en conjunto forman a un programa de computadora. Por ejemplo, en el segmento de datos se encuentran todas las variables y datos que un programa pueda usar y necesitar, en cambio en el segmento de cdigo, se encuentra todas las instrucciones que el programa deber seguir para realizar la funcin para la cual se diseo. Registros Apuntadores. Los registros SP (del ingls Stack Pointer apuntador de la pila) y BP (del ingls Base Pointer apuntador de base) estn asociados con el registro SS y permiten al sistema acceder datos en el segmento de la pila. Registro SP. El apuntador de la pila de 16 bits esta asociado con el registro SS y proporciona un valor de desplazamiento que se refiere a la palabra actual que esta siendo procesada en la pila. Los procesadores 80386 y posteriores tienen un apuntador de pila de 32 bits, el registro ESP. El sistema maneja de forma automtica estos registros. Registro BP. El BP de 16 bits facilita la referencia de parmetros, los cuales son datos y direcciones transmitidos va pila. Los procesadores 80386 y posteriores tienen un BP ampliado de 32 bits llamado el registro EBP. Registros ndice. Los registros SI (del ingls Source Index ndice fuente) y DI (del ingls Destination Index ndice destino) estn disponibles para direccionamiento indexado y para sumas y restas. Registro SI. El registro ndice fuente de 16 bits es requerido por algunas operaciones con cadenas (de caracteres).

En este contexto, el SI esta asociado con el registro DS. Los procesadores 80386 y posteriores permiten el uso de un registro ampliado de 32 bits, el ESI. Registro DI. El registro ndice destino tambin es requerido por algunas operaciones con cadenas de caracteres. En este contexto, el DI esta asociado con el registro ES. Los procesadores 80386 y posteriores permiten el uso de un registro ampliado de 32 bits, el EDI. Registro de Banderas. De los 16 bits del registro de banderas, nueve son comunes a toda la familia de procesadores 8086, y sirven para indicar el estado actual de la maquina y el resultado del procesamiento. Muchas instrucciones que realizan comparaciones y operaciones aritmticas, cambian el estado de las banderas, y esto sirve para que la CPU pueda para determinar la accin subsecuente. Por ejemplo, en una operacin de sumar dos nmeros, el resultado puede ser negativo, entonces se encender un bit de signo, donde se le recuerda indica a la CPU que tome las medidas correspondientes. Los bits de las banderas comunes son los siguientes: - OF (Overflow, desbordamiento). Indica desbordamiento de un bit de orden alto (mas a la izquierda) despus de una operacin aritmtica. - DF (direccin). Designa la direccin hacia la izquierda o hacia la derecha para mover o comparar cadenas de caracteres. - IF (interrupcin). Indica que una interrupcin externa, como la entrada desde el teclado, sea procesada o ignorada. - TF (trampa). Permite la operacin del procesador en modo de un paso. Los programas depuradores, como el DEBUG, activan esta bandera de manera que usted pueda avanzar en la ejecucin de una sola instruccin a un tiempo, para examinar el efecto de esa instruccin sobre los registros de memoria. - SF (signo). Contiene el signo resultante de una operacin aritmtica (0 = positivo y 1 = negativo). - ZF (cero). Indica el resultado de una operacin aritmtica o de comparacin (0 = resultado diferente de cero y 1 = resultado igual a cero). - AF (acarreo auxiliar). Contiene un acarreo externo del bit 3 en un dato de 8 bits para aritmtica especializada. - PF (paridad). Indica paridad par o impar de una operacin en datos de 8 bits de bajo orden (mas a la derecha). - CF (acarreo). Contiene el acarreo de orden mas alto (mas a la izquierda) despus de una operacin aritmtica; tambin lleva el contenido del ultimo bit en una operacin de corrimiento o de rotacin. Las banderas estn en el registro de banderas en las siguientes posiciones:

Las banderas mas importantes para la programacin en ensamblador son O, S, Z y C, para operaciones de comparacin y aritmticas, y D para operaciones de cadenas de caracteres. Los procesadores 80286 y posteriores tienen algunas banderas usadas para propsitos internos, en especial las que afectan al modo protegido. Los modos de funcionamiento llamados como protegido y virtual, son usados exclusivamente cuando el CPU realiza procesos de multitarea. Los procesadores 80286 y posteriores tienen un registro extendido de banderas conocido como Eflags. Mtodos de direccionamiento El campo de operacin de una instruccin especifica la operacin que se va a ejecutar. Esta operacin debe realizarse sobre algunos datos almacenados en registros de computadora o en palabras de memoria. La manera en que eligen los operandos durante la ejecucin del programa depende del modo de direccionamiento de la instruccin. El 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. Las computadoras utilizan tcnicas de modo de direccionamiento para acomodar una o las dos siguientes consideraciones: 1.- Proporcionar al usuario versatilidad de programacin al ofrecer facilidades como apuntadores a memoria, contadores para control de ciclo, indexacin de datos y reubicacin de datos. 2.- Reducir la cantidad de bits en el campo de direccionamiento de la instruccin. La disponibilidad de los modos de direccionamiento proporciona al programador con experiencia en lenguaje ensamblador la flexibilidad para escribir programas ms eficientes en relacin con la cantidad de instrucciones y el tiempo de ejecucin.

Para comprender los diferentes modos de direccionamiento que se presentaran en esta seccin, es imperativo entender el ciclo de operacin bsico de la computadora. La unidad de control de una computadora esta diseada para recorrer un ciclo de instrucciones que se divide en tres fases principales: 1. Bsqueda de la instruccin de la memoria. 2. Decodificar la instruccin. 3. Ejecutar la instruccin. Hay un registro en la computadora llamado contador de programa o PC (del ingls Program Counter), que lleva un registro de las instrucciones del programa almacenado en la memoria. PC contiene la direccin de la siguiente instruccin que se va a ejecutar y se incrementa cada vez que se recupera una instruccin de la memoria. La decodificacin realizada en el paso 2 determina la operacin que se va a ejecutar, el modo de direccionamiento de la instruccin y la posicin de los operandos. Despus la computadora ejecuta la instruccin y regresa al paso 1 para hacer la bsqueda de la siguiente instruccin en secuencia. En algunas computadoras el modo de direccionamiento de la instruccin se especifica con un cdigo binario distinto, como se hace con el cdigo de operacin. Otras computadoras utilizan un cdigo binario nico que representa la operacin y el modo de la instruccin. Pueden definirse instrucciones con diversos modos de direccionamiento y, en ocasiones, se combinan dos o ms modos de direccionamiento en una instruccin. Aunque la mayora de los modos de direccionamiento modifican el campo de direccin de la instruccin, hay dos modos que no necesitan el campo de direccin. Son los modos implcito e inmediato. Modo Implcito En este modo se especifican los operandos en forma implcita en la definicin de la instruccin. Por 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. De hecho todas las instrucciones de referencia a registro que utilizan un acumulador son instrucciones de modo implcito. Modo Inmediato En este modo se especifica el operando en la instruccin misma. En otras palabras, una instruccin de modo inmediato tiene un campo operando, en lugar de un campo de direccin. Un campo de operando contiene el operando real que se va a usar junto con la operacin especificada en la instruccin. Las 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. Cuando el campo de direccin especifica un registro de procesador se dice que la instruccin esta en modo de registro. Modo de Registro En este modo, los operandos estn en registros que residen dentro de la CPU. Se selecciona el registro particular de un campo de registro en la instruccin. Modo Indirecto por Registro En este modo la instruccin especifica un registro en la CPU cuyo contenido proporciona la direccin del operando en la memoria. En otras palabras, el registro seleccionado contiene la direccin del operando en lugar del operando mismo. Antes 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. Entonces una referencia al registro es equivalente a especificar una direccin de memoria. La 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 Direccionamiento Directo En este modo la direccin efectiva es igual a la parte de direccin de la instruccin. El operando reside en memoria y su direccin la proporciona en forma directa el campo de direccin de la instruccin. En una instruccin de tipo brinco salto, el campo de direccin especifica la direccin de transferencia de control del programa real. Modo de Direccionamiento Indirecto En este modo, el campo de direccin de la instruccin proporciona la direccin en que se almacena la direccin efectiva en la memoria. El control recupera la instruccin de la memoria y utiliza su parte de direccin para acceder la memoria una vez mas con el fin de leer la direccin efectiva.

Modo de Direccionamiento Indexado En este modo el contenido de un registro ndice se suma a la parte de direccin de la instruccin para obtener la direccin efectiva. El registro ndice es un registro CPU especial que contiene un valor ndice. Un campo de direccin de la instruccin define la direccin inicial del arreglo de datos en la memoria. Cada operando del arreglo se almacena en la memoria en relacin con la direccin inicial. La distancia entre la direccin inicial y la direccin del operando es el valor del ndice almacenado en el registro de ndice. Cualquier operando en el arreglo puede accesarse con la misma instruccin siempre y cuando el registro ndice contenga el valor de ndice correcto. El registro ndice puede incrementarse para facilitar el acceso a operandos consecutivos. Ntese que si una instruccin de tipo ndice no incluye un campo de direccin en su formato, la instruccin se convierte al modo de operacin de indirecto por registro. Algunas computadoras dedican un registro de CPU para que funcione exclusivamente como un registro ndice. De manera implcita este registro participa cuando se utiliza una instruccin de modo ndice. En las computadoras con muchos registros de procesador, cualquiera de los registros de la CPU puede contener el nmero de ndice. En tal caso, el registro debe estar especificado en forma explcita en un campo de registro dentro del formato de instruccin. Modo de Direccionamiento de Registro Base En este modo, el contenido de un registro base se suma a la parte de direccin de la instruccin para obtener la direccin efectiva. Esto es similar al modo de direccionamiento indexado, excepto en que el registro se denomina ahora registro base, en lugar de registro ndice. La diferencia entre los dos modos esta en la manera en que se usan ms que en la manera en que se calculan. Se considera que un registro base contiene una direccin base y que el campo de direccin de la instruccin proporciona un desplazamiento en relacin con esta direccin base. El modo de direccionamiento de registro base se utiliza en las computadoras para facilitar la localizacin de los programas en memoria. En resumen, los modos de direccionamiento son la forma en como se mueve la informacin para programar en LE, y solo con la prctica y la aplicacin especfica, se comprender cual es la funcin de cada uno. La sintaxis general para programar en LE es: Accin Operando_Destino , Operando_Fuente Donde: Accin, es una instruccin mnemnica en LE. Operando Destino, es uno de los siguientes elementos: Registro, Localidad de Memoria, Variable La , (coma) es parte de la sintaxis. Operando Fuente, es uno de los siguientes elementos: Registro, Localidad de Memoria, Variable, Valor numrico Por ejemplo: Accin Op. Destino Op. Fuente mov al,5 = mov = al =5

mov es la principal instruccin mnemnica (abreviada) para programar en LE, significa mover (del ingls move), y lo que hace es: mover el operando fuente (5), hacia el operando destino (al). al es la parte inferior baja del registro AX (Acumulador). 5 es la cantidad 5 (cinco), que es un valor numrico directo. En el siguiente ejercicio, se deber comentar como est funcionando el modo de direccionamiento, segn el movimiento de la informacin, adems, mencione el contenido exacto en hexadecimal del registro. Los registros en LE siempre se visualizan en hexadecimal, aunque segn el tipo de compilador que se use, se puede usar la carga de los mismos en otro sistema numrico. Ejemplos: Instruccin Mov al,5

Registro AX (AH y AL) xx05

Explicacin En el registro AX se visualiza el valor xx05, las equis (xx) indican que en la parte alta (AH) no se sabe que est almacenado, mientras que en la parte baja (AL) el valor es 05, representado a 8 bits que es la capacidad del registro. En el registro AH se visualiza 05 completo a 8 bits, en AL es xx por la misma razn antes explicada.

Mov ah,5

05xx

Mov Ax,5

0005

En el registro completo a 16 bits, se visualiza el contenido 0005, porque la instruccin dice que en todo el registro completo AX se cargue este valor. Ntese que se tendra el mismo resultado si se hiciera lo siguiente: mov ax,05 mov ax,005, mov ax,0005. Lo anterior debido a que los ceros (0) a la izquierda no cuentan, pero que se tendra un error si se hiciera: mov ax,00005, debido a que ya estamos indicando 5 digitos.

Recuerde que en hexadecimal, cada digito (0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f) representa 4 bits, pues el valor mximo en hexadecimal de un solo dgito es la F, que representa la cantidad 15 (quince), y este valor convertido a binario es el 1111 (4 unos), y son 4 bits. Si en un registro como el AX que es de un tamao de 16 bits se almacena el valor mximo, en hexadecimal sera FFFF (4 efes), que es el valor 65535 en decimal. Y el valor mnimo sera 0000 (4 ceros) que en decimal es la cantidad cero (0). En el ltimo ejemplo se menciona que: mov ax,00005 es un error, debido a que se est intentando almacenar 5 dgitos, que son 20 bits (4x5=20), y el registro AX no es de esa capacidad, pues solo le caben 16 bits. En los ejemplos anteriores, se est usando el modo de direccionamiento inmediato, pues se est manipulando un valor numrico directo (en este caso el 5), almacenado en un registro. Ejemplos de error: Instruccin Registro AX (AH y AL) Mov al,005 Error

Explicacin Debido a que se est intentando guardar en el registro AL (8 bits) 3 dgitos (005), y como ya se estudi, esto equivale a 12 bits, y esta no es la capacidad del registro AL. El problema es debido al orden de los operandos, no es posible mover al Operando Destino (5) ningn valor, pues es un valor numrico. Aqu se esta usando el modo de direccionamiento de registro pues el operando fuente y el destino son registros, pero el error radica en que el operando fuente (BX) es de 16 bits, y el operando destino (AL) es de 8 bits y no se pueden almacenar 16 bits en solo 8. Aqu el operando origen es AL (8 bits), y se est indicando que se almacene su contenido en el operando destino Bx (16 bits), el error est en la diferencia de tamaos de los operandos, entonces los dos operandos debern ser del mismo tamao, los dos de 8 bits o los dos de 16.

Mov 5,al

Error

Mov Al,Bx

Error

Mov Bx,Al

Error

Generalmente, en la programacin en LE no se distingue las maysculas de las minsculas, entonces es igual por ejemplo MOV que mov. Interrupciones Una interrupcin es una operacin que suspende la ejecucin de un programa de modo que el sistema pueda realizar una accin especial. La rutina de interrupcin se ejecuta y por lo regular regresa el control al procedimiento que fue interrumpido, el cual entonces reasume su ejecucin. Existen dos tipos de Interrupciones, las de Hardware y las de Software. Las interrupciones de hardware son las que utiliza el microprocesador para reconocer a los dispositivos externos a l, tal es el caso de los dispositivos perifricos, como ratn y teclado, impresoras y unidades de disco. Las interrupciones de software son aquellas que se utilizan en la programacin con LE, y de estas hay dos clases, las de BIOS (Basic Input Output System, Sistema Bsico de Entradas y Salidas), y las de DOS (Disk Operating System, Sistema Operativo de Disco). Interrupcin de BIOS.- El BIOS contiene un extenso conjunto de rutinas de entrada/salida y tablas que indican el estado de los dispositivos del sistema. El DOS y los programas usados pueden solicitar rutinas del BIOS para la comunicacin con los dispositivos conectados al sistema. A continuacin se listan algunas interrupciones del BIOS.

INT 00H: Divisin entre cero. Llamada por un intento de dividir entre cero. Muestra un mensaje y por lo regular se cae el sistema. INT 01H: Un solo paso. Usado por el programa DEBUG y otros depuradores para permitir avanzar por paso a travs de la ejecucin de un programa. INT 02H: Interrupcin no enmascarare. Usada para condiciones graves de hardware, tal como errores de paridad, que siempre estn habilitados. Por lo tanto un programa que emite una instruccin CLI (limpiar interrupciones) no afecta estas condiciones. INT 03H: Punto de ruptura. Usado por depuracin de programas para detener la ejecucin. INT 04H: Desbordamiento. Puede ser causado por una operacin aritmtica, aunque por lo regular no realiza accin alguna. INT 05H: Imprime pantalla. Hace que el contenido de la pantalla se imprima. INT 08H: Sistema del cronometro. Una interrupcin de hardware que actualiza la hora del sistema y (si es necesario) la fecha. INT 09H: Interrupcin del teclado. Provocada por presionar o soltar una tecla en el teclado. INT OBH, INT OCH: Control de dispositivo serial. Controla los puertos COM1 y COM2, respectivamente. INT 0DH, INT OFH: Control de dispositivo paralelo. Controla los puertos LPT1 y LPT2, respectivamente. INT 0EH: Control de disco flexible. Seala actividad de disco flexible, como la terminacin de una operacin de E/S. INT 10H: Despliegue en vdeo. Acepta el nmero de funciones en el AH para el modo de pantalla, colocacin del cursor, recorrido y despliegue. INT 11H: Determinacin del equipo. Determina los dispositivos opcionales en el sistema y regresa el valor en una localidad de memoria. INT 12H: Determinacin del tamao de la memoria. En el AX, regresa el tamao de la memoria de la tarjeta del sistema, en trminos de kilobytes contiguos. INT 13H: Entrada/salida de disco. Acepta varias funciones en el AH para el estado del disco, sectores ledos, sectores escritos, verificacin, formato y obtener diagnostico. Interrupciones del DOS.- Los dos mdulos del DOS, IO.SYS y MSDOS.SYS, facilitan el uso del BIOS. Ya que proporcionan muchas de las pruebas adicionales necesarias, las operaciones del DOS por lo general son mas fciles de usar que sus contrapartes del BIOS y por lo comn son independientes de la maquina. IO.SYS es una interfaz de nivel bajo con el BIOS que facilita la lectura de datos desde la memoria hacia dispositivos externos. MSDOS.SYS contiene un administrador de archivos y proporciona varios servicios. Por ejemplo, cuando un programa usuario solicita la INT 21H, la operacin enva informacin al MSDOS.SYS por medio del contenido de los registros. Para completar la peticin, MSDOS.SYS puede traducir la informacin a una o mas llamadas a IO.SYS, el cual a su vez llama al BIOS. Las interrupciones desde la 20H hasta la 3FH estn reservadas para operaciones del DOS. A continuacin se mencionan algunas de ellas. INT 20H: Termina programa. Finaliza la ejecucin de un programa .COM, restaura las direcciones y errores crticos, limpia los bufer de registros y regresa el control al DOS. INT 21H: Peticin de funcin al DOS. Esta interrupcin es una de las principales para el sistema DOS, tiene muchas funciones y por lo tanto, necesita un nmero de servicio o de funcin en el registro AH. INT 22H: Direccin de terminacin.

INT 23H: Direccin de Cltr + Break. Diseada para transferir el control a una rutina del DOS cuando usted presiona Ctlt + Break o Ctlr + c. La rutina finaliza la ejecucin de un programa o de un archivo de procesamiento por lotes. INT 24H: Manejador de error critico. Usada por el DOS para transferir el control cuando reconoce un error critico (a veces una operacin de disco o de la impresora). NT 25H: Lectura completa de disco. Lee el contenido de uno o ms sectores de disco. INT 26H: Escritura completa de disco. Escribe informacin desde la memoria a uno o ms sectores de disco. INT 27H: Termina pero permanece residente (reside en memoria). Hace que un programa .COM al salir permanezca residente en memoria. INT 2FH: Interrupcin de multiplexion. Implica 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 DOS tal como el ASSIGN o el APPEND. INT 33H: Manejador del ratn. Proporciona servicios para el manejo del ratn. En resumen, cuando se ejecuta una Interrupcin se salta a cierta localidad de memoria, en donde se encuentra el cdigo que se ejecutar correspondiente a la interrupcin solicitada, al trmino de la ejecucin de este cdigo, se retorna a la siguiente instruccin del programa principal.

Ejecucin de una Interrupcin

Entorno de Programacin Para programar en LE es necesario un compilador que pueda traducir en Cdigo Mquina lo que se escriba en Cdigo de LE. Bsicamente podremos programar en tres formas ambientes distintos: - Usando Lenguaje Ensamblador puro, a travs de un compilador profesional para LE, como lo es el MASM (de Macro Assembler, de la compaa Microsoft), el TASM (de Turbo Assembler, de la compaa Borland), tambin se podr utilizar alguna herramienta que permita la programacin directa de LE en la memoria de la computadora, como por ejemplo el programa llamado DEBUG de MSDOS. - Usando algn simulador para programacin en LE, como por ejemplo el software llamado EMU8086 para Windows versin 2005. - Usando algn lenguaje de alto nivel que soporte la programacin hbrida, como por ejemplo el lenguaje C++ o Visual Basic. Las tres formas de programar antes mencionadas, tienen sus ventajas y desventajas, por ejemplo programando en ensamblador completo directo, se podr hacer uso de toda la potencia real del LE, obteniendo la posibilidad de crear cdigo totalmente eficiente y funcional, en cambio, usando algn simulador para programar en LE, se podr disminuir la dificultad y la abstraccin de la programacin en LE, pero se sacrificar la portabilidad y la eficacia.

Procedimiento de Ensamble, Enlace y Ejecucin. Segn la opcin utilizada para programar en LE, es el proceso de Ensamble, Enlace y Ligado. Por ejemplo, a continuacin se describe el procedimiento para realizar lo anterior usando un compilador completo para programar en LE, el TASM en su versin bsica para MSDOS (2.02 v.1990). Se debe de contar con un archivo llamado TASM.ZIP, en donde se tienen 4 archivos comprimidos, a continuacin se descomprime dicho contenido en el disco duro.

Archivos bsicos para programar en Lenguaje Ensamblador En esta carpeta se encuentran los 4 archivos: 1.- El TASM, que es el ensamblador compilador de ensamblador de la compaa Borland. 2.- El TLINK, que es el enlazador de ensamblador a ejecutable. 3.- El Prog1, que es el archivo de texto con extensin .ASM donde se encuentra un programa completo en Lenguaje Ensamblador. 4.- El archivo "Leeme Primero", que es el que usted esta leyendo en este momento. Procedimiento a) Lo primero que tiene que hacer, es copiar en una carpeta de su disco duro estos 4 archivos, por ejemplo en una carpeta llamada ASM en la ruta C:\, y quedara: C:\ASM b) A continuacin, ya puede Ensamblar y Enlazar programas, por ejemplo primero teclee: C:\ASM\TASM Prog1.asm <enter> Observe que si no tiene errores su programa, se generar un archivo con extensin .OBJ, quedando en su carpeta C:\ASM el archivo Prog1.obj c) Ahora, puede enlazar su archivo .OBJ con el programa TLINK, quedando como sigue: C:\ASM\TLINK Prog1.obj <enter> Si todo esta bien, se generar ahora un archivo .EXE, donde ste ya lo puede correr ejecutar directamente desde MSDOS, por ejemplo: C:\ASM\Prog1.exe <enter>

Procedimiento de ensamble, enlace y ejecucin de un programa en LE

Entorno de Programacin Como ya se mencion, dependiendo de cmo se vaya a programar en LE es el entorno de programacin a utilizar, por ejemplo, en un principio (aos setentas) se programaba en MSDOS, para los aos noventas empezaron a surgir interfases de modo grfico, soportadas con el Windows 95, y en la actualidad podemos hacer simulaciones grficas de programacin en LE en ambientes soportados para Windows Vista. Lo importante es entender lo siguiente: 1.- Como muchos lenguajes de programacin, primero deberemos crear nuestro programa en cdigo texto, o tambin llamado Cdigo Fuente, esto es, en cualquier editor de texto (edit, Word, Works, block de notas, write, etc.) crearemos nuestro programa en LE. Es importante recordar que la gran mayora de los Compiladores de LE requieren que la extensin del archivo fuente sea .ASM, de lo contrario se podrn tener problemas en el proceso de compilacin. Entonces nuestro primer programa podr ser el siguiente: .MODEL SMALL .CODE Programa: mov ax,@DATA mov ds,ax mov dx,Offset Texto mov ah,9 int 21h mov ax,4C00h int 21h .DATA Texto DB 'Mensaje en pantalla.$' .STACK END Programa De hecho este es el programa llamado prog1 que se mencion anteriormente para programar en LE. El archivo completo se llama: prog1.asm Las maysculas y minsculas no son sensibles en ensamblador. 2.- Una vez que ya tenemos el archivo en cdigo fuente (prog1.asm), ahora se procede a su compilacin ensamble, y se obtiene un archivo con extensin .obj (prog1.obj), este archivo contiene los bytes equivalentes del cdigo fuente, pero ya traducidos a los cdigos de operacin que se requerirn para el paso final. 3.- Finalmente, se enlaza el archivo .obj, obteniendo el archivo .exe (prog1.exe) que es el que la mquina reconoce para su ejecucin directa, este archivo esta en cdigo completo binario (0s y 1s).

También podría gustarte