Está en la página 1de 77

Lenguaje Ensamblador

INTRODUCCIN.
El documento que esta visualizando tiene la funcin primordial de introducirlo a la programacin en lenguaje ensamblador, y est pensado en aquellas personas que nunca han trabajado con este lenguaje y probablemente con ningn otro. El texto se enfoca completamente hacia las computadoras que operan con procesadores de la familia x86 de Intel y, considerando que el ensamblador basa su funcionamiento en los recursos internos del procesador, los ejemplos descritos no son compatibles con ninguna otra arquitectura. Se estructura la informacin en forma de unidades para permitir el fcil acceso a cada uno de los tpicos y facilitar el seguimiento del texto. En la seccin introductoria se mencionan algunos de los conceptos elementales acerca de los sistemas de cmputo as como del ensamblador mismo, y contina con el texto propiamente dicho.

M. D. O. H. Sonia Alvarado Mares

Lenguaje Ensamblador

UNIDAD I. FUNDAMENTOS
1.1

INTRODUCCIN. 1.1.1 Generalidades del lenguaje ensamblador. 1.1.2 Escalabilidad de los microprocesadores 1.1.3 Tipos de lenguajes ensambladores 1.1.4 Clasificacin de memorias 1.1.5 Unidades de entrada/salida EL MICROPROCESADOR. 1.2.1 Buses 1.2.2 Registros 1.2.3 Modos de direccionamiento INTERRUPCIONES. 1.3.1 Hardware 1.3.2 Software ESTRUCTURA DE UN PROGRAMA EN ENSAMBLADOR. 1.4.1 Data segment 1.4.2 Stack segment 1.4.3 Code segment 1.4.4 Instrucciones del programa 1.4.5 Directivas PROCEDIMIENTO DE ENSAMBLE, ENLACE Y EJECUCIN. ENTORNO DE PROGRAMACIN.

1.2

1.3

1.4

1.5

1.6

1.1 INTRODUCCIN.
1.1.1

Generalidades del lenguaje ensamblador.


M. D. O. H. Sonia Alvarado Mares

Lenguaje Ensamblador
Qu es ensamblador y para qu sirve?
Cuando se empezaron a utilizar smbolos nemotcnicos, se escribieron programas para traducir automticamente los programas escritos en lenguaje ensamblador a lenguaje mquina. A estos programas traductores se les llamo ensambladores. La entrada para un ensamblador es un programa fuente escrito en lenguaje ensamblador. La salida es un programa objeto, escrito en lenguaje de mquina. El programa objeto incluye tambin la informacin necesaria para que el cargador pueda preparar el programa objeto para su ejecucin. Para evitar confusiones, de aqu en adelante llamaremos lenguaje ensamblador al conjunto de nemotcnicos y a las reglas para su manejo. Al programa que traduce un programa objeto a partir de un programa escrito en lenguaje ensamblador lo llamaremos ensamblador.

Motivos para utilizarlo.

Rapidez: Como el programador directamente selecciona las instrucciones que se ejecutan en el programa, el programa final queda mas optimizado que un programa generado por un compilador. Mayor control de la computadora: Un programa puede accesar directamente computadora cualquier componente y perifrico de la computadora. Independencia del lenguaje: No depende de libreras o del lenguaje mismo para lenguaje realizar una tarea especfica. Lenguajes como el Basic limitan al programador a lo que el lenguaje puede hacer. La mayora de las computadoras pueden ensamblar: Los recursos necesarios para ensamblar un programa son mucho menores que los compiladores o interpretes. El ensamblador generalmente es ms rpido ensamblando un programa que un compilador generando un archivo ejecutable.

Motivos para no utilizarlo. utilizarlo.


Desafortunadamente, tambin existen motivos para no crear los programas con ensamblador.

Dependencia del hardware: El cdigo se hace en extremo dependiente del hardware microprocesador, de los dispositivos, de los controladores, etc. Este punto ser analizado con ms detenimiento en dependencias de hardware. Mayor tiempo de codificacin: El nmero de lneas de un programa hecho en codificacin ensamblador es mayor a uno hecho en un lenguaje de alto nivel (por ejemplo: Funcin en C puede realizar varias decenas o centenas de instrucciones del microprocesador).

M. D. O. H. Sonia Alvarado Mares

Lenguaje Ensamblador

Comprensin mas profunda de la computadora: Entender un lenguaje de alto nivel computadora es generalmente ms sencillo que el ensamblador. Comprender ensamblador requiere conocimientos ms exactos sobre el funcionamiento interno de la computadora. Errores ms frecuentes en el programa: El evitar un error o encontrar alguno que programa ya exista es difcil. Las herramientas para este caso (como el CodeView y el TurboDebbuger) ayudan en gran medida a ver lo que esta ocurriendo en la maquina, pero no localizan los errores.

Entonces, Cundo utilizo ensamblador y cundo no?


Depende del programa a desarrollar. Si el programa debe controlar en gran medida los componentes internos de la computadora o debe ser lo suficientemente veloz, entonces es recomendable utilizarlo. Si se requiere un sistema grande y no se dispone de mucho tiempo para entregarlo, entonces es mejor juntar un lenguaje de alto nivel con ensamblador (las funciones bsicas del programa realizarlas en ensamblador, y el programa en general codificarlo con el lenguaje de alto nivel).

Importancia del lenguaje ensamblador.


La importancia del lenguaje ensamblador radica principalmente que se trabaja directamente con el microprocesador; por lo cual se debe de conocer el funcionamiento interno de este, tiene la ventaja de que en el se puede realizar cualquier tipo de programas que en los lenguajes de alto nivel no lo pueden realizar. Otro punto sera que los programas en ensamblador ocupan menos espacio en memoria.

Ventajas del Lenguaje Ensamblador.


Velocidad .- Como trabaja directamente con el microprocesador al ejecutar un programa, pues como este lenguaje es el mas cercano a la mquina la computadora lo procesa mas rpido. Eficiencia de tamao.- Un programa en ensamblador no ocupa mucho espacio en tamao memoria porque no tiene que cargan libreras y dems como son los lenguajes de alto nivel Flexibilidad .- Es flexible porque todo lo que puede hacerse con una mquina, puede hacerse en el lenguaje ensamblador de esta mquina; los lenguajes de alto nivel tienen en una u otra forma limitantes para explotar al mximo los recursos de la mquina. O sea que en lenguaje ensamblador se pueden hacer tareas especficas que en un lenguaje de alto nivel no se pueden llevar acabo porque tienen ciertas limitantes que no se lo permite.

M. D. O. H. Sonia Alvarado Mares

Lenguaje Ensamblador
Desventajas del Lenguaje Ensamblador.
Tiempo de programacin .- Como es un lenguaje de bajo nivel requiere ms instrucciones para realizar el mismo proceso, en comparacin con un lenguaje de alto nivel. Por otro lado, requiere de ms cuidado por parte del programador, pues es propenso a que los errores de lgica se reflejen ms fuertemente en la ejecucin. Programas fuentes grandes .- Por las mismas razones que aumenta el tiempo, fuentes crecen los programas fuentes; simplemente requerimos ms instrucciones primitivas para describir procesos equivalentes. Esto es una desventaja porque dificulta el mantenimiento de los programas, y nuevamente reduce la productividad de los programadores. Peligro de afectar recursos inesperadamente .- Que todo error que podamos cometer, o todo riesgo que podamos tener, podemos afectar los recursos de la mquina, programar en este lenguaje lo ms comn que pueda pasar es que la mquina se bloquee o se reinicialice. Porque con este lenguaje es perfectamente posible (y sencillo) realizar secuencias de instrucciones invlidas, que normalmente no aparecen al usar un lenguaje de alto nivel. Falta de portabilidad.- Porque para cada mquina existe un lenguaje ensamblador; portabilidad por ello, evidentemente no es una seleccin apropiada de lenguaje cuando deseamos codificar en una mquina y luego llevar los programas a otros sistemas operativos o modelos de computadoras.

Uso y aplicacin del lenguaje ensamblador.


El uso del lenguaje ensamblador no es para la gente comn y corriente, sino para profesionistas en el rea de computacin que estn obligados a conocer este lenguaje, ya que proporciona una serie de caractersticas que no se pueden encontrar en los lenguajes de alto nivel. Algunas de estas caractersticas son:

Se puede acceder a cualquier localidad de la memoria RAM sin ninguna restriccin. Se pueden programar virus, debido a que se tiene un acceso total a casi todo el hardware de la computadora va interrupciones de software. Se pueden programar Drivers de cualquier dispositivo. Se puede acceder directamente a los registros internos del CPU. Se puede acceder directamente a los dispositivos de entrada y/o salida.

M. D. O. H. Sonia Alvarado Mares

Lenguaje Ensamblador

Los programas objeto generados a tras del ensamblador son mas veloces que los generados en cualquier otro lenguaje, debido a que una instruccin en ensamblador corresponde a una instruccin en lenguaje mquina.

El lenguaje ensamblador se utiliza para las siguientes aplicaciones:

Sistemas embebidos: impresoras, cmaras, autos, juguetes, etc. Industria y manufactura: adquisicin datos y control, eg robots. Transporte y aeronutica: barcos, aviones, sondas espaciales, etc. Graficacin, multimedia, cine y videojuegos. Procesamiento de seales, voz e imgenes. Armamento y defensa.

M. D. O. H. Sonia Alvarado Mares

Lenguaje Ensamblador
1.1.2

Escalabilidad de los microprocesadores.

Introduccin.
El microprocesador es uno de los logros ms sobresalientes del siglo XX. Esas son palabras atrevidas, y hace un cuarto de siglo tal afirmacin habra parecido absurda. Pero cada ao, el microprocesador se acerca ms al centro de nuestras vidas, forjndose un sitio en el ncleo de una mquina tras otra. Su presencia ha comenzado a cambiar la forma en que percibimos el mundo e incluso a nosotros mismos. Cada vez se hace ms difcil pasar por alto el microprocesador como otro simple producto en una larga lnea de innovaciones tecnolgicas. Ninguna otra invencin en la historia se ha diseminado tan aprisa por todo el mundo o ha tocado tan profundamente tantos aspectos de la existencia humana. Hoy existen casi 15,000 millones de microchips de alguna clase en uso (el equivalente de dos computadoras poderosas para cada hombre, mujer y nio del planeta). De cara a esa realidad, quin puede dudar que el microprocesador no slo esta transformando los productos que usamos, sino tambin nuestra forma de vivir y, por ltimo, la forma en que percibimos la realidad? No obstante que reconocemos la penetracin del microprocesador en nuestras vidas, ya estamos creciendo indiferentes a la presencia de esos miles de mquinas diminutas que nos encontramos sin saberlo todos los das. As que, antes de que se integre de manera demasiado imperceptible en nuestra diaria existencia, es el momento de celebrar al microprocesador y la revolucin que ha originado, para apreciar el milagro que es en realidad cada uno de esos chips de silicio diminutos y meditar acerca de su significado para nuestras vidas y las de nuestros descendientes.

Que es un microprocesador?
El microprocesador es la parte de la computadora diseada para llevar acabo o ejecutar los programas. Este viene siendo el cerebro de la computadora, el motor, el corazn de esta mquina. Este ejecuta instrucciones que se le dan a la computadora a muy bajo nivel haciendo operaciones lgicas simples, como sumar, restar, multiplicar y dividir. El microprocesador, o simplemente el micro, es el cerebro del ordenador. Es un chip, un tipo de componente electrnico en cuyo interior existen miles (o millones) de elementos llamados transistores, cuya combinacin permite realizar el trabajo que tenga encomendado el chip.

Evolucin del microprocesador.


El microprocesador es un producto de la computadora y con tecnologa semiconductora. Se eslabona desde la mitad de los aos 50's; estas tecnologas se fusionaron a principios de los aos 70`'s, produciendo el llamado microprocesador.

M. D. O. H. Sonia Alvarado Mares

Lenguaje Ensamblador
La computadora digital hace clculos bajo el control de un programa. La manera general en que los clculos se han hecho es llamada la arquitectura de la computadora digital. As mismo la historia de circuitos de estado slido nos ayuda tambin, porque el microprocesador es un circuito con transistores o microcircuito LSI (grande escala de integracin), para ser ms preciso. El mapa de la figura 1.1, mostrada al final de esta seccin, muestra los sucesos importantes de stas dos tecnologas que se desarrollaron en las ltimas cinco dcadas. Las dos tecnologas iniciaron su desarrollo desde la segunda guerra mundial; en este tiempo los cientficos desarrollaron computadoras especialmente para uso militar. Despus de la guerra, a mediados del ao de 1940 la computadora digital fue desarrollada para propsitos cientficos y civiles. La tecnologa de circuitos electrnicos avanz y los cientficos hicieron grandes progresos en el diseo de dispositivos fsicos de estado Slido. En 1948 en los laboratorios Bell crearon el Transistor. En los aos 50's, aparecen las primeras computadoras digitales de propsito general. stas usaban tubos al vaco (bulbos) como componentes electrnicos activos. Tarjetas o mdulos de tubos al vaco fueron usados para construir circuitos lgicos bsicos tales como compuertas lgicas y flip-flops (celda donde se almacena un bit). Ensamblando compuertas y flip-flops en mdulos, los cientficos construyeron la computadora (la lgica de control, circuitos de memoria, etc.). Los bulbos tambin formaron parte de la construccin de mquinas para la comunicacin con las computadoras. Para el estudio de los circuitos digitales, en la construccin de un circuito sumador simple se requiere de algunas compuertas lgicas. La construccin de una computadora digital requiere de muchos circuitos o dispositivos electrnicos. El principal paso tomado en la computadora fue hacer que el dato fuera almacenado en memoria como una forma de palabra digital. La idea de almacenar programas fue muy importante. La tecnologa de los circuitos de estado slido evolucion en la dcada de los aos 50's. El uso del material silicio de bajo costo y con mtodos de produccin masiva, hicieron al transistor ser el ms usado para el diseo de circuitos. Por lo tanto el diseo de la computadora digital fue un gran avance del cambio para remplazar al tubo al vaco (bulbo) por el transistor a finales de los aos 50's. A principios de los aos 60's, el arte de la construccin de computadoras de estado slido se increment y surgieron las tecnologas en circuitos digitales como: RTL (Lgica Transistor Resistor), DTL (Lgica Transistor Diodo), TTL (Lgica Transistor Transistor), ECL (Lgica Complementada Emisor).

M. D. O. H. Sonia Alvarado Mares

Lenguaje Ensamblador

Figura 1.1 Sucesos importantes de las tecnologas.

A mediados de los aos 60's se producen las familias de lgica digital, dispositivos en escala SSI y MSI que corresponden a pequea y mediana escala de integracin de componentes en los circuitos de fabricacin. A finales de los aos 60's y principios de los aos 70's surgieron los LSI (gran escala de integracin). La tecnologa LSI fue haciendo posible ms y ms circuitos digitales en un circuito integrado. Pero pocos circuitos LSI fueron producidos, los dispositivos de memoria fueron un buen ejemplo. Las primeras calculadoras electrnicas requeran de 75 a 100 circuitos integrados. Despus se dio un paso importante en la reduccin de la arquitectura de la computadora a un circuito integrado simple, resultando un circuito que fue llamado el microprocesador. El primer microprocesador fue el Intel 4004, producido en 1971. Se desarroll originalmente para una calculadora, y resultaba revolucionario para su poca. Contena 2.300 transistores en un microprocesador de 4 bits que slo poda realizar 60.000 operaciones por segundo. El primer microprocesador de 8 bits fue el Intel 8008, desarrollado en 1979 para su empleo en terminales informticos. El Intel 8008 contena 3.300 transistores. El primer microprocesador realmente diseado para uso general, desarrollado en 1974, fue el Intel 8080 de 8 bits, que contena 4.500 transistores y poda ejecutar 200.000 instrucciones por segundo. Los microprocesadores modernos tienen una capacidad y velocidad mucho mayores. Entre ellos figuran el Intel Pentium Pro, con 5,5 millones de transistores; el

M. D. O. H. Sonia Alvarado Mares

Lenguaje Ensamblador
UltraSparc-II, de Sun Microsystems, que contiene 5,4 millones de transistores; el PowerPC 620, desarrollado conjuntamente por Apple, IBM y Motorola, con 7 millones de transistores, y el Alpha 21164A, de Digital Equipment Corporation, con 9,3 millones de transistores.

El Microprocesador.
El microprocesador tiene una arquitectura parecida a la computadora digital. En otras palabras, el microprocesador es como la computadora digital porque ambos realizan clculos bajo un programa de control. Consiguientemente, la historia de la computadora digital nos ayudar a entender el microprocesador. El microprocesador hizo posible la manufactura de poderosas calculadoras y de muchos otros productos. El microprocesador utiliza el mismo tipo de lgica que es usado en la unidad procesadora central (CPU) de una computadora digital. El microprocesador es algunas veces llamado unidad microprocesadora (MPU). En otras palabras, el microprocesador es una unidad procesadora de datos. En un microprocesador podemos diferenciar diversas partes:

1.

El encapsulado: es lo que rodea a la oblea de silicio en si, para darle consistencia, impedir su deterioro (por ejemplo, por oxidacin por el aire) y permitir el enlace con los conectores externos que lo acoplaran a su zcalo a su placa base. La memoria cach: es una memoria ultrarrpida que emplea el micro para tener a mano ciertos datos que prediciblemente sern utilizados en las siguientes operaciones sin tener que acudir a la memoria RAM reduciendo el tiempo de espera. Por ejemplo: en una biblioteca, en lugar de estar buscando cierto libro a travs de un banco de ficheros de papel se utiliza las computadora, y gracias a la memoria cach, obtiene de manera rpida la informacin. Todos los micros compatibles con PC poseen la llamada cach interna de primer nivel o L1; es decir, la que est ms cerca del micro, tanto que est encapsulada junto a l. Los micros ms modernos (Pentium III Coppermine, Athlon Thunderbird, etc.) incluyen tambin en su interior otro nivel de cach, ms grande aunque algo menos rpida, la cach de segundo nivel o L2. Coprocesador Matemtico: o correctamente la FPU (Unidad de coma flotante). Que es la parte del micro especializada en esa clase de clculos matemticos, antiguamente estaba en el exterior del micro en otro chip. Esta parte esta considerada como una parte "lgica" junto con los registros, la unidad de control, memoria y bus de datos. Los registros: son bsicamente un tipo de memoria pequea con fines especiales que el micro tiene disponible para algunos usos particulares. Hay varios grupos de registros en cada procesador. Un grupo de registros esta diseado para control del programador y hay otros que no son diseados para ser controlados por el procesador pero que CPU los utiliza en algunas operaciones en total son treinta y dos registros.

2.

3.

4.

M. D. O. H. Sonia Alvarado Mares

10

Lenguaje Ensamblador
5.
La memoria: es el lugar donde el procesador encuentra sus instrucciones de programa y sus datos. Tanto los datos como las instrucciones estn almacenados en memoria, y el procesador los toma de ah. La memoria es una parte interna de la computadora y su funcin esencial es proporcionar un espacio de trabajo para el procesador. Puertos: es la manera en que el procesador se comunica con el mundo externo. Un puerto es parecido a una lnea de telfono. Cualquier parte de la circuitera de la computadora con la cual el procesador necesita comunicarse, tiene asignado un nmero de puerto que el procesador utiliza como un numero de telfono para llamar al circuito o a partes especiales.

6.

Existen caractersticas fundamentales que son esenciales para identificar un microprocesador, a parte del nombre que se le dan y marca o compaa por la que fue fabricada. Los cuales son:

Su ancho de bus (medido en bits). La velocidad con que trabajan (medida en hertzios): existen dos tipo de velocidades de los micros hoy en da, velocidad interna la velocidad a la que funciona el micro internamente (200, 333, 450... MHz); y velocidad externa o del bus o tambin "velocidad del FSB"; la velocidad a la que se comunican el micro y la placa base, para poder abaratar el precio de sta. Tpicamente, 33, 60, 66, 100 133 MHz.

Microprocesadores Antiguos.
Tal como est el mundo, podramos decir que cualquiera que tenga ms de un mes en el mercado. De todas formas, aqu vamos a suponer antiguo a todo micro que no sea un Pentium o similar (K5, K6, 6x86, Celeron...) 8088 / 8086. En 1975 Intel decidi ponerse manos a la obra para construir su primer micro de 16 bits que sali al mercado en 1978. Se trataba del 8086, que defini el inicio de su gama de productos ms famosa, la familia de microprocesadores x86. La longitud de los registros del 8086 era de 16 bits (de ah su denominacin de 16 bits), haba versiones que funcionaban a 4.77 y 8 MHz, tena un bus de datos de 16 bits y un bus de direcciones de 20 bits, lo que le permita acceder a un mximo de memoria de 1 Mb segn el clculo 2 elevado a 20. 8088. Seguidamente, en 1979, Intel sac el 8088, que en contra de lo que podamos pensar no es mejor que el 8086. La diferencia era sustancial; el bus de datos era de 8 bits (la mitad). Este paso hacia atrs estuvo provocado por el estado de la industria de la poca. Utilizar

M. D. O. H. Sonia Alvarado Mares

11

Lenguaje Ensamblador
un bus de datos de 16 bits supona forzar al mercado a desarrollar para 16 bits lo que implicaba un incremento en los costes de desarrollo de controladores de perifricos y memorias. El sntoma fue que Intel se haba adelantado a su poca. Los japoneses, aprovechando la ocasin y dando fe a su fama de copiones fabricaron unos clnicos de los 8086 y 8088. Fue NEC la que, por procedimientos de ingeniera inversa, sac el diseo de estos micros y cre sus modelos V20 y V30, que incrementaban el rendimiento respecto a los de Intel en un 1030 por ciento. Como se pueden imaginar Intel demand a NEC, pero perdi el juicio. La Justicia determin que el microcdigo del chip poda registrarse pero Intel no haba marcado en el chip el smbolo del copyright, con lo cual perda los derechos de copia. Se encuentra un error de diseo en el 8088 que afecta a la gestin de interrupciones y al registro de pila SS (Stack Segment). 80C86, 80C88, 80186 y 80188. Intel fabric variaciones de estos modelos, sacando al mercado los 80C86, 80C88, 80186 y 80188 cuyas modificaciones fueron el ahorro de energa en las versiones C para su instalacin en porttiles, y el rediseo interno para la optimizacin en las versiones 1. 80286. En 1984 aparece el 80286 como base para una nueva generacin de ordenadores de IBM, el IBM AT (Advanced Technology). Supone un nuevo salto tecnolgico. Adems de incrementar el bus de direcciones de 20 bits a 24, lo que permita acceder hasta los 16 Mb de RAM, se incrementaba la velocidad, llegando a ser hasta un 25 por ciento ms rpidos que los 8086 y 8088 originales. La novedad ms importante que se introdujo fue la gestin de memoria virtual. La memoria virtual es una extensin de memoria en disco (o dispositivo de almacenamiento secundario) aadida a la memoria fsica instalada. As, el 80286 es capaz de tratar hasta un total de 1 Gb, desglosado en 16 Mb de memoria fsica ms 1008 Mb de memoria virtual. La memoria virtual solamente la utilizan los programas que estn preparados para ello. Aparece tambin un nuevo modo de operacin del microprocesador. Aparte del modo real (el normal de operacin) que direcciona hasta 1 Mb de memoria fsica y asegura la compatibilidad para aplicaciones diseadas par los 8086/8088, se tiene el modo protegido que no es compatible con estos programas desarrollados para los micros antes mencionados. El modo protegido es el que permite acceder a los 1.008 Mb de memoria virtual. El 80286 trabaja en su arranque en modo real. El cambio a modo protegido, lo que se conoce tcnicamente como upshift, no es reversible (downshift), siendo necesario hacer un reset del microprocesador para volver al modo real; sin duda un gran fallo de diseo. El 80286 se present con velocidades de reloj de 2, 8, 10, 12, 16 y 20 MHz. 80386 DX y SX.

M. D. O. H. Sonia Alvarado Mares

12

Lenguaje Ensamblador
Introducido en 1985, el 80386 DX supera un nuevo escaln en el avance tecnolgico en microprocesadores. Se incorpora una nueva ampliacin y surge el nmero mgico, el 32. Los buses de datos y de direcciones se amplan hasta 32 lneas de datos, ocurriendo lo mismo con el tamao de los registros. Esta ampliacin supone un incremento en la memoria RAM fsica instalada. Puede direccionar 4 Gb de memoria fsica (DX significa Double word eXternal) y 64 Tb de memoria virtual, una cifra que en la actualidad est an muy por encima de las posibilidades econmicas de los usuarios (a ver quin instala 4.000 Megabytes de RAM, unos 20 millones de pesetas). Arranca en modo real, al igual que el 80286, e incorpora un nuevo modo de operacin: el modo real virtual del 8086, que permite tener varias sesiones 8086 trabajando simultneamente simulando una especie de pseudomultitarea. En los microprocesadores anteriores la gestin de memoria se realizaba en segmentos de 16 Kb. Con el 80286 este tamao de los segmentos de la memoria se hacan muy pequeos y el programador tena que trabajar ms para adaptarse a una gran cantidad de segmentos. El 80386 permite la definicin de segmentos de memoria de tamao variable. Aparte, Intel corrigi la deficiencia del downshifting, pudindose realizar por software. Otra de las innovaciones en la inclusin de una memoria cach interna en el chip destinada a almacenar instrucciones provenientes de memoria sin necesidad de que la unidad de ejecucin intervenga. Intel comete un nuevo error en el diseo del micro que genera inexactitudes en el clculo de 32 bits, que se presentan en los micros lanzados al mercado hasta mayo del 1987. Los modelos corregidos van etiquetados con una doble sigma mayscula o con el identificativo DX. Este error afectaba a las operaciones de multiplicacin de 32 bits. Ocurra bajo las siguientes circunstancias: Se usa la memoria virtual y se produce una demanda de pgina. El coprocesador matemtico 80387 est instalado y en uso. Debe ocurrir una operacin de acceso directo a memoria (DMA). El 80386 debe estar en estado de espera (Wait State).

Se detecta un segundo bug denominado POPAD bug. Su efecto es el vaciado del registro acumulador EAX cuando se ejecuta una instruccin de acceso a memoria inmediatamente despus de la ejecucin de la instruccin POPAD. Aparecen variaciones que afectan al consumo de energa pensadas para porttiles, se trataba de los 80386SL (Slow Low power) y 80386SLC (Slow Low power Cache), que es propiedad de IBM aunque lo fabrique Intel. Las frecuencias de funcionamiento eran de 12, 20, 25 y 33 MHz. 80386 SX .

(SX significa Simple word eXternal) tiene las mismas caractersticas que el 80386DX,
salvo que el bus de direcciones externo se reduce a 16 bits. Introducido en 1988 daba la potencia de un 80386 a precio de un 80286. Durante mucho tiempo se rumore que el P9 podra ser compatible con los zcalos 80286, pero al final no fue as. La razn es que el 80286 multiplexa todos sus buses para conseguir con menos lneas el mismo resultado

M. D. O. H. Sonia Alvarado Mares

13

Lenguaje Ensamblador
(menor coste) El 80386SX slo multiplexa el bus de direcciones. Las frecuencias de funcionamiento eran de 16, 20, 25 y 33 MHz. 80486 DX, 80486 SX. El 80486DX sali al mercado en 1989. La estructura interna hablando en trminos numricos es igual a la de un 80386. El tamao de los registros y de los buses son de 32 bits. Mantiene los tres modos de operacin: real, protegido y real virtual. Las diferencias reales con los 80386DX son que tiene un flag ms, un estado de excepcin ms, 2 bits ms en la tabla de entrada de pginas, 6 instrucciones y los registros de control tienen una longitud de 9 bits. Se realizan tambin cambios en la arquitectura interna. Se crea un mayor nmero de lneas hardware lo que implica un incremento en la velocidad. Se imponen reglas de diseo ms estrictas, lo que supone un reduccin del tamao del chip. Al reducirse el tamao se reduce tambin el consumo y consiguientemente la temperatura que alcanza el chip, con lo cual lo podemos hacer funcionar a un mayor nmero de ciclos de reloj, lo que supondr la aparicin de los Overdrives. Se incluye un coprocesador matemtico interno que dobla las prestaciones de un 80387 trabajando a la misma velocidad. Se logra un diseo mejor y la comunicacin entre el chip principal y el coprocesador matemtico es interna, lo que mejora la velocidad en las transferencias y unas sincronizaciones ms estrechas. La memoria cache (8 Kb) del microprocesador est dividida en 4 caches de 2 Kb cada una. Esto agiliza la ejecucin de algunas aplicaciones. Si se asigna una memoria cache secundaria (L2) el rendimiento del micro puede aumentar hasta un 30 por ciento ms. El 80486SX es igual que un 80486DX, slo que el coprocesador matemtico est inhabilitado. El coprocesador matemtico 80487SX es en realidad un 80486DX puro que desactiva por completo el 80486SX, sin que podamos retirarlo de la placa. Las velocidades a las que funcionan son de 25, 33, 40 y 50 MHz. Hay versin SL para porttiles. 80486 DX2, 80486 DX4, 80486 SX2. Estos modelos de microprocesadores en realidad son iguales que sus hermanos menores. Internamente duplican la velocidad del reloj del sistema. Es igual que revolucionar el motor de un coche para que corra ms. Las consecuencias son obvias: un sobrecalentamiento del micro con una reduccin de potencia. Por este motivo se recomienda utilizar un mtodo de disipacin de calor para que el rendimiento no se vea reducido (laminillas disipadoras o ventiladores). Las velocidades a las que trabajan son: 50, 66, 75 y 100 (slo para el DX4) MHz para los DX2 y 40 y 50 MHz para los SX2. Los 80486 tampoco estn libres del pecado original. En el 80486 cuando el coprocesador matemtico detecta un error de lmite del tamao de segmento, algunas veces la CPU falla al generar la excepcin 13. Este error se genera bajo las siguientes condiciones: Segmento de datos de 64 Kb. Operandos de direccionamiento de 16 bits.

M. D. O. H. Sonia Alvarado Mares

14

Lenguaje Ensamblador

Almacenar un valor de 8 bytes desde el coprocesador cuando la mitad est fuera de los lmites del lmite del segmento. Un segundo bug aparece en el clculo de la instruccin dedicada a calcular arcotangentes.

Overdrives Intel comenz una nueva poltica con la salida de los microprocesadores con la denominacin Overdrive. Los Overdrive eran actualizaciones para los microprocesadores instalados en los sistemas que dispusieran de un segundo zcalo para tal propsito. En esta primera generacin de Overdrives los chips disponan de un duplicador de frecuencia interno y tenan un pin ms, el nmero 169. Este pin se encargaba de inhabilitar el 80486 instalado en la placa dejando como nico micro funcionando el Overdrive. No era posible la retirada del micro anterior, puesto que el sistema dejaba de funcionar. La poltica de actualizacin era buena, lo que no era tan bueno era la trampa para los usuarios. Si se puede retirar el micro anterior se puede vender a usuarios que necesiten menos potencia, no siendo tan gravosa la inversin de ms de 80.000 pesetas que costaban cuando salieron los primeros en 1991. En la segunda generacin de Overdrives se olvid el pin 169, teniendo los 168 que los hacan compatibles con los zcalos de los 80486. En estos casos la actualizacin es sencillsima: quitar el que estaba y poner el nuevo en el mismo lugar. La tercera generacin de Overdrives trabaja con un consumo menor para reducir de este modo su alta temperatura. El voltaje se reduce a 3.3 voltios de los 5 que necesitaban los anteriores. Si vas a comprar un DX2 o DX4 fjate bien qu voltaje utiliza vuestra placa. los Overdrives etiquetados como tal funcionan a 5V, los etiquetados directamente como DX4, sin disipador, funcionan a 3.3V.

Microprocesadores Modernos.
Pentium MMX. Es un micro propio de la filosofa Intel. Con un gran chip como el Pentium Pro ya en el mercado, y a 3 meses escasos de sacar el Pentium II, decidi estirar un poco ms la tecnologa ya obsoleta del Pentium clsico en vez de ofrecer esas nuevas soluciones a un precio razonable. As que se invent un nuevo conjunto de instrucciones para micro, que para ser modernos tuvieran que ver con el rendimiento de las aplicaciones multimedia, y las llam MMX (MultiMedia eXtensions). Prometan que el nuevo Pentium, con las MMX y el doble de cach (32 KB), poda tener hasta un 60% ms de rendimiento!! En ocasiones, la ventaja puede llegar al 25%, y slo en aplicaciones muy optimizadas para MMX (ni Windows 95 ni Office lo son, por ejemplo). En el resto, no ms de un 10%, que adems se debe casi en exclusiva al aumento de la cach interna al doble. La ventaja del chip, entonces? Que su precio final acaba siendo igual que si no fuera MMX. Adems, consume y se calienta menos por tener voltaje reducido para el ncleo del

M. D. O. H. Sonia Alvarado Mares

15

Lenguaje Ensamblador
chip (2,8 V). Por cierto, el modelo a 233 MHz (66 MHz en placa por 3,5) est tan estrangulado por ese "cuello de botella" que rinde poco ms que el 200 (66 por 3).

Pentium II. El nuevo super-extra-chip? Pues no del todo. En realidad, se trata del viejo Pentium Pro, jubilado antes de tiempo, con algunos cambios (no todos para mejor) y en una nueva y fantstica presentacin, el cartucho SEC: una cajita negra superchula que en vez de a un zcalo se conecta a una ranura llamada Slot 1. Los cambios respecto al Pro son:

optimizado para MMX (no sirve de mucho, pero hay que estar en la onda, chicos); nuevo encapsulado y conector a la placa (para eliminar a la competencia, como veremos); rendimiento de 16 bits mejorado (ahora s es mejor que un Pentium en Windows 95, pero a costa de desaprovecharlo; lo suyo son 32 bits puros); cach secundaria encapsulada junto al chip (semi-interna, como si dijramos), pero a la mitad de la velocidad de ste (un retroceso desde el Pro, que iba a la misma velocidad; abarata los costes de fabricacin).

Vamos, un chip "Pro 2.0", con muchas luces y algunas sombras. La mayor sombra, su mtodo de conexin, el "Slot 1"; Intel lo patent, lo que es algo as como patentar un enchufe cuadrado en vez de uno redondo. El caso es que la jugada buscaba conseguir que los PC fueran todos marca Intel; y decan que los sistemas propietarios eran cosa de Apple! Eso s, durante bastante tiempo fue el mejor chip del mercado, especialmente desde que se dej de fabricar el Pro. AMD K6. Un chip meritorio, mucho mejor que el K5. Inclua la "magia" MMX, aparte de un diseo interno increblemente innovador y una cach interna de 64 KB (no hace demasiado, ese tamao lo tenan las cachs externas; casi da miedo). Se "pincha" en un zcalo de Pentium normal (un socket 7, para ser precisos) y la cach secundaria la tiene en la placa base, a la manera clsica. Pese a esto, su rendimiento es muy bueno: mejor que un MMX y slo algo peor que un II, siempre que se pruebe en Windows 95 (NT es terreno abonado para el Pentium II). Aunque es algo peor en cuanto a clculos de coma flotante (CAD y juegos), para oficina es la opcin a elegir en todo el mundo... excepto Espaa. Aqu nos ha encantado lo de "Intel Pentium Inside", y la gente no compra nada sin esta frase, por lo que casi nadie lo vende y mucho menos a los precios ridculos de lugares como EEUU o Alemania. Oferta y

M. D. O. H. Sonia Alvarado Mares

16

Lenguaje Ensamblador
demanda, como todo; no basta con una buena idea, hay que convencer. De todas formas, hasta IBM lo usa en algunos de sus equipos; por algo ser.

6x86MX (M2) de Cyrix (o IBM). Nada que aadir a lo dicho sobre el 6x86 clsico y el K6 de AMD; pues eso, un chip muy bueno para trabajo de oficinas, que incluye MMX y que nunca debe elegirse para CAD o juegos (peor que los AMD). Celeron (Pentium II light). En breve: un Pentium II sin la cach secundaria. Pensado para liquidar el mercado de placas base tipo Pentium no II (con socket 7, que se dice) y liquidar definitivamente a AMD y otras empresas molestas que usan estas placas. Esta gente de Intel no tiene compasin, sin duda... Muy poco recomendable, rendimiento mucho ms bajo que el de Pentium II, casi idntico al del Pentium MMX. AMD K6-2 (K6-3D). Consiste en una revisin del K6, con un ncleo similar pero aadindole capacidades 3D en lo que AMD llama la tecnologa 3DNow! (algo as como un MMX para 3D). Adems, generalmente trabaja con un bus de 100 MHz hacia cach y memoria, lo que le hace rendir igual que un Pentium II en casi todas las condiciones e incluso mucho mejor que ste cuando se trata de juegos 3D modernos (ya que necesitan estar optimizados para este chip o bien usar las DirectX 6 de Microsoft). Pentium III. El Pentium III es un microprocesador de arquitectura i686 fabricado por Intel; el cual es una modificacin del Pentium Pro. Existen tres versiones de Pentium III: Katmai, Coppermine y Tualatin. Pentium 4. El Pentium 4 (errneamente escrito Pentium IV) es un microprocesador de sptima generacin basado en la arquitectura x86 y fabricado por Intel. Es el primer microprocesador con un diseo completamente nuevo desde el Pentium Pro de 1995. El Pentium 4 original, denominado Willamette, trabajaba a 1,4 y 1,5 GHz; Pentium M. El Pentium M representa un cambio radical para Intel, ya que no es una versin de bajo consumo del Pentium 4, sino una versin fuertemente modificada del diseo del Pentium III (que a su vez es una modificacin del Pentium Pro).

M. D. O. H. Sonia Alvarado Mares

17

Lenguaje Ensamblador
Los miembros de la familia Pentium M son los siguientes: Pentium M Banias Pentium M Dothan Pentium M Dothan (SonomaPentium M Yonah (Core Solo y Core Duo)

Pentium D. Los procesadores Pentium D fueron introducidos por Intel en el verano de 2005 Intel Developer Forum. Un chip Pentium D consiste bsicamente en dos procesadores Pentium 4 (de ncleo Prescott) en una nica pieza de silicio con un proceso de fabricacin de 90 nm. El nombre en clave del Pentium D antes de su lanzamiento era "Smithfield". Incluye una tecnologa DRM (Digital Rights Management) para hacer posible un sistema de proteccin anticopia de la mano de Microsoft. Existen Seis variantes del Pentium D: Pentium D 805, a 2.6 GHz Pentium D 820, a 2.8 GHz Pentium D 830, a 3.0 GHz Pentium D 840, a 3.2 GHz Pentium D Extreme Edition, a 3.2 GHz, con Hyper Threading.

Intel Core Duo. Este microprocesador implementa 2Mb de cach compartida para ambos ncleos ms un bus frontal de 667Mhz; adems implementa un nuevo juego de instrucciones para multimedia (SSE3) y mejoras para las SSE y SSE2, sin embargo, el desempeo con enteros es ligeramente inferior debido a su cach con mayor latencia. Intel Core 2 Duo. El procesador Core 2 Duo de Intel es la continuacin de los Pentium D y Core Duo. El acceso a memoria inteligente optimiza el ancho de banda de datos. Su arquitectura se basa en la del Pentium M, pues demostr ser mucho ms eficiente que la arquitectura de Pentium 4. Intel Core 2 Quad. Core 2 Quad o Core Quad son la nueva serie de procesadores de Intel de 4 ncleos (no confundir con Core 2 Extreme) que sali al mercado en el primer trimestre del 2007. Estos procesadores sern un 70% ms rpido que los Core 2 Duo, llevando a Intel nuevamente a la delantera en velocidad y rendimiento de procesadores.

M. D. O. H. Sonia Alvarado Mares

18

Lenguaje Ensamblador

Desarrollo de los Microprocesadores Intel.


Ancho Nmero de Memoria Memoria de transistores direccionable virtual bus 2.300 (10 micras)

Procesador

Fecha de Velocidad presentacin de reloj

Breve descripcin Primer chip con manipulacin aritmtica Manipulacin Datos/texto 10 veces las (6 micras) prestaciones del 8008 10 veces las prestaciones del 8080 Idntico al 8086 excepto en su bus externo de 8 bits De 3 a 6 veces las prestaciones del 8086

4004

15/11/71

108 KHz. 4 bits

640 byte

8008

1/4/72

108 KHz. 8 bits

3.500

16 KBytes

8080

1/4/74

2 MHz.

8 bits

6.000

64 KBytes

8086

8/6/78

5 MHz. 8 MHz. 16 bits 10 MHz.

29.000 (3 micras)

1 MegaByte

8088

1/6/79

5 MHz. 8 MHz.

8 bits

29.000

80286

1/2/82

8 MHz. 134.000 1 10 MHz. 16 Bits 16 Megabytes Gigabyte (1.5 micras) 12 MHz. 16 MHz. 20 MHz. 32 Bits 25 MHz. 33 MHz.

Microprocesador Intel 386 DX

17/10/85

275.000 (1 micra)

4 Gigabytes

Primer chip x86 capaz de 64 manejar Terabytes juegos de datos de 32 bits Bus capaz de direccionar 16 64 bits Terabytes procesando 32bits a bajo coste

Microprocesador Intel 386 SX

16/6/88

16 MHz. 16 Bits 20 MHz.

275.000 (1 micra)

4 gigabytes

M. D. O. H. Sonia Alvarado Mares

19

Lenguaje Ensamblador

Tabla 1.1 Desarrollo de los microprocesadores de Intel.

Desarrollo de los Microprocesadores Intel.


(continacin)

Procesador

Ancho Fecha de Velocidad Nmero de Memoria Memoria Breve de bus presentacin de reloj transistores direccionable virtual descripcin Bus capaz de direccionar 16 64 bits Terabytes procesando 32bits a bajo coste Cach de 64 nivel 1 en el Terabytes chip Idntico en diseo al Intel 64 486DX, pero sin Terabytes coprocesador matemtico

Microprocesador Intel 386 SX

16/6/88

16 MHz. 20 MHz.

16 Bits

275.000 (1 micra)

4 gigabytes

Microprocesador Intel 486 DX

10/4/89

25 MHz. 33 MHz. 50 MHz. 16 MHz. 20 MHz. 25 MHz. 33 MHz.

(1 micra, 0.8 32 Bits micras en 50 MHz.)

4 Gigabytes

Microprocesador Intel 486 SX

22/4/91

32 Bits

1.185.000 (0.8 micras)

4 Gigabytes

Procesador Pentium

22/3/93

60 MHz. 66 MHz. 75 MHz. 90 MHz. 100 MHz. 3,1 millones 32 Bits 120 MHz. (0.8 micras) 133 MHz. 150 MHz. 166 MHz. 200 MHz.

4 Gigabytes

Arquitectura escalable. Hasta 5 64 veces las Terabytes prestaciones del 486 DX a 33 MHz.

Procesador PentiumPro

27/3/95

150 MHz. 5,5 millones 180 MHz. 64 Bits 4 Gigabytes (0.32 micras) 200 MHz. 233 MHz. 64 Bits 7,5 millones 4 Gigabytes 266 MHz. (0.32 micras) 300 MHz.

Arquitectura de ejecucin 64 dinmica con Terabytes procesador de altas prestaciones 64 S.E.C., MMX, Terabytes Doble Bus Indep.,

Procesador PentiumII

7/5/97

M. D. O. H. Sonia Alvarado Mares

20

Lenguaje Ensamblador
Ejecucin Dinmica

Tabla 1.1 Desarrollo de los microprocesadores de Intel (continuacin).

1.1.3 Tipos de lenguajes ensambladores.


Aunque todos los ensambladores realizan bsicamente las mismas tareas, podemos clasificarlos de acuerdo a caractersticas. As podemos clasificarlos en:

Ensambladores Cruzados (Cross-Assembler).


Se denominan as los ensambladores que se utilizan en una computadora que posee un procesador diferente al que tendrn las computadoras donde va a ejecutarse el programa objeto producido. El empleo de este tipo de traductores permite aprovechar el soporte de medios fsicos (discos, impresoras, pantallas, etc.), y de programacin que ofrecen las mquinas potentes para desarrollar programas que luego los van a ejecutar sistemas muy especializados en determinados tipos de tareas.

Ensambladores Residentes.
Son aquellos que permanecen en la memoria principal de la computadora y cargan, para su ejecucin, al programa objeto producido. Este tipo de ensamblador tiene la ventaja de que se puede comprobar inmediatamente el programa sin necesidad de transportarlo de un lugar a otro, como se haca en cross-assembler, y sin necesidad de programas simuladores. Sin embargo, puede presentar problemas de espacio de memoria, ya que el traductor ocupa espacio que no puede ser utilizado por el programador. Asimismo, tambin ocupar memoria el programa fuente y el programa objeto. Esto obliga a tener un espacio de memoria relativamente amplio. Es el indicado para desarrollos de pequeos sistemas de control y sencillos automatismo empleando microprocesadores. La ventaja de estos ensambladores es que permiten ejecutar inmediatamente el programa; la desventaja es que deben mantenerse en la memoria principal tanto el ensamblador como el programa fuente y el programa objeto.

Macroensambladores.
Son ensambladores que permiten el uso de macroinstrucciones (macros). Debido a su potencia, normalmente son programas robustos que no permanecen en memoria una vez generado el programa objeto. Puede variar la complejidad de los mismos, dependiendo de

M. D. O. H. Sonia Alvarado Mares

21

Lenguaje Ensamblador
las posibilidades de definicin y manipulacin de las macroinstrucciones, pero normalmente son programas bastantes complejos, por lo que suelen ser ensambladores residentes.

Microensambladores.
Generalmente, los procesadores utilizados en las computadoras tienen un repertorio fijo de instrucciones, es decir, que el intrprete de las mismas interpretaba de igual forma un determinado cdigo de operacin. El programa que indica al intrprete de instrucciones de la UCP cmo debe actuar se denomina microprograma. El programa que ayuda a realizar ste microprograma se llama microensamblador. Existen procesadores que permiten la modificacin de sus microprogramas, para lo cual se utilizan microensambladores.

Ensambladores de una fase.


Estos ensambladores leen una lnea del programa fuente y la traducen directamente para producir una instruccin en lenguaje mquina o la ejecuta si se trata de una pseudoinstruccin. Tambin va construyendo la tabla de smbolos a medida que van apareciendo las definiciones de variables, etiquetas, etc. Debido a su forma de traduccin, estos ensambladores obligan a definir los smbolos antes de ser empleados para que, cuando aparezca una referencia a un determinado smbolo en una instruccin, se conozca la direccin de dicho smbolo y se pueda traducir de forma correcta. Estos ensambladores son sencillos, baratos y ocupan poco espacio, pero tiene el inconveniente indicado.

Ensambladores de dos fases.


Los ensambladores de dos fases se denominan as debido a que realizan la traduccin en dos etapas. En la primera fase, leen el programa fuente y construyen una tabla de smbolos; de esta manera, en la segunda fase, vuelven a leer el programa fuente y pueden ir traduciendo totalmente, puesto que conocen la totalidad de los smbolos utilizados y las posiciones que se les ha asignado. Estos ensambladores son los ms utilizados en la actualidad.

M. D. O. H. Sonia Alvarado Mares

22

Lenguaje Ensamblador

1.1.4 Clasificacin de memorias.


Las memorias han evolucionado mucho desde los comienzos del mundo de la computacin. Conviene recordar los tipos de memorias de semiconductores empleadas como memoria principal y unas ligeras pinceladas sobre cada una de ellas para enmarcar las memorias flash dentro de su contexto.

Jerarqua de memoria.
En un ordenador hay una jerarqua de memorias atendiendo al tiempo de acceso y a la capacidad que normalmente son factores contrapuestos por razones econmicas y en muchos casos tambin fsicas. Comenzando desde el procesador al exterior, es decir en orden creciente de tiempo de acceso y capacidad, se puede establecer la siguiente jerarqua: Registros de procesador. Estos registros interaccionan continuamente con la CPU (porque forman parte de ella). Los registros tienen un tiempo de acceso muy pequeo y una capacidad mnima, normalmente igual a la palabra del procesador (1 a 8 bytes). Registros intermedios. Constituyen un paso intermedio entre el procesador y la memoria, tienen un tiempo de acceso muy breve y muy poca capacidad. Memorias cach. Son memorias de pequea capacidad. Normalmente una pequea fraccin de la memoria principal y pequeo tiempo de acceso. Este nivel de memoria se coloca entre la CPU y la memoria central. Hace algunos aos este nivel era exclusivo de los ordenadores grandes pero actualmente todos los ordenadores lo incorporan. Dentro de la memoria cach puede haber, a su vez, dos niveles denominados cach on chip, memoria cach dentro del circuito integrado, y cach on board, memoria cach en la placa de circuito impreso pero fuera del circuito integrado, evidentemente, por razones fsicas, la primera es mucho ms rpida que la segunda. Existe tambin una tcnica, denominada Arquitectura Harvard, en cierto modo contrapuesta a la idea de Von Newmann, que utiliza memorias cach separadas para cdigo y datos. Esto tiene algunas ventajas. Memoria central o principal. En este nivel residen los programas y los datos. La CPU lee y escribe datos en l aunque con menos frecuencia que en los niveles anteriores. Tiene un tiempo de acceso relativamente rpido y gran capacidad. Extensiones de memoria central. Son memorias de la misma naturaleza que la memoria central que amplan su capacidad de forma modular. El tiempo de similar, a lo sumo un poco mayor, al de la memoria central y su capacidad puede ser algunas veces mayor. Memorias de masas o auxiliares. Son memorias que residen en dispositivos externos al ordenador, en ellas se archivan programas y datos para su uso posterior. Tambin se

M. D. O. H. Sonia Alvarado Mares

23

Lenguaje Ensamblador
usan estas memorias para apoyo de la memoria central en caso de que sta sea insuficiente (memoria virtual). Estas memorias suelen tener gran capacidad pero pueden llegar a tener un tiempo de acceso muy lento. Dentro de ellas tambin se pueden establecer varios niveles de jerarqua.

Categoras de memorias.
Las memorias se clasifican, por la tecnologa empleada y, adems segn la forma en que se puede modificar su contenido. Organizando estos tipos de memoria conviene destacar tres categoras si las clasificamos en funcin de las operaciones que podemos realizar sobre ellas, es decir, memorias de slo lectura, memorias de sobre todo lectura y memorias de lectura escritura.

Memorias de slo lectura.


ROM: Se usan principalmente en microprogramacin de sistemas. Los fabricantes las suelen emplear cuando producen componentes de forma masiva. Es una memoria solamente de lectura es totalmente inalterable sin esta memoria la mquina no arrancara. La memoria principal es la convencional que va de 0 a 640 kb. Cuando la mquina arranca comienza a trabajar el disco y realiza un testeo, para lo cual necesita memoria, esta memoria es la convencional (ROM) y est dentro de la tarjeta madre (en el BIOS). Apenas arranca utiliza 300 kb, sigue testeando y llega a ms o menos 540 kb donde se planta. A medida de que comenz a haber software con ms necesidad de memoria apareci la llamada memoria expandida que iba de 640 kb a 1024 kb. Una vez que se utilizaba toda la memoria convencional se utilizaba la expandida que utiliza la memoria RAM. A medida que pasa el tiempo los 1024 kb eran escasos y se creo la memoria extendida que va de 1024 kb a infinito que es la memoria RAM pura. PROM: (Programmable Read Only Memory): El proceso de escritura es elctrico. Se puede grabar posteriormente a la fabricacin del chip, a diferencia de las anteriores que se graba durante la fabricacin. Permite una nica grabacin y es ms cara que la ROM. Es una memoria digital donde el valor de cada bit depende del estado de un fusible (o antifusible), que puede ser quemado una sola vez. Por esto la memoria puede ser programada (pueden ser escritos los datos) una sola vez a travs de un dispositivo especial, un programador PROM. Estas memorias son utilizadas para grabar datos permanentes en cantidades menores a las ROMs, o cuando los datos deben cambiar en muchos o todos los casos. Pequeas PROM han venido utilizndose como generadores de funciones, normalmente en conjuncin con un multiplexor. A veces se preferan a las ROM porque son bipolares, consiguiendo mayores velocidades. Una PROM comn se encuentra con todos los bits en valor 1 como valor por defecto de fbrica; el quemado de cada fusible, cambia el valor del correspondiente bit a 0. La programacin se realiza aplicando pulsos de altos voltajes que no se encuentran durante operaciones normales (12 a 21 voltios). El trmino Read-only

M. D. O. H. Sonia Alvarado Mares

24

Lenguaje Ensamblador
(slo lectura) se refiere a que, a diferencia de otras memorias, los datos no pueden ser cambiados (al menos por el usuario final).

Memorias de sobre todo lectura. lectura.


EPROM: (EPROM son las siglas de Erasable Programmable Read-Only Memory; ROM borrable programable). Es un tipo de chip de memoria ROM inventado por el ingeniero Dov Frohman que retiene los datos cuando la fuente de energa se apaga. En otras palabras, es no voltil. Est formada por celdas de FAMOS (Floating Gate Avalanche-Injection Metal-Oxide Semiconductor) o transistores de puerta flotante. Cada uno de ellos viene de fbrica sin carga, por lo que es ledo como un 1 (por eso una EPROM sin grabar se lee como FF en todas sus celdas). Se programan mediante un dispositivo electrnico que proporciona voltajes superiores a los normalmente utilizados en los circuitos electrnicos. Las celdas que reciben carga se leen entonces como un 0. Una vez programada, una EPROM se puede borrar solamente mediante exposicin a una fuerte luz ultravioleta. Esto es debido a que los fotones de la luz excitan a los electrones de las celdas provocando que se descarguen. Las EPROMs se reconocen fcilmente por una ventana transparente en la parte alta del encapsulado, a travs de la cual se puede ver el chip de silicio y que admite la luz ultravioleta durante el borrado. EEPROM: son las siglas de Electrically-Erasable Programmable Read-Only Memory (ROM programable y borrable elctricamente), o en espaol o castellano se suele referir al hablar como EEPROM y en ingls E-Squared-PROM. Es un tipo de memoria ROM que puede ser programado, borrado y reprogramado elctricamente, a diferencia de la EPROM que ha de borrarse mediante rayos ultravioletas. Esta memoria tambin es conocida como EAROM (electrically alterable ROM). Aunque una EEPROM puede ser leda un nmero ilimitado de veces, slo puede ser borrada y reprogramada entre 100.000 y 1.000.000 de veces. Estos dispositivos suelen comunicarse mediante protocolos como IC, SPI y Microwire. En otras ocasiones se integra dentro de chips como microcontroladores y DSPs para lograr una mayor rapidez. La memoria flash es una forma avanzada de EEPROM creadas por Dr. Fujio Masuoka mientras trabajaba para Toshiba in 1984 y fueron presentadas en la Reunn de Aparatos Electrnicos de la IEEE de 1984. Intel vi el potencial de la invencin y en 1988 lanz el primer chip comercial del tipo NOR. Memoria Flash: Est basada en las memorias EEPROM pero permite el borrado bloque a bloque y es ms barata y densa. La memoria flash es una forma evolucionada de la memoria EEPROM que permite que mltiples posiciones de memoria sean escritas o borradas en una misma operacin de programacin mediante impulsos elctricos, frente a las anteriores que slo permite escribir o borrar una nica celda cada vez. Por ello, flash permite funcionar a velocidades muy superiores cuando los sistemas emplean lectura y escritura en diferentes puntos de esta memoria al mismo tiempo. Flash, como tipo de EEPROM que es, contiene un arreglo

M. D. O. H. Sonia Alvarado Mares

25

Lenguaje Ensamblador
de celdas con un transistor evolucionado con dos puertas en cada interseccin. Tradicionalmente slo almacenan un bit de informacin. Las nuevas memorias flash, llamadas tambin dispositivos de celdas multi-nivel, pueden almacenar ms de un bit por celda variando el nmero de electrones que almacenan.

Estas memorias estn basada en el transistor FAMOS (Floating Gate Avalanche-Injection Metal Oxide Semiconductor) que es, esencialmente un transistor NMOS con un conductor (basado en un xido metlico) adicional entre la puerta de control (CG Control Gate) y los terminales fuente/drenador contenidos en otra puerta (FG Floating Gate) o bien que rodea a FG y es quien contiene los electrones que almacenan la informacin. Memoria flash de tipo NOR: Cuando los electrones se encuentran en FG, modifican (prcticamente anulan) el campo elctrico que generara CG en caso de estar activo. De esta forma, dependiendo de si la celda est a 1 a 0, el campo elctrico de la celda existe o no. Entonces, cuando se lee la celda poniendo un determinado voltaje en CG, la corriente elctrica fluye o no en funcin del voltaje almacenado en la celda. La presencia/ausencia de corriente se detecta e interpreta como un 1 un 0, reproduciendo as el dato almacenado. En los dispositivos de celda multi-nivel, se detecta la intensidad de la corriente para controlar el nmero de electrones almacenados en FG e interpretarlos adecuadamente. Para programar una celda de tipo NOR (asignar un valor determinado) se permite el paso de la corriente desde el terminal fuente al terminal sumidero, entonces se coloca en CG un voltaje alto para absorber los electrones y retenerlos en el campo elctrico que genera. Este proceso se llama hot-electron injection. Para borrar (poner a 1, el estado natural del transistor) el contenido de una celda, expulsar estos electrones, se emplea la tcnica de Fowler-Nordheim tunnelling, un proceso de tunelado mecnico cuntico. Esto es, aplicar un voltaje inverso bastante alto al empleado para atraer a los electrones, convirtiendo al transistor en una pistola de electrones que permite, abriendo el terminal sumidero, que los electrones abandonen el mismo. Este proceso es el que provoca el deterioro de las celdas, al aplicar sobre un conductor tan delgado un voltaje tan alto. Cabe destacar que las memorias flash estn subdividas en bloques (en ocasiones llamados sectores) y por lo tanto, para el borrado, se limpian bloques enteros para agilizar el proceso, ya que es la parte ms lenta del proceso. Por esta razn, las memorias flash son mucho ms rpidas que las EEPROM convencionales, ya que borran byte a byte. No obstante, para reescribir un dato es necesario limpiar el bloque primero para reescribir su contenido despus. Memorias flash de tipo NAND: Basadas en puertas lgicas NAND funcionan de forma ligeramente diferente: usan un tnel de inyeccin para la escritura y para el borrado un tnel de soltado. Las memorias basadas en NAND tienen, adems de la evidente base en otro tipo de puertas, un costo bastante inferior, unas diez veces de ms resistencia a las operaciones pero slo permiten acceso secuencial (ms orientado a dispositivos de almacenamiento masivo), frente a las memorias flash basadas en NOR que permiten lectura de acceso

M. D. O. H. Sonia Alvarado Mares

26

Lenguaje Ensamblador
aleatorio. Sin embargo, han sido las NAND las que han permitido la expansin de este tipo de memoria, ya que el mecanismo de borrado es ms sencillo (aunque tambin se borre por bloques) lo que ha proporcionado una base ms rentable para la creacin de dispositivos de tipo tarjeta de memoria.

Comparacin de memorias flash basadas en NOR y NAND. Para comparar estos tipos de memoria se consideran los diferentes aspectos de las memorias tradicionalmente valorados. La densidad de almacenamiento de los chips es actualmente bastante mayor en las memorias NAND. El costo de NOR es mucho mayor. El acceso NOR es aleatorio para lectura y orientado a bloques para su modificacin. Sin embargo, NAND ofrece tan solo acceso directo para los bloques y lectura secuencial dentro de los mismos. En la escritura de NOR podemos llegar a modificar un solo bit. Esto destaca con la limitada reprogramacin de las NAND que deben modificar bloques o palabras completas. La velocidad de lectura es muy superior en NOR (50100 ns) frente a NAND (10 s de la bsqueda de la pgina + 50 ns por byte). La velocidad de escritura para NOR es de 5 s por byte frente a 200 s por pgina en NAND. La velocidad de borrado para NOR es de 1 ms por bloque de 64 KB frente a los 2 ms por bloque de 16 KB en NAND. La fiabilidad de los dispositivos basados en NOR es realmente muy alta, es relativamente inmune a la corrupcin de datos y tampoco tiene bloques errneos frente a la escasa fiabilidad de los sistemas NAND que requieren correccin de datos y existe la posibilidad de que queden bloques marcados como errneos e inservibles. En resumen, los sistemas basados en NAND son ms baratos y rpidos pero carecen de una fiabilidad que los haga eficiente, lo que demuestra la necesidad imperiosa de un buen sistema de archivos. Dependiendo de qu sea lo que se busque, merecer la pena decantarse por uno u otro tipo.

Memorias de Lectura/Escritura (RAM).


Memoria RAM o Memoria e acceso Aleatorio (Random Acces Memory). Esta memoria es como un escritorio al igual que los escritorios tienen cajones donde ordenan la informacin, cuanto mas grande sea el escritorio (plano de apoyo) mas cajones voy a tener de tal suerte que el micro va a perder menos tiempo en buscar y ordenar la informacin. La importancia de esta memoria es tan grande que si esta ausente la PC no arranca, acta como si estuviera muerta no hay sonido ni cursor en la pantalla ni luces que se enciendan o apaguen. Para que sirve: Almacena las instrucciones que debe ejecutar el micro en cada momento. Este es el lugar fsico donde debe trabajar el procesador cuando abrimos un programa sus instrucciones se copian automticamente en la memoria, y cuando cerremos el programa todo se borrara (volatizara). Tambin copia los trabajos que estamos haciendo en ese programa. En la RAM se copian programas que coordinan el funcionamiento de la PC: La primera parte de la RAM esta reservada para guardar las instrucciones de los dispositivos electrnicos. En este lugar no se puede guardar nada ya que lo utiliza el sistema para saber como manejar los dispositivos. DRAM (Dynamic Random Access Memory): Los datos se almacenan como en la carga de un condensador. Tiende a descargarse y, por lo tanto, es necesario un proceso de refresco peridico. Son ms simples y baratas que las SRAM.

M. D. O. H. Sonia Alvarado Mares

27

Lenguaje Ensamblador
Este tipo de memorias se utilizan desde los aos 80 hasta ahora en todas las computadoras. Esta memoria tiene una desventaja hay que estimularla (Refresco) permanentemente porque se olvida de todo. Como se estimula: requiere un procesador que ordene el envi de cargas elctricas, a este tipo de memorias se lo conoce como memoria estticas. Otras de las desventajas de esta memoria es que es lenta y la ventaja es que es barata. Obviamente al tener estas desventajas se le incorporaron distintas tecnologas para mejorarlas. FPM DRAM. La ventaja de este memoria consiste en pedir permiso una sola vez u llevarse varios datos consecutivos esto comenz a usarse principios de los aos noventa y di buenos resultados, a estos mdulos se los denominaron SIMM, FPM, DRAM y pueden tener 30 o 72 pines y se la utiliza en las Pentium I, lo que se logro con esta tecnologa es agilizar el proceso de lectura, estas memorias ya no se utilizan mas. EDO DRAM. Estas memorias aparecieron en el 95, y se hicieron muy populares ya que estaban presentes en todas las Pentium I MMX y tenan la posibilidad de localizar un dato mientras transfera otro de diferencia de las anteriores que mientras transfera un dato se bloqueaba. Estas EDO SIMM eran de 72 pines RDRAM. Es una memoria muy costosa y de compleja fabricacin y la utilizan procesador Pentim IV para arriba, corre a velocidades de 800 Mhz, sus mdulos se denominan RIMM de 141 pines y con un ancho de 16 bits, para llenar un banco de memoria de 64 bits hay que instalar 4 memorias, es posible que estas memoria sean retiradas del mercado por ser tan costosas. SDRAM. Esta Memoria entro en el mercado en los aos 97, y mejoro la velocidad siendo su ritmo de trabajo igual a la velocidad de Bus (FSB) es decir que tienen la capacidad de trabajar a la misma velocidad de la tarjeta madre a la que se conectan. Es tos mdulos de 168 Pines son conocidos como DIMM SDRAM PC 66 y 100, 133, obviamente si instalo una de 133, en una tarjeta madre de 100 va a funcionar a 100Mhz. DDR SDRAM. En este caso se consigui que pudiera realizar dos transferencia en una pulsacin o tic-tac de reloj, esta memoria pude alcanzar velocidades de 200 a 266Mhz, Tiene una ventaja mas trabaja en sincrona con el bus de la tarjeta madre, si este acelera la memoria tambin pero tiene una desventaja son muy caras. Se conoce como DIMM DDR SDRAM PC 1600 Y PC 2100. SRAM (Static Random Access Memory). Los datos se almacenan formando biestables, por lo que no requiere refresco. Igual que DRAM es voltil. Son ms rpidas que las DRAM y ms caras. Memoria Cach o SRAM. La memoria cach trabaja igual que la memoria virtual, tenemos cach en el procesador, en los discos y en el la tarjeta madre y nos guarda direcciones de memoria. Si ejecutamos un programa en principio, lo cerramos y luego los volvemos a ejecutar, la memoria cach nos guarda la ubicacin (direccin) en el disco, cuando lo ejecut, y lo que hicimos con el programa. Es mucho ms rpida cuando ya usamos un programa. Existen 3 tipos de memoria cach:

M. D. O. H. Sonia Alvarado Mares

28

Lenguaje Ensamblador

Cach L1: Esta dividido en dos bloques uno contiene las instrucciones y otro los L1 datos y cuando se habla de su capacidad de almacenamiento se dice que es de 216 Kb. El cach L1 se encuentra dentro del interior del procesador y funciona a la misma velocidad que el micro con capacidades que van desde 28 hasta 264Kb. Cach L2 interno y externo: La primeras memoria cach estaban ubicadas en la externo tarjeta madre luego se construyeron en el procesador, pero no dentro del dado del procesador por lo que es mas lento que el cach L1, mientras que el externo lo encontramos en la tarjeta madre. La computadoras que tienen las tres tecnologas de cach van a ser mas rpidas. Cache L3: Algunos micro soportan un nivel de cach mas el L3 que esta localizado L3 en la tarjeta madre. EL AMD 6k-3 soporta este cach.

M. D. O. H. Sonia Alvarado Mares

29

Lenguaje Ensamblador

1.1.5 Unidades de Entrada / Salida. Funciones que realiza. realiza.


Vamos a sealar las funciones que debe realizar un computador para ejecutar trabajos de entrada/salida:

Direccionamiento o seleccin del dispositivo, que debe llevar a cabo la operacin de E/S. Transferencia de los datos entre el procesador y el dispositivo (en uno u otro sentido). Sincronizacin y coordinacin de las operaciones. Esta ltima funcin es necesaria debido a la diferencia de velocidades entre los dispositivos y la CPU y a la independencia que debe existir entre los perifricos y la CPU (por ejemplo, suelen tener relojes diferentes).

Se define una transferencia elemental de informacin como la transmisin de una sola unidad de informacin (normalmente un byte) entre el procesador y el perifrico o viceversa. Para efectuar una transferencia elemental de informacin son precisas las siguientes funciones:

Establecimiento de una comunicacin fsica entre el procesador y el perifrico para la transmisin de la unidad de informacin. Control de los perifricos, en que se incluyen operaciones como prueba y modificacin del estado del perifrico. Para realizar estas funciones la CPU gestionar las lneas de control necesarias.

Definiremos una operacin de E/S como el conjunto de acciones necesarias para la transferencia de un conjunto de datos (es decir, una transferencia completa de datos). Para la realizacin de una operacin de E/S se deben efectuar las siguientes funciones:

Recuento de las unidades de informacin transferidas (normalmente bytes) para reconocer el fin de operacin. Sincronizacin de velocidad entre la CPU y el perifrico. Deteccin de errores (e incluso correccin) mediante la utilizacin de los cdigos necesarios (bits de paridad, cdigos de redundancia cclica, etc.)

M. D. O. H. Sonia Alvarado Mares

30

Lenguaje Ensamblador

Almacenamiento temporal de la informacin. Es ms eficiente utilizar un buffer temporal especfico para las operaciones de E/S que utilizan el rea de datos del programa. Conversin de cdigos, conversin serie/paralelo, etc.

Dispositivos externos.
Una de las funciones bsicas del ordenador es comunicarse con los dispositivos exteriores, es decir, el ordenador debe ser capaz de enviar y recibir datos desde estos dispositivos. Sin esta funcin, el ordenador no sera operativo porque sus clculos no seran visibles desde el exterior. Existe una gran variedad de dispositivos que pueden comunicarse con un ordenador, desde los dispositivos clsicos (terminales, impresoras, discos, cintas, etc.) hasta convertidores A/D y D/A para aplicaciones de medida y control de procesos. De todos los posibles perifricos, algunos son de lectura, otros de escritura y otros de lectura y escritura (es importante resaltar que este hecho siempre se mira desde el punto de vista del proceso). Por otra parte, existen perifricos de almacenamiento tambin llamados memorias auxiliares o masivas. La mayora de los perifricos estn compuestos por una parte mecnica y otra parte electrnica. Estas partes suelen separarse claramente para dar una mayor modularidad. A la componente electrnica del perifrico se le suele denominar controlador del dispositivo o, tambin, adaptador del dispositivo. Si el dispositivo no tiene parte mecnica (como, por ejemplo, la pantalla de un terminal), el controlador estar formado por la parte digital del circuito. Frecuentemente los controladores de los dispositivos estn alojados en una placa de circuito impreso diferenciada del resto del perifrico. En este caso es bastante habitual que un mismo controlador pueda dar servicio a dispositivos de caractersticas similares. El principal problema planteado por los perifricos es su gran variedad que tambin afecta a las velocidades de transmisin. Por tanto, el mayor inconveniente que encontramos en los perifricos es la diferencia entre sus velocidades de transmisin y la diferencia entre stas y la velocidad de operacin del ordenador.

Dispositivos de entrada. entrada.


Estos dispositivos permiten al usuario del ordenador introducir datos, comandos y programas en la CPU. El dispositivo de entrada ms comn es un teclado similar al de las mquinas de escribir. La informacin introducida con el mismo, es transformada por el ordenador en modelos reconocibles. Otros dispositivos de entrada son los lpices pticos, que transmiten informacin grfica desde tabletas electrnicas hasta el ordenador; joysticks y el ratn, que convierte el movimiento fsico en movimiento dentro de una pantalla de ordenador; los escneres luminosos, que leen palabras o smbolos de una pgina impresa y los traducen a configuraciones electrnicas que el ordenador puede manipular y almacenar; y los

M. D. O. H. Sonia Alvarado Mares

31

Lenguaje Ensamblador
mdulos de reconocimiento de voz, que convierten la palabra hablada en seales digitales comprensibles para el ordenador. Tambin es posible utilizar los dispositivos de almacenamiento para introducir datos en la unidad de proceso. Otros dispositivos de entrada, usados en la industria, son los sensores.

Dispositivos de Entrada/Salida. Entrada/Salida.


Los dispositivos de almacenamiento externos, que pueden residir fsicamente dentro de la unidad de proceso principal del ordenador, estn fuera de la placa de circuitos principal. Estos dispositivos almacenan los datos en forma de cargas sobre un medio magnticamente sensible, por ejemplo una cinta de sonido o, lo que es ms comn, sobre un disco revestido de una fina capa de partculas metlicas. Los dispositivos de almacenamiento externo ms frecuentes son los disquetes y los discos duros, aunque la mayora de los grandes sistemas informticos utiliza bancos de unidades de almacenamiento en cinta magntica. Los discos flexibles pueden contener, segn sea el sistema, desde varios centenares de miles de bytes hasta bastante ms de un milln de bytes de datos. Los discos duros no pueden extraerse de los receptculos de la unidad de disco, que contienen los dispositivos electrnicos para leer y escribir datos sobre la superficie magntica de los discos y pueden almacenar desde varios millones de bytes hasta algunos centenares de millones. La tecnologa de CD-ROM, que emplea las mismas tcnicas lser utilizadas para crear los discos compactos (CD) de audio, permiten capacidades de almacenamiento del orden de varios cientos de megabytes (millones de bytes) de datos. Tambin hay que aadir los recientemente aparecidos DVD que permiten almacenar ms de 4 Gb de informacin.

Dispositivos de salida. salida.


Estos dispositivos permiten al usuario ver los resultados de los clculos o de las manipulaciones de datos de la computadora. El dispositivo de salida ms comn es la unidad de visualizacin, que consiste en un monitor que presenta los caracteres y grficos en una pantalla similar a la del televisor. Por lo general, los monitores tienen un tubo de rayos catdicos como el de cualquier televisor, aunque los ordena-dores pequeos y porttiles utilizan hoy pantallas de cristal lquido (LCD, acrnimo de Liquid Crystal Displays) o electroluminiscentes. Otros dispositivos de salida ms comunes son las impresoras, que permiten obtener una copia impresa de la informacin que reside en los dispositivos de almacenamiento, las tarjetas de sonido y los mdem.

M. D. O. H. Sonia Alvarado Mares

32

Lenguaje Ensamblador

Un mdem enlaza dos ordenadores transformando las seales digitales en analgicas para que los datos puedan transmitirse a travs de las lneas telefnicas convencionales.

1.2

EL MICROPROCESADOR.
1.2.1

Buses.

Funciones que realiza el bus del sistema.


El bus se puede definir como un conjunto de lneas conductoras de hardware utilizadas para la transmisin de datos entre los componentes de un sistema informtico. Un bus es en esencia una ruta compartida que conecta diferentes partes del sistema, como el microprocesador, la controladora de unidad de disco, la memoria y los puertos de entrada/salida (E/S), para permitir la transmisin de informacin. En el bus se encuentran dos pistas separadas, el bus de datos y el bus de direcciones. La CPU escribe la direccin de la posicin deseada de la memoria en el bus de direcciones accediendo a la memoria, teniendo cada una de las lneas carcter binario. Es decir solo pueden representar 0 1 y de esta manera forman conjuntamente el nmero de la posicin dentro de la memoria (es decir: la direccin). Cuantas ms lneas hallan disponibles, mayor es la direccin mxima y mayor es la memoria a la cual puede dirigirse de esta forma. En el bus de direcciones original haba ya 20 direcciones, ya que con 20 bits se puede dirigir a una memoria de 1 Mb y esto era exactamente lo que corresponda a la CPU. Esto que en le teora parece tan fcil es bastante mas complicado en la prctica, ya que aparte de los bus de datos y de direcciones existen tambin casi dos docenas ms de lneas de seal en la comunicacin entre la CPU y la memoria, a las cuales tambin se acude. Todas las tarjetas del bus escuchan, y se tendr que encontrar en primer lugar una tarjeta que mediante el envo de una seal adecuada indique a la CPU que es responsable de la direccin que se ha introducido. Las dems tarjetas se despreocupan del resto de la comunicacin y quedan a la espera del prximo ciclo de transporte de datos que quizs les incumba a ellas.

M. D. O. H. Sonia Alvarado Mares

33

Lenguaje Ensamblador

Tabla 1.2 Tamao de buses de microprocesadores de Intel.

Este mismo concepto es tambin la razn por la cual al utilizar tarjetas de ampliacin en un PC surgen problemas una y otra vez, si hay dos tarjetas que reclaman para ellas el mismo campo de direccin o campos de direccin que se solapan entre ellos. Los datos en si no se mandan al bus de direcciones sino al bus de datos. El bus XT tena solo 8 bits con lo cual slo poda transportar 1 byte a la vez. Si la CPU quera depositar el contenido de un registro de 16 bits o por valor de 16 bits, tena que desdoblarlos en dos bytes y efectuar la transferencia de datos uno detrs de otro. De todas maneras para los fabricantes de tarjetas de ampliacin, cuyos productos deben atenderse a este protocolo, es de una importancia bsica la regulacin del tiempo de las seales del bus, para poder trabajar de forma inmejorable con el PC. Pero precisamente este protocolo no ha sido nunca publicado por lBM con lo que se obliga a los fabricantes a medir las seales con la ayuda de tarjetas ya existentes e imitarlas. Por lo tanto no es de extraar que se pusieran en juego tolerancias que dejaron algunas tarjetas totalmente eliminadas.

Estructuras de interconexin. interconexin.


Existen dos organizaciones fsicas de operaciones E/S que tienen que ver con los buses que son: Bus nico y Bus dedicado. La primera gran diferencia entre estas dos tipos de estructuras es que el bus nico no permite un controlador DMA (todo se controla desde la CPU), mientras que el bus dedicado si que soporta este controlador. El bus dedicado trata a la memoria de manera distinta que a los perifricos (utiliza un bus especial) al contrario que el bus nico que los considera a ambos como posiciones de memoria (incluso equipara las operaciones E/S con las de lectura/escritura en memoria). Este bus especial que utiliza el bus dedicado tiene 4 componentes fundamentales:

Datos: Intercambio de informacin entre la CPU y los perifricos.

M. D. O. H. Sonia Alvarado Mares

34

Lenguaje Ensamblador

Control: Lleva informacin referente al estado de los perifricos (peticin de interrupciones). Direcciones: Identifica el perifrico referido. Sincronizacin: Temporiza las seales de reloj.

La mayor ventaja del bus nico es su simplicidad de estructura que le hace ser ms econmico, pero no permite que se realice a la vez transferencia de informacin entre la memoria y el procesador y entre los perifricos y el procesador. Por otro lado el bus dedicado es mucho ms flexible y permite transferencias simultneas. Por contra su estructura es ms compleja y por tanto sus costes son mayores.

TIPOS DE BUSES. BUSES. Ahora vamos a ver los distintos tipos de buses que se han ido desarrollando y los que se emplean en la actualidad.

El bus XT y el bus ISA (AT).


Cuando en 1980 IBM fabric su primer PC, este contaba con un bus de expansin conocido como XT que funcionaba a la misma velocidad que los procesadores Intel 8086 y 8088 (4.77 Mhz). El ancho de banda de este bus (8 bits) con el procesador 8088 formaba un tandem perfecto, pero la ampliacin del bus de datos en el 8086 a 16 bits dejo en entredicho este tipo de bus (aparecieron los famosos cuellos de botella). Dada la evolucin de los microprocesadores el bus del PC no era ni mucho menos la solucin para una comunicacin fluida con el exterior del micro. En definitiva no poda hablarse de una autopista de datos en un PC cuando esta slo tena un ancho de 8 bits. Por lo tanto con la introduccin del AT apareci un nuevo bus en el mundo del PC, que en relacin con el bus de datos tena finalmente 16 bits (ISA), pero que era compatible con su antecesor. La nica diferencia fue que el bus XT era sncrono y el nuevo AT era asncrono. Las viejas tarjetas de 8 bits de la poca del PC pueden por tanto manejarse con las nuevas tarjetas de 16 bits en un mismo dispositivo. De todas maneras las tarjetas de 16 bits son considerablemente ms rpidas, ya que transfieren la misma cantidad de datos en comparacin con las tarjetas de 8 bits en la mitad de tiempo (transferencia de 16 bits en lugar de transferencia de 8 bits). No tan solo se ampli el bus de datos sino que tambin se ampli el bus de direcciones, concretamente hasta 24 bits, de manera que este se poda dirigir al AT con memoria de 16 MB. Adems tambin se aument la velocidad de cada una de las seales de frecuencia, de manera que toda la circulacin de bus se desarrollaba ms rpidamente. De 4.77 Mhz en el XT se pas a 8.33 Mhz. Como consecuencia el bus forma un cuello de botella por el cual no pueden transferirse nunca los datos entre la memoria y la CPU lo

M. D. O. H. Sonia Alvarado Mares

35

Lenguaje Ensamblador
suficientemente rpido. En los discos duros modernos por ejemplo, la relacin (ratio) de transferencia de datos ya es superior al ratio del bus. A las tarjetas de ampliacin se les ha asignado incluso un freno de seguridad, concretamente en forma de una seal de estado de espera (wait state), que deja todava ms tiempo a las tarjetas lentas para depositar los datos deseados en la CPU. Especialmente por este motivo el bus AT encontr sucesores de ms rendimiento en Micro Channel y en el Bus EISA, que sin embargo, debido a otros motivos, no han tenido xito.

Bus Micro Channel (MCA).


Vistas las limitaciones que tena el diseo del bus ISA en IBM se trabaj en un nueva tecnologa de bus que comercializ con su gama de ordenadores PS/2. El diseo MCA (Micro Channel Arquitecture) permita una ruta de datos de 32 bits, ms ancha, y una velocidad de reloj ligeramente ms elevada de 10 Mhz, con una velocidad de transferencia mxima de 20 Mbps frente a los 8 Mbps del bus ISA. Pero lo que es ms importante el novedoso diseo de bus de IBM incluy un circuito de control especial a cargo del bus, que le permita operar independientemente de la velocidad e incluso del tipo del microprocesador del sistema. Bajo MCA, la CPU no es ms que uno de los posibles dispositivos dominantes del bus a los que se puede acceder para gestionar transferencias. La circuitera de control, llamada CAP (punto de decisin central), se enlaza con un proceso denominado control del bus para determinar y responder a las prioridades de cada uno de los dispositivos que dominan el bus. Para permitir la conexin de ms dispositivos, el bus MCA especifica interrupciones sensibles al nivel, que resultan ms fiables que el sistema de interrupciones del bus ISA. De esta forma es posible compartir interrupciones. Pero adems se impusieron estndares de rendimiento superiores en las tarjetas de expansin. Es cierto que el progreso conlleva un precio: La arquitectura de IBM era totalmente incompatible con las tarjetas de expansin que se incluyen en el bus ISA. Esto viene derivado de que los conectores de las tarjetas de expansin MCA eran ms pequeos que las de los buses ISA. De esto se pueden sacar dos conclusiones. Por un lado el coste de estas tarjetas era menor y por otro ofreca un mayor espacio interior en las pequeas cajas de sobremesa. Las seales del bus estaban reorganizadas de forma que se introduca una seal de tierra cada 4 conectores. De esta forma se ayudaba a reducir las interferencias.

EISA (Extended ISA).


El principal rival del bus MCA fue el bus EISA, tambin basado en la idea de controlar el bus desde el microprocesador y ensanchar la ruta de datos hasta 32 bits. Sin embargo EISA mantuvo compatibilidad con las tarjetas de expansin ISA ya existentes lo cual le

M. D. O. H. Sonia Alvarado Mares

36

Lenguaje Ensamblador
obligo a funcionar a una velocidad de 8 Mhz (exactamente 8.33). Esta limitacin fue la que adjudico el papel de estndar a esta arquitectura, ya que los usuarios no vean factible cambiar sus antiguas tarjetas ISA por otras nuevas que en realidad no podan aprovechar al 100%. Su mayor ventaja con respecto al bus MCA es que EISA era un sistema abierto, ya que fue desarrollado por la mayora de fabricantes de ordenadores compatibles PC que no aceptaron el monopolio que intent ejercer IBM. Estos fabricantes fueron: AST, Compaq, Epson, Hewlett Packard, NEC, Olivetti, Tandy, Wyse y Zenith. Esta arquitectura de bus permite multiproceso, es decir, integrar en el sistema varios buses dentro del sistema, cada uno con su procesador. Si bien esta caracterstica no es utilizada ms que por sistemas operativos como UNIX o Windows NT. En una mquina EISA, puede haber al mismo tiempo hasta 6 buses principales con diferentes procesadores centrales y con sus correspondientes tarjetas auxiliares. En este bus hay un chip que se encarga de controlar el trfico de datos sealando prioridades para cada posible punto de colisin o bloqueo mediante las reglas de control de la especificacin EISA. Este chip recibe el nombre de Chip del Sistema Perifrico Integrado (ISP). Este chip acta en la CPU como un controlador del trfico de datos. El motivo para que ni MCA ni EISA hayan sustituido por completo a ISA es muy sencillo: Estas alternativas aumentaban el coste del PC (incluso ms del 50%) y no ofrecan ninguna mejora evidente en el rendimiento del sistema. Es ms, en el momento en que se presentaron estos buses (1987-1988) esta superioridad en el rendimiento no resultaba excesivamente necesaria: muy pocos dispositivos llegaban a los lmites del rendimiento del bus ISA ordinario.

Local Bus.
Teniendo en cuenta las mencionadas limitaciones del bus AT y la infalibilidad de los buses EISA y MCA para asentarse en el mercado, en estos aos se han ideado otros conceptos de bus. Se inici con el llamado Vesa Local Bus (VL-Bus), que fue concebido y propagado independientemente por el Comit VESA, que se propuso el definir estndares en el mbito de las tarjetas grficas y as por primera vez y realmente tuviera poco que ver con el diseo del bus del PC. Fueron y son todava las tarjetas grficas quienes sufren la menor velocidad del bus AT. Por eso surgi, en el Comit VESA, la propuesta para un bus ms rpido que fue el VESA Local Bus.

Vesa Local Bus.


Al contrario que con el EISA, MCA y PCI, el bus VL no sustituye al bus ISA sino que lo complementa. Un PC con bus VL dispone para ello de un bus ISA y de las correspondientes ranuras (slots) para tarjetas de ampliacin. Adems, en un PC con bus VL puede haber, sin embargo, una, dos o incluso tres ranuras de expansin, para la colocacin de tarjetas concebidas para el bus VL, casi siempre grficos. Solamente estos slots estn conectados con la CPU a travs de un bus VL, de tal manera que las otras

M. D. O. H. Sonia Alvarado Mares

37

Lenguaje Ensamblador
ranuras permanecen sin ser molestadas y las tarjetas ISA pueden hacer su servicio sin inconvenientes. El VL es una expansin homogeneizada de bus local, que funciona a 32 bits, pero que puede realizar operaciones a 16 bits. VESA present la primera versin del estndar VL-BUS en agosto de 1992. La aceptacin por parte del mercado fue inmediata. Fiel a sus orgenes, el VL-BUS se acerca mucho al diseo del procesador 80486. De hecho presenta las mismas necesidades de seal de dicho chip, exceptuando unas cuantas menos estrictas destinadas a mantener la compatibilidad con los 386. La especificacin VL-Bus como tal, no establece lmites, ni superiores ni inferiores, en la velocidad del reloj, pero una mayor cantidad de conectores supone una mayor capacitancia, lo que hace que la fiabilidad disminuya a la par que aumenta la frecuencia. En la prctica, el VL-BUS no puede superar los 66 Mhz. Por este motivo, la especificacin VL-BUS original recomienda que los diseadores no empleen ms de tres dispositivos de bus local en sistemas que operan a velocidades superiores a los 33 Mhz. A velocidades de bus superiores, el total disminuye: a 40 Mhz solo se pueden incorporar dos dispositivos; y a 50 Mhz un nico dispositivo que ha de integrarse en la placa. En la prctica, la mejor combinacin de rendimiento y funciones aparece a 33 Mhz. Tras la presentacin del procesador Pentium a 64 bits, VESA comenz a trabajar en un nuevo estndar (VL-Bus versin 2.0). La nueva especificacin define una interface de 64 bits pero que mantienen toda compatibilidad con la actual especificacin VL-BUS. La nueva especificacin 2.0 redefine adems la cantidad mxima de ranuras VL-BUYS que se permiten en un sistema sencillo. Ahora consta de hasta tres ranuras a 40 Mhz y dos a 50 Mhz, siempre que el sistema utilice un diseo de baja capacitancia. En el nombre del bus VL queda de manifiesto que se trata de un bus local. De forma distinta al bus ISA ste se acopla directamente en la CPU. Esto le proporciona por un lado una mejora substancial de la frecuencia de reloj (de la CPU) y hace que dependa de las lneas de control de la CPU y del reloj. A estas desventajas hay que aadirle que no en todos los puntos estn bien resueltas las especificaciones del comit VESA, hecho que a la larga le llevar a que el xito del bus VL se vea empaado por ello. En sistemas 486 econmicos se poda encontrar a menudo, pero su mejor momento ya ha pasado.

PCI (Peripheral Component Interconnect). Interconnect).


Visto lo anterior, se puede ver que el bus del futuro es claramente el PCI de Intel. PCI significa: interconexin de los componentes perifricos (Peripheral Component Interconnect) y presenta un moderno bus que no slo est meditado para no tener la relacin del bus ISA en relacin a la frecuencia de reloj o su capacidad sino que tambin la sincronizacin con las tarjetas de ampliacin en relacin a sus direcciones de puerto, canales DMA e interrupciones, se ha automatizado finalmente de tal manera que el usuario no deber preocuparse ms por ello.

M. D. O. H. Sonia Alvarado Mares

38

Lenguaje Ensamblador
El bus PCI es independiente de la CPU, ya que entre la CPU y el bus PCI se instalar siempre un controlador de bus PCI, lo que facilita en gran medida el trabajo de los diseadores de placas. Por ello tambin ser posible instalarlo en sistemas que no estn basados en el procesador Intel si no que pueden usar otros, como por ejemplo, un procesador Alpha de DEC. Tambin los procesadores PowerMacintosh de Apple se suministran en la actualidad con bus PCI. Las tarjetas de expansin PCI trabajan eficientemente en todos los sistemas y pueden ser intercambiadas de la manera que se desee. Solamente los controladores de dispositivo deben naturalmente ser ajustados al sistema anfitrin (host) es decir a su correspondiente CPU. Como vemos el bus PCI no depende del reloj de la CPU, porque est separado de ella por el controlador del bus. Si se instalara una CPU ms rpida en su ordenador no debera preocuparse porque las tarjetas de expansin instaladas no pudieran soportar las frecuencias de reloj superiores, pues con la separacin del bus PCI de la CPU stas no son influidas por esas frecuencias de reloj. As se ha evitado desde el primer momento este problema y defecto del bus VL. El bus PCI emplea un conector estilo Micro Channel de 124 pines (188 en caso de una implementacin de 64 bits) pero nicamente 47 de estas conexiones se emplean en una tarjeta de expansin (49 en caso de que se trate de un adaptador bus-master); la diferencia se debe a la incorporacin de una lnea de alimentacin y otra de tierra. Cada una de las seales activas del bus PCI est bien junto o frente a una seal de alimentacin o de tierra, una tcnica que minimiza la radiacin. El lmite prctico en la cantidad de conectores para buses PCI es de tres; como ocurre con el VL, ms conectores aumentaran la capacitancia del bus y las operaciones a mxima velocidad resultaran menos fiables. A pesar de presentar un rendimiento similar al de un bus local conectado directamente, en realidad PCI no es ms que la eliminacin de un paso en el microprocesador. En lugar de disponer de su propio reloj, un bus PCI se adapta al empleado por el microprocesador y su circuitera, por tanto los componentes del PCI estn sincronizados con el procesador. El actual estndar PCI autoriza frecuencias de reloj que oscilan entre 20 y 33 Mhz. A pesar que de que las tarjetas ISA no pueden ser instaladas en una ranura PCI, no debera renunciarse a la posibilidad de insercin de una tarjeta ISA. As pues, a menudo se puede encontrar en un equipo con bus PCI la interfaz puente llamada PCI-To-ISABridge. Se trata de un chip que se conecta entre los distintos slots ISA y el controlador del bus PCI. Su tarea consiste en transponer las seales provenientes del bus PCI al bus ISA. De esta manera pueden seguir siendo utilizadas las tarjetas ISA al amparo del bus PCI. A pesar de que el bus PCI es el presente, sigue habiendo buses y tarjetas de expansin ISA ya que no todas las tarjetas de expansin requieren las ratios de transferencia que permite el bus PCI. Sin embargo las tarjetas grficas, tarjetas SCSI y tarjetas de red se han decantando cada vez ms fuertemente hacia el bus PCI. La ventaja de la velocidad de este sistema de bus es que este hardware puede participar del continuo incremento de velocidad de los procesadores.

M. D. O. H. Sonia Alvarado Mares

39

Lenguaje Ensamblador

1.2.2

Registros.

Arquitectura de los procesadores 8088 y 8086.


El 8086 es un microprocesador de 16 bits, tanto en lo que se refiere a su estructura como en sus conexiones externas, mientras que el 8088 es un procesador de 8 bits que internamente es casi idntico al 8086. La nica diferencia entre ambos es el tamao del bus de datos externo. Intel trata esta igualdad interna y desigualdad externa dividiendo cada procesador 8086 y 8088 en dos sub-procesadores. O sea, cada uno consta de una unidad de ejecucin (EU: Execution Unit) y una unidad interfaz del bus (BIU: Bus Interface Unit). La unidad de ejecucin es la encargada de realizar todas las operaciones mientras que la unidad de interfaz del bus es la encargada de acceder a datos e instrucciones del mundo exterior. Las unidades de ejecucin son idnticas en ambos microprocesadores, pero las unidades de interfaz del bus son diferentes en varias cuestiones, como se desprende del siguiente diagrama en bloques: La ventaja de esta divisin fue el ahorro de esfuerzo necesario para producir el 8088. Slo una mitad del 8086 (el BIU) tuvo que redisearse para producir el 8088. La explicacin del diagrama en bloques, de la figura 1.2 es la siguiente:

Registros de uso general del 8086/8088:


Tienen 16 bits cada uno y son ocho:

1. AX = Registro acumulador, dividido en AH y AL (8 bits cada uno).

M. D. O. H. Sonia Alvarado Mares

40

Lenguaje Ensamblador
Usndolo se produce (en general) una instruccin que ocupa un byte menos que si se utilizaran otros registros de uso general. Su parte ms baja, AL, tambin tiene esta propiedad. El ltimo registro mencionado es el equivalente al acumulador de los procesadores anteriores (8080 y 8085). Adems hay instrucciones como DAA; DAS; AAA; AAS; AAM; AAD; LAHF; SAHF; CBW; IN y OUT que trabajan con AX o con uno de sus dos bytes (AH o AL). Tambin se utiliza este registro (junto con DX a veces) en multiplicaciones y divisiones.

2. BX = Registro base, dividido en BH y BL.


Es el registro base de propsito similar (se usa para direccionamiento indirecto) y es una versin ms potente del par de registros HL de los procesadores anteriores.

3. CX = Registro contador, dividido en CH y CL.


Se utiliza como contador en bucles (instruccin LOOP), en operaciones con cadenas (usando el prefijo REP) y en desplazamientos y rotaciones (usando el registro CL en los dos ltimos casos).

M. D. O. H. Sonia Alvarado Mares

41

Lenguaje Ensamblador

Figura 1.2. Arquitectura de los procesadores 8088 y 8086.

4. DX = Registro de datos, dividido en DH y DL.


Se utiliza junto con el registro AX en multiplicaciones y divisiones, en la instruccin CWD y en IN y OUT para direccionamiento indirecto de puertos (el registro DX indica el nmero de puerto de entrada/salida).

5. SP = Puntero de pila (no se puede subdividir).

M. D. O. H. Sonia Alvarado Mares

42

Lenguaje Ensamblador
Aunque es un registro de uso general, debe utilizarse slo como puntero de pila, la cual sirve para almacenar las direcciones de retorno de subrutinas y los datos temporarios (mediante las instrucciones PUSH y POP). Al introducir (push) un valor en la pila a este registro se le resta dos, mientras que al extraer (pop) un valor de la pila este a registro se le suma dos.

6. BP = Puntero base (no se puede subdividir).


Generalmente se utiliza para realizar direccionamiento indirecto dentro de la pila.

7. SI = Puntero ndice (no se puede subdividir).


Sirve como puntero fuente para las operaciones con cadenas. Tambin sirve para realizar direccionamiento indirecto.

8. DI = Puntero destino (no se puede subdividir).


Sirve como puntero destino para las operaciones con cadenas. Tambin sirve para realizar direccionamiento indirecto. Cualquiera de estos registros puede utilizarse como fuente o destino en operaciones aritmticas y lgicas, lo que no se puede hacer con ninguno de los seis registros que se vern ms adelante. Adems de lo anterior, cada registro tiene usos especiales.

Unidad aritmtica y lgica.


Es la encargada de realizar las operaciones aritmticas (suma, suma con "arrastre", resta, resta con "prstamo" y comparaciones) y lgicas (AND, OR, XOR y TEST). Las operaciones pueden ser de 16 bits o de 8 bits.

Indicadores (flags). (flags).


Hay nueve indicadores de un bit en este registro de 16 bits. Los cuatro bits ms significativos estn indefinidos, mientras que hay tres bits con valores determinados: los bits 5 y 3 siempre valen cero y el bit 1 siempre vale uno (esto tambin ocurra en los procesadores anteriores). Registro de indicadores (16 bits) Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Flag -- -- -- -- OF DF IF TF SF ZF 0 AF 0 PF 1 CF

CF (Carry Flag, bit 0): Si vale 1, indica que hubo "arrastre" (en caso de suma) hacia, o "prstamo" (en caso de resta) desde el bit de orden ms significativo del resultado. Este indicador es usado por instrucciones que suman o restan nmeros que ocupan varios bytes. Las instrucciones de rotacin pueden aislar un bit de la memoria o de un registro ponindolo en el CF.

M. D. O. H. Sonia Alvarado Mares

43

Lenguaje Ensamblador

PF (Parity Flag, bit 2): Si vale uno, el resultado tiene paridad par, es decir, un nmero par de bits a 1. Este indicador se puede utilizar para detectar errores en transmisiones. AF (Auxiliary carry Flag, bit 4): Si vale 1, indica que hubo "arrastre" o "prstamo" del nibble (cuatro bits) menos significativo al nibble ms significativo. Este indicador se usa con las instrucciones de ajuste decimal. ZF (Zero Flag, bit 6): Si este indicador vale 1, el resultado de la operacin es cero. SF (Sign Flag, bit 7): Refleja el bit ms significativo del resultado. Como los nmeros negativos se representan en la notacin de complemento a dos, este bit representa el signo: 0 si es positivo, 1 si es negativo. TF (Trap Flag, bit 8): Si vale 1, el procesador est en modo paso a paso. En este modo, la CPU automticamente genera una interrupcin interna despus de cada instruccin, permitiendo inspeccionar los resultados del programa a medida que se ejecuta instruccin por instruccin. IF (Interrupt Flag, bit 9): Si vale 1, la CPU reconoce pedidos de interrupcin externas enmascarables (por el pin INTR). Si vale 0, no se reconocen tales interrupciones. Las interrupciones no enmascarables y las internas siempre se reconocen independientemente del valor de IF. DF (Direction Flag, bit 10): Si vale 1, las instrucciones con cadenas sufrirn "autodecremento", esto es, se procesarn las cadenas desde las direcciones ms altas de memoria hacia las ms bajas. Si vale 0, habr "auto-incremento", lo que quiere decir que las cadenas se procesarn de "izquierda a derecha". OF (Overflow flag, bit 11): Si vale 1, hubo un desborde en una operacin aritmtica con signo, esto es, un dgito significativo se perdi debido a que tamao del resultado es mayor que el tamao del destino.

Sistema de control de la unidad de ejecucin.


Es el encargado de decodificar las instrucciones que le enva la cola y enviarle las rdenes a la unidad aritmtica y lgica segn una tabla que tiene almacenada en ROM llamada CROM (Control Read Only Memory).

Cola de instrucciones.
Almacena las instrucciones para ser ejecutadas. La cola se carga cuando el bus est desocupado, de esta manera se logra una mayor eficiencia del mismo. La cola del 8086 tiene 6 bytes y se carga de a dos bytes por vez (debido al tamao del bus de datos), mientras que el del 8088 tiene cuatro bytes. Esta estructura tiene rendimiento ptimo cuando no se realizan saltos, ya que en este caso habra que vaciar la cola (porque no se van a ejecutar las instrucciones que van despus del salto) y volverla a cargar con instrucciones que se encuentran a partir de la direccin a donde se salta. Debido a esto

M. D. O. H. Sonia Alvarado Mares

44

Lenguaje Ensamblador
las instrucciones de salto son (despus de multiplicaciones y divisiones) las ms lentas de este microprocesador.

Registros de la unidad de interfaz con el bus.


El programador puede acceder a cinco registros de 16 bits cada uno, siendo cuatro de ellos registros de segmento y el restante el puntero de instruccin (IP). Los registros de segmento se llaman:

CS (Code Segment) o registro de segmento de cdigo. El DOS almacena la direccin inicial del segmento de cdigo de un programa en el registro CS. Est direccin de segmento, ms un valor de desplazamiento en el registro de apuntador de instruccin (IP), indica la direccin de una instruccin que es buscada para su ejecucin. Para propsitos de programacin normal, no se necesita referenciar el registro CS. DS (Data Segment) o registro de segmento de datos. La direccin inicial de un segmento de datos de programa es almacenada en el registro DS. En trminos sencillos, est direccin, ms un valor de desplazamiento en esta instruccin, genera una referencia a la localidad de un byte especfico en el segmento de datos. ES (Extra Segment) o registro de segmento extra. Algunas operaciones con cadenas de caracteres (datos de caracteres) utilizan el registro extra del segmento para manejar el direccionamiento de memoria. En este contexto, el registro ES esta asociado con el registro DI (ndice). Un programa que requiere el uso del registro ES puede inicializarlo con una direccin de segmento apropiada. SS (Stack Segment) o registro de segmento de pila. 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. Esta direccin de segmento, ms un valor de desplazamiento en el registro del apuntador de la pila (SP), indica la palabra actual en la pila que est siendo direccionada. Para propsitos de programacin normal, no se necesita referenciar el registro SS. IP (Pointer Instruction) o registro de apuntador de instrucciones. Contiene el desplazamiento de direccin de la siguiente instruccin que se ejecuta. El IP est asociado con el registro CS en el sentido de que el IP indica la instruccin actual dentro del segmento de cdigo que se esta ejecutando actualmente. Por lo comn, usted no refiere el registro IP en un programa, pero, para probar un programa, si puede cambiar su valor por medio del programa DEBUG del DOS. Los procesadores 80386 y posteriores tienen un IP ampliado de 32 bits, llamado EIP.

Los registros anteriores son primordiales para generar la direccin de 20 bits que se pondr en el bus de direcciones de la CPU. Cualquier operacin que accede la memoria usar forzosamente uno de estos registros.

Lgica de control del bus.

M. D. O. H. Sonia Alvarado Mares

45

Lenguaje Ensamblador
El cometido de este bloque es poder unir los bloques anteriormente mencionados con el mundo exterior, es decir, la memoria y los perifricos. El 8088 tiene un bus de datos externo reducido de 8 bits. La razn para ello era prever la continuidad entre el 8086 y los antiguos procesadores de 8 bits, como el 8080 y el 8085. Teniendo el mismo tamao del bus (as como similares requerimientos de control y tiempo), el 8088, que es internamente un procesador de 16 bits, puede reemplazar a los microprocesadores ya nombrados en un sistema ya existente. El 8088 tiene muchas seales en comn con el 8085, particularmente las asociadas con la forma en que los datos y las direcciones estn multiplexadas, aunque el 8088 no produce sus propias seales de reloj como lo hace el 8085 (necesita un chip de soporte llamado 8284, que es diferente del 8224 que necesitaba el microprocesador 8080). El 8088 y el 8085 siguen el mismo esquema de compartir los terminales correspondientes a los 8 bits ms bajos del bus de direcciones con los 8 bits del bus de datos, de manera que se ahorran 8 terminales para otras funciones del microprocesador. El 8086 comparte los 16 bits del bus de datos con los 16 ms bajos del bus de direcciones. El 8085 y el 8088 pueden, de hecho, dirigir directamente los mismos chips controladores de perifricos. Las investigaciones de hardware para sistemas basados en el 8080 o el 8085 son, en su mayora, aplicables al 8088. En todo lo recin explicado se bas el xito del 8088.

M. D. O. H. Sonia Alvarado Mares

46

Lenguaje Ensamblador

1.2.3

Modos de direccionamiento.

Introduccin. Introduccin.
El campo de operacin de una instruccin especifica la operacin que se debe realizar. Esta debe ser ejecutada sobre algunos datos almacenados en registros del computador o en palabras de memoria, es decir, sobre los operandos. El modo de direccionamiento especifica la forma de interpretar la informacin contenida en cada campo de operando para localizar, en base a esta informacin, el operando. Los ordenadores utilizan tcnicas de direccionamiento con los siguientes fines: Dar versatilidad de programacin al usuario proporcionando facilidades tales como ndices, direccionamientos indirectos, etc., esta versatilidad nos servir para manejar estructuras de datos complejas como vectores, matrices, etc. Reducir el nmero de bits del campo de operando.

Al usuario que tiene poca experiencia, la variedad de modos de direccionamiento en un ordenador le puede parecer excesivamente complicada. Sin embargo, la disponibilidad de diferentes esquemas de direccionamiento le da al programador experimentado flexibilidad para escribir programas que son ms eficientes en cuanto a nmero de instrucciones y tiempo de ejecucin. Es tal la importancia de los modos de direccionamiento que la potencia de una mquina se mide tanto por su repertorio de instrucciones como por la variedad de modos de direccionamiento que es capaz de admitir. Definicin: Los modos de direccionamiento de un ordenador son las diferentes formas de transformacin del campo de operando de la instruccin en la direccin del operando. En esta definicin el trmino direccin debe interpretarse en su sentido ms general de localizacin del operando, en cualquier lugar, y no en el sentido ms estricto de direccin de memoria. A la direccin obtenida de las transformaciones anteriores la llamaremos direccin efectiva. Esta direccin, en el caso de tratarse de una direccin de memoria, es la que se cargar en el M.A.R. o registro de direccin de memoria. Llamando x a la informacin del campo de operando y Aef. a la direccin efectiva, la funcin f que a partir de x nos da Aef. constituir el modo de direccionamiento empleado: Aef. = f(x).

M. D. O. H. Sonia Alvarado Mares

47

Lenguaje Ensamblador
En la evaluacin de la funcin f pueden intervenir otras informaciones adems de la informacin presente en el campo de operando de la instruccin. Estas informaciones pueden residir en registros del procesador o en memoria. La especificacin del modo de direccionamiento puede ir en el cdigo de operacin o en el campo de cada operando. Normalmente se codifica en el cdigo de operacin si el nmero de modos es pequeo, en caso contrario se codifica con cada operando, esta ltima forma de codificacin favorece la ortogonalidad.

Modos de direccionamiento ms usuales.


En los prrafos siguientes se irn describiendo los modos de direccionamiento ms frecuentes. La mayora de estos modos son comunes a muchas mquinas, sin embargo, hay otros que slo se usan en determinados procesadores.

Direccionamiento implcito. En este modo, llamado tambin inherente, el operando se especifica en la misma definicin de la instruccin. El modo implcito se usa para hacer referencia a operandos de dos tipos:

Registros: En el caso de que el cdigo de operacin se refiera en particular a un registro. Operandos en la pila: En el caso de que la operacin se realice siempre sobre el dato situado en la cima de pila.

El primer caso es tpico de las organizaciones de un solo acumulador. Generalmente en un ordenador de este tipo todas las instrucciones que actan sobre el acumulador utilizan direccionamiento implcito. Ejemplo: MOV AX, BX. En el segundo caso estn la mayora de las instrucciones de los ordenadores con organizacin de pila. Estas operaciones llevan implcitos los operandos que son los elementos de la cima de pila. Esto se debe a que en este tipo de mquinas la mayora de las operaciones no tienen campos de direccin. Tambin estn en este caso las instrucciones PUSH y POP de la mayora de los ordenadores cuyo operando implcito tambin es, como en el caso anterior, la cima de pila. Ejemplo: PUSH AX. Direccionamiento inmediato (o literal). En este modo es el operando el que figura en la instruccin no su direccin. En otras palabras el campo de operando contiene l mismo, sin transformacin alguna, la informacin sobre la que hay que operar. Este modo es til para inicializar registros o palabras de memoria con un valor constante. Ejemplo: MOV AX, 5. Direccionamiento directo por registro.

M. D. O. H. Sonia Alvarado Mares

48

Lenguaje Ensamblador
Se mencion anteriormente que el campo de direccin de una instruccin puede especificar una palabra de memoria o un registro del procesador. Cuando se da este ltimo caso se dice que el operando est especificado con direccionamiento directo por registro, en tal caso, el operando reside en uno de los registros del procesador que es seleccionado por un campo de registro de k bits en la instruccin. Un campo de k bits puede especificar uno de 2k registros. Este modo es tpico de los ordenadores con organizacin de registros de uso general. Las ventajas de este modo son: El acceso a los registros es muy rpido, por tanto el direccionamiento por registro debe usarse en las variables que se usen con ms frecuencia para evitar accesos a memoria que son ms lentos, un ejemplo muy tpico del uso de este direccionamiento son los ndices de los bucles. El nmero de bits necesarios para especificar un registro es mucho ms pequeo que el necesario para especificar una direccin de memoria, esto es debido a que el nmero de registros del procesador es muy pequeo comparado con el nmero de direcciones de memoria. Sin embargo, hay que tener en cuenta que en los ordenadores modernos el nmero de registros ha aumentado considerablemente.

Direccionamiento directo (o absoluto). Este es el modo de direccionamiento ms sencillo. El campo de direccin no necesita transformacin alguna para dar la direccin efectiva, es decir la funcin que transforma el campo de operando en la direccin efectiva es la identidad. Esto significa que el campo de operando es ya la direccin efectiva. Este direccionamiento slo se usa en ordenadores pequeos en que el programa siempre se sita en la misma zona de memoria ya que dificulta la relocalizacin de los programas, es decir que el cdigo de los programas no dependa de su situacin en memoria. Ordinariamente este modo slo se usa para acceder a direcciones del sistema que normalmente se refieren a operaciones de entrada y salida ya que estas direcciones no dependen del programa. Ejemplo: MOV AX, VALOR, donde VALOR es una localidad de memoria donde se encuentra alguna informacin que ser movida al registro AX. VALOR es considerado una variable dentro del programa. Otro ejemplo sera MOV AX, [200H], donde [200H] representa el contenido de la localidad 200H. Direccionamiento indirecto. En este modo el campo de operando de la instruccin indica la localizacin de la direccin efectiva del operando. El modo de direccionamiento indirecto puede adquirir diferentes formas segn cul sea el lugar donde se encuentre la direccin del operando. En general, todos los modos de direccionamiento tienen su versin indirecta que aade un eslabn ms a la cadena del direccionamiento. Por ejemplo existe el direccionamiento indirecto por registro, en el que el registro especificado contiene la direccin del operando, no el operando mismo. Este direccionamiento es til cuando se trabaja con punteros ya que los punteros son variables que contienen las direcciones de los operandos, no los operandos mismos. Ejemplo: MOV AX, [SI], esta instruccin toma el contenido del registro SI como una

M. D. O. H. Sonia Alvarado Mares

49

Lenguaje Ensamblador
localidad de memoria, accesa dicha localidad, obtiene el valor que se encuentra en ella y lo mueve al registro AX.

Direccionamiento relativo. Hay algunos modos de direccionamiento en que se hace uso de una propiedad muy generalizada de los programas denominada localidad de referencia, esta propiedad consiste en que las direcciones referenciadas por los programas no suelen alejarse mucho unas de otras y, por tanto, suelen estar concentradas en una parte de la memoria. Estas consideraciones nos llevan a la conclusin de que no es necesario utilizar todos los bits de la direccin de memoria en el campo de operando, basta utilizar los bits precisos para cubrir la parte de memoria donde estn incluidas las direcciones a las que el programa hace referencia. Esto puede hacerse tomando como referencia un punto de la memoria y tomando como campo de operando la diferencia entre ese punto y la direccin efectiva del operando. La direccin que se toma como punto de referencia puede residir en un registro de la CPU y, por tanto, sumando el contenido de ese registro con el campo de operando obtendremos la direccin efectiva. Hay varios direccionamientos basados en esta tcnica que reciben diferentes nombres dependiendo de cul sea el registro en el que radica la direccin tomada como referencia. Todos ellos podran catalogarse como direccionamientos relativos a un registro. El direccionamiento denominado habitualmente relativo toma como valor de referencia el registro contador de programa. Cuando se usa este modo de direccionamiento, el campo de operando consiste en un nmero (normalmente con signo) que expresa la diferencia entre la direccin del dato y la direccin siguiente a la instruccin en curso (contenida en el contador de programa). Si el campo de operando, llamado en este caso desplazamiento u offset, es positivo el operando residir en una direccin posterior a la de la instruccin y si es negativo, en una direccin anterior. Este modo de direccionamiento es usado muy frecuentemente en programas cuyo cdigo deba ser independiente de la posicin de memoria donde estn situados (programas relocalizables) ya que el desplazamiento es independiente de la localizacin del programa. Tambin se usa con mucha frecuencia en instrucciones de bifurcacin. Los apartados siguientes se refieren a diferentes versiones de direccionamientos relativos a registros. Direccionamiento por base y desplazamiento. Este modo de direccionamiento se fundamenta en la propiedad de localidad de referencia mencionada anteriormente. La direccin que se toma como referencia de la zona de memoria en la que estn localizados los datos se deposita en un registro denominado registro base y el campo de operando indica la diferencia entre el registro base y la direccin del operando. Normalmente se toma como referencia (registro base) la direccin de comienzo de la zona de memoria ocupada por un programa. Por tanto, la direccin

M. D. O. H. Sonia Alvarado Mares

50

Lenguaje Ensamblador
efectiva del operando se calcular sumando el contenido del registro base con el campo de operando. Este modo de direccionamiento se usa en ordenadores que pueden mantener en memoria varios programas ya que, de esta forma, los diferentes registros base pueden contener las direcciones de comienzo de cada uno de los programas. Esto es muy til porque facilita la relocalizacin de los programas para situar el programa en una zona de memoria diferente bastar con cambiar el contenido de su registro base, no ser necesario cambiar ninguno de los campos de operando. Direccionamiento indexado En este modo de direccionamiento, la direccin del operando tambin se calcula sumando un registro de la CPU al campo de operando, este registro es un registro especfico para este uso llamado registro ndice. En los ordenadores con organizacin de registros generales, el registro ndice puede ser cualquiera de los registros de la CPU. En los ordenadores en que el contador de programa es considerado como un registro de uso general (PDP 11 y VAX) el modo relativo es un caso particular del direccionamiento indexado. A la cantidad que hay que sumar al registro ndice para conseguir la direccin del operando tambin se le llama desplazamiento u offset. Este modo de direccionamiento es especialmente til para el direccionamiento de vectores y matrices en bucles ya que, si se quieren direccionar elementos consecutivos del vector o matriz, basta mantener en el desplazamiento la direccin del primer elemento e ir incrementando el registro ndice. Tambin sirve para acceder de forma relativa a elementos de vectores cercanos a uno dado, para ello, se carga la direccin del elemento de referencia en el registro ndice y despus se accede mediante direccionamiento indexado, con el desplazamiento adecuado, al anterior, al siguiente, etc., esto mismo tambin es aplicable a pilas, en que, en ocasiones, hay que acceder a datos cercanos, por encima o por debajo, al dato sealado por algn apuntador. Una consecuencia de todo esto es una modalidad de direccionamiento indexado de que disponen algunos ordenadores, denominada autoindexacin, que hace que el registro ndice sea incrementado o decrementado en el tamao del operando antes o despus de acceder al mismo. Los ordenadores que poseen autoindexacin incorporan los modos de direccionamiento descritos en los dos apartados siguientes. En algunos ordenadores existen variantes del direccionamiento indexado en que se obtiene la direccin del operando sumando el contenido de varios registros con el desplazamiento, esto puede servir para especificar el comienzo de un vector mediante un desplazamiento respecto a un registro y el elemento del vector mediante un registro ndice. Direccionamiento autoincremental o postincremental. En este modo, la direccin del operando se encuentra en un registro y ste es incrementado, despus de acceder al operando, en el tamao del mismo. Este modo es til para manejar vectores y matrices como se vea en el apartado anterior. Tambin se puede utilizar para extraer datos de pilas (que crezcan hacia direcciones bajas) ya que, si el registro sobre el que se aplica este modo es el apuntador de pila, despus de la operacin el apuntador sealar al siguiente elemento de la pila.

M. D. O. H. Sonia Alvarado Mares

51

Lenguaje Ensamblador
Direccionamiento autodecremental o predecremental. En este modo para obtener la direccin del operando hay que decrementar un registro en el tamao del operando; el nuevo contenido del registro despus de efectuar esa operacin, es la direccin del operando.

1.3

INTERRUPCIONES.

Una interrupcin es un mecanismo de transferencia de control; bsicamente ocasiona que la CPU detenga la ejecucin del programa actual, transfiera el control a una rutina de servicio, y al trmino de esta prosiga con la ejecucin del programa interrumpido. La familia de microprocesadores compatibles con Intel acepta dos tipos de interrupciones, las de hardware y las de software. Las interrupciones de hardware son invocadas asncronamente (es decir, pueden ocurrir en cualquier momento y no se encuentran bajo el control del programa) por un dispositivo o evento externo, por ejemplo la pulsacin de una tecla, la recepcin de un byte en alguno de los puertos disponibles o la ocurrencia de un error de paridad (error de memoria que generalmente no tiene remedio). En el caso del teclado, cuando se oprime alguna tecla, el hardware del teclado enva una seal a la CPU para indicarle que detenga inmediatamente lo que est haciendo e invoque a alguna de las rutinas del BIOS, la cual atender la solicitud de interrupcin y al terminar regresar el control a la CPU para que sta a su vez contine con lo que estaba realizando. Por otro lado, las interrupciones de software en realidad no interrumpen algo sino ms bien son una variante de las rutinas, las cuales pueden invocarse a voluntad y son controladas por el programa en forma sncrona (o sea que se conoce todo lo relacionado con su ejecucin, pues el programa controla el momento y la manera en que son invocadas) mediante la secuencia de instrucciones Call y Ret. Sin embargo, para interrupciones de software mediante la instruccin Int num de la interrupcin (pero siguen siendo operaciones sncronas). Cuando la CPU est lista para atender a quien la interrumpi, pasa el control a una rutina llamada Manejador de interrupciones. Esta rutina define la causa de la interrupcin, proporciona el servicio solicitado y regresa el control a la CPU para que sta pueda proseguir con lo que estaba haciendo antes. Como ya se dijo, la mayora de las interrupciones son causadas por eventos externos a la CPU, como por ejemplo: Necesidad de terminar un proceso de entrada/salida. Recepcin de datos en alguno de los puertos disponibles (serial o paralelo). Deteccin de un problema en el hardware. Una divisin entre cero. Una pulsacin en el teclado. Una operacin de lectura/escritura sobre el (los) disco (s).

Para que puedan dar un servicio adecuado a las interrupciones, la mayora de los procesadores usan diferentes niveles de interrupcin. Para cada nivel existe una

M. D. O. H. Sonia Alvarado Mares

52

Lenguaje Ensamblador
secuencia de localidades en memoria, las cuales contienen el segmento y el desplazamiento de la direccin donde se encuentra el manejador de la interrupcin. Esta secuencia de localidades se denomina Tabla de vectores de interrupcin, y se encuentra en los primeros 1024 bytes de la memoria baja a partir de 0:0 (segmento 0, desplazamiento 0). El segmento y el desplazamiento ocupan 4 bytes dentro de la tabla, estando primero la palabra baja y despus la alta; es decir, primero se almacena el desplazamiento y despus el segmento (dos bytes cada uno).

Pasos durante una interrupcin.


El CPU suspende lo que estaba realizando. El hardware transfiere el control al sistema de operacin. Deshabilita las interrupciones. Mientras se atiende una interrupcin no se puede atender otra que llegue. Algunas arquitecturas con manejo de interrupciones sofisticadas permiten, mediante un esquema de prioridades, interrumpir un servicio de interrupcin para atender otra de mayor prioridad. Aquellas interrupciones de menor o igual prioridad son deshabilitadas.

El kernel del sistema de operacin salva el estado actual del proceso interrumpido. Transfiere su ejecucin a una direccin fija. Esta direccin por lo general contiene la direccin de comienzo donde la rutina de servicio de la interrupcin se encuentra. Cada diseo de computador tiene su propio mecanismo de interrupciones. Una forma de manejar las interrupciones es invocando una rutina general que examine la informacin de la interrupcin y determine el tipo de interrupcin ocurrida, y de alli llama a la rutina que se encarga de atender dicha interrupcin. Por lo general se maneja mediante un vector de interrupciones, indexado por el tipo de interrupcin. En este vector se encuentra la direccin de comienzo de la rutina que da servicio a dicho tipo. Se le conoce como vector de interrupcin. Otra forma de localizar la rutina apropiada es mediante el pooling, es decir, preguntando a cada dispositivo pare ver quien requiri el servicio.

Se ejecuta la rutina de interrupcin. Se restaura el estado anterior. Se habilitan las interrupciones.

La arquitectura de interrupciones debe tambin almacenar la direccin de la instruccin interrumpida. Los sistemas de operacin modernos operan por interrupciones (interrupt driven). Es decir, el sistema de operacin estar ocioso esperando a que algn evento ocurra (proceso a ejecutar, servicio de E/S, etc). Los eventos son indicados por la ocurrencia de una interrupcin o trap. Un trap es una excepcin causada por software.

M. D. O. H. Sonia Alvarado Mares

53

Lenguaje Ensamblador
Eventos de una interrupcin.
Cuando la CPU es interrumpida empuja a la pila el registro de banderas, el registro de segmento de cdigo (CS) y el apuntador de instrucciones (IP), adems de que se deshabilita el sistema de interrupciones. Enseguida usa el nmero de 8 bits puesto en el bus del sistema por quien intenta interrumpir a la CPU, y calcula la direccin en formato segmento:desplazamiento del manejador que se encuentra en memoria baja ( # de interrupcin * 4). Una vez teniendo la direccin del vector, le pasa el control a ste y la ejecucin contina en este punto. Al recibir el control, el manejador, habilita las interrupciones, guarda los registros que va a usar, procesa la interrupcin y finalmente restaura el contenido original de las banderas y de los registros CS e IP mediante la instruccin Iret. Algunos dispositivos, los que estn canalizados por el PIC, necesitan mandarle una seal de Fin de interrupcin (End Of Interrupt, EOI) al mismo PIC mediante su puerto de control. Esto tiene como propsito indicarle al circuito que ya se termin de procesar la interrupcin y que todo est bien.

M. D. O. H. Sonia Alvarado Mares

54

Lenguaje Ensamblador

1.3.1

Hardware.

Interrupciones internas de hardware.


Las interrupciones internas son generadas por ciertos eventos que surgen durante la ejecucin de un programa. Este tipo de interrupciones son manejadas en su totalidad por el hardware y no es posible modificarlas. Un ejemplo claro de este tipo de interrupciones es la que actualiza el contador del reloj interno de la computadora, el hardware hace el llamado a esta interrupcin varias veces durante un segundo para mantener la hora actualizada. Aunque no podemos manejar directamente esta interrupcin (no podemos controlar por software las actualizaciones del reloj), es posible utilizar sus efectos en la computadora para nuestro beneficio, por ejemplo para crear un "reloj virtual" actualizado continuamente gracias al contador del reloj interno. nicamente debemos escribir un programa que lea el valor actual del contador y lo traduzca a un formato entendible para el usuario.

Interrupciones externas de hardware.


Estas interrupciones en su mayora son generadas por los perifricos y/o por los coprocesadores. Estos dispositivos pueden estar conectados a la patilla NMI o INTR de la CPU. La patilla NMI est reservada para eventos drsticos como pueden ser una falla en la fuente de poder o algn error de paridad en la memoria. Su nombre, externa, que es una interrupcin no enmascarable; es decir, que no se puede deshabilitar. En lugar de ser enviadas directamente a la CPU, las interrupciones generadas por eventos externos se canalizan a travs de un circuito integrado llamado PIC 8259A (las siglas corresponden a Programmable Interrupt Controller: controlador programable de interrupciones). El PIC es controlado por la CPU mediante una serie de puertos, e interrumpe a sta por medio de la patilla INTR. Tambin permite habilitar y deshabilitar interrupciones emitidas por otros dispositivos. Las interrupciones que utilizan la patilla INTR pueden controlarse mediante dos instrucciones de la CPU llamadas Sti (set interrupt) y Cli (clear interrupt). La asignacin de dispositivos a niveles especficos de interrupcin es realizada por el fabricante. Estas asignaciones son fsicas y no pueden alterarse mediante el software. No es posible desactivar a las interrupciones externas.

M. D. O. H. Sonia Alvarado Mares

55

Lenguaje Ensamblador

1.3.2

Software.

Las interrupciones de software pueden ser activadas directamente por el ensamblador invocando al nmero de interrupcin deseada con la instruccin INT. El uso de las interrupciones nos ayuda en la creacin de programas, utilizndolas nuestros programas son ms cortos, es ms fcil entenderlos y usualmente tienen un mejor desempeo debido en gran parte a su menor tamao. Este tipo de interrupciones podemos separarlas en dos categoras: las interrupciones del sistema operativo DOS y las interrupciones del BIOS. La diferencia entre ambas es que las interrupciones del sistema operativo son ms fciles de usar pero tambin son ms lentas ya que estas interrupciones hacen uso del BIOS para lograr su cometido, en cambio las interrupciones del BIOS son mucho ms rpidas pero tienen la desventaja que, como son parte del hardware son muy especficas y pueden variar dependiendo incluso de la marca del fabricante del circuito. La eleccin del tipo de interrupcin a utilizar depender nicamente de las caractersticas que le quiera dar a su programa: velocidad (utilizando las del BIOS) o portabilidad (utilizando las del DOS). El operando de una interrupcin indica cul es la rutina a activar. La direccin de la rutina es localizada por medio de una tabla que el sistema mantiene a partir de la direccin 0000:0000h. Existen 256 entradas de 4 bytes de longitud, y cada interrupcin proporciona varias funciones. Las interrupciones de 00h a 1Fh corresponden al BIOS y de 20h a FFh son del DOS y BASIC. El apndice F proporciona una lista de las interrupciones para equipo XT.

M. D. O. H. Sonia Alvarado Mares

56

Lenguaje Ensamblador

1.4 ESTRUCTURA DE UN PROGRAMA EN ENSAMBLADOR.


Existen ciertas normas para crear un programa en lenguaje ensamblador. La primera se refiere al formato interno de cada instruccin del lenguaje. Toda lnea de cdigo debe digitarse bajo ciertas reglas, las cuales pueden considerarse como la sintaxis propia del lenguaje. Sin embargo, en la formacin de instrucciones tambin entra en juego la semntica. La segunda norma es el formato externo del programa, que puede equiparse con una capa que rodear al programa para ayudar a definir su entorno.

El formato interno.
El formato interno de una lnea de cdigo se puede resumir en cuatro partes. La etiqueta / variable / constante (puede definirse o no, y si se define debe estar seguida por separadores, ya sea uno o ms espacios o tabuladores). El nombre nemnico / directiva, que puede equiparse con el verbo o la accin por realizar, seguido de uno o ms separadores (espacios o tabuladores). El operando, que generalmente se divide en dos (aunque existen instrucciones que slo opera con uno): el destino (que ser el depsito del algn resultado) y la fuente de la informacin (el originador de la accin). El destino y la fuente (si existe sta) deben estar separados por una coma. Finalmente tenemos el comentario, que siempre va precedido por el smbolo ; (debe estar separado del operando por uno o ms espacios o tabuladores, y puede existir o no).

El formato externo.
El formato externo est formado por varios comandos clave que permiten establecer el entorno operativo del programa. Entre ellos tenemos uno que define el modelo de memoria (bsicamente establece cules y cuntos segmentos se van a usar), los diferentes segmentos que contendr el cdigo, los datos y la pila, as como el comienzo y final del programa. Ahora bien, existen dos maneras de definir el programa: en la primera se usan directivas simplificadas y en la segunda no se usan. Las directivas simplificadas ayudan a esclarecer ciertos comandos crpticos del programa, permitiendo que sean ms legibles, y se incluyeron en las versiones del MASM 5.0 y posteriores.

Lmites de los segmentos.


Como ya dijimos, un programa contiene cuatros segmentos, los cuales ala hora de definirlos no necesariamente deben estar en un orden determinado. De hecho el

M. D. O. H. Sonia Alvarado Mares

57

Lenguaje Ensamblador
segmento extra (ES) no se define como parte del programa, solamente se hace referencia a l en otro de los segmentos, regularmente en el segmento de cdigo. Un segmento inicia en un lmite de prrafo, que es una direccin por lo comn divisible entre el 16 decimal, o el 10 hexadecimal. Suponga que un segmento de datos inicia en la localidad de memoria 045F0H. Ya que en este y todos los dems casos el ltimo dgito hexadecimal de la derecha es cero, los diseadores de computadoras decidieron que sera innecesario almacenar el dgito cero en el registro del segmento. As, 045F0H se almacena como 045F, con el cero de la extrema derecha sobreentendido.

Desplazamiento de segmentos.
En un programa, todas las localidades de memoria estn referidas a una direccin inicial de segmento. La distancia en bytes desde la direccin del segmento se define como el desplazamiento (offset). Un desplazamiento de dos bytes (16 bits) puede estar en el rango de 0000H hasta FFFFH, o bien, desde cero hasta 65,535. As, el primer byte del segmento de cdigo tiene un desplazamiento 00, el segundo byte tiene un desplazamiento 01, etc., hasta el desplazamiento 65535. Para referir cualquier direccin de memoria en un segmento, el procesador, el procesador combina la direccin del segmento en un registro de segmento con un valor de desplazamiento. En el ejemplo siguiente, el registro DS contiene la direccin de segmento del segmento de datos en 045F0H y una instruccin hace referencia a una localidad con un desplazamiento de 0032H bytes dentro del segmento de datos. Por tanto, la localidad real de memoria del byte referido por la instruccin es 04622H: Direccin del segmento DS Desplazamiento Direccin real 045F0H + 0032H 04622H

Note que un programa tiene uno o ms segmentos, los cuales pueden iniciar casi en cualquier lugar de memoria, variar en tamao y estar en cualquier orden.

M. D. O. H. Sonia Alvarado Mares

58

Lenguaje Ensamblador

1.4.1

Data Segment.

El Propsito del segmento de datos en un programa .EXE es definir constantes, reas de trabajo y reas de entrada/salida. El ensamblador permite la definicin de elementos de varias longitudes de acuerdo don el conjunto de directivas que defina datos. Por ejemplo, DB define un byte y DW define una palabra. Un elemento de datos puede contener un valor indefinido (esto es, no inicializado) o una constate, definida como una cadena de caracteres o como un valor numrico. A continuacin est el formato general para la definicin de datos: [nombre] Dn expresin Nombre. Un programa que hace referencia a un elemento de dato lo hace por medio de un nombre. Por otro lado, el nombre de un elemento es opcional, indicado por los corchetes. La seccin anterior Instrucciones, proporciona las reglas para la formacin de los nombres. Directivas (Dn). Las directivas que definen elementos de datos son DB (byte), DW (palabra), DD (palabra doble), DF (palabra larga), DQ (palabra cudruple) y DT (diez bytes), cada una indica de manera explcita la longitud del elemento definido. Expresin. La expresin es un operando que puede contener un signo de interrogacin para indicar un elemento no utilizado, como VAR1 DB ? ; elemento no inicializado

En este caso, cuando su programa inicie la ejecucin el valor inicial de VAR1 no es conocido. En la prctica, lo normal antes de usar este elemento es mover algn valor a l (lo que sea, pero debe ser apropiado al tamao definido). Tambin puede utilizar el operando para definir una constante como VAR2 DB 25 ; elemento inicializado

Puede usar con libertad este valor inicializado en su programa y aun puede cambiar el contenido de VAR2. Una expresin puede contener varios valores constantes separados por comas y limitados slo por la longitud de la lnea, como sigue: VAR3 DB 11, 12, 13, 14, 15, 16

M. D. O. H. Sonia Alvarado Mares

59

Lenguaje Ensamblador
El ensamblador define estas constantes en bytes contiguos. Una referencia a VAR3 es a la primera constante de un byte, 11 (puede pensar en el primer byte como VAR3+0), y una referencia a VAR3+1 es a la segunda constante, 12. Por ejemplo, la instruccin MOV AL, VAR3+3 carga el valor 14 (0EH) en el registro AL. Tambin la expresin permite duplicacin de constantes en un enunciado de la forma general [nombre] Dn contador de repeticiones DUP (expresin) Los ejemplos siguientes ilustran la duplicacin: DW 10 DUP (?) ; Diez palabras, no inicializadas DB 5 DUP (14) ; Cinco palabras con 0E0E0E0E0E hexadecimal DB 3 DUP (4 DUP (8)) ; Doce 8 El tercer ejemplo genera cuatro copias del dgito 8 (8888) y duplica el valor tres veces, produciendo un total de doce 8. Una expresin puede definir e inicializar una cadena de caracteres o una constante numrica.

Cadenas de caracteres.
Las cadenas de caracteres son usadas para datos descriptivos como nombres de personas y ttulos de pginas. La cadena est definida dentro de apstrofos, como PC, o dentro de comillas, como PC. El ensamblador traduce las cadenas de caracteres en cdigo objeto en formato ASCII normal. Extraamente, DB es el nico formato que define una cadena de caracteres que excede a dos caracteres y los almacena en la secuencia normal de izquierda a derecha. En consecuencia, DB es el formato convencional para la definicin de datos de caracteres de cualquier longitud. Un ejemplo es DB Cadena de caracteres El ensamblador almacena los caracteres en formato ASCII, sin apstrofos. Si la cadena debe contener un apstrofo o una comilla, usted puede definirlo en una de las formas siguientes: DB Honest Eds PC Emporium DB Honest Ed s PC Emporium ; Comillas para la cadena, una comilla para el apstrofo ; Una comilla para la cadena, dos Comillas seguidas para el apstrofo

Constantes numricas.
Las constantes numricas son usadas para definir valores aritmticos y direcciones de memoria. Las constantes no estn definidas entre comillas, pero van seguidas por un

M. D. O. H. Sonia Alvarado Mares

60

Lenguaje Ensamblador
especificador de base opcional, tal como H en el valor hexadecimal 12H. Para la mayora de las directivas de definicin de datos, el ensamblador convierte constantes numricas definidas a hexadecimal y almacena los bytes generados en cdigo objeto en orden inverso de derecha a izquierda. A continuacin estn los diferentes formatos nuericos. Decimal. El formato decimal permite definir con los dgitos decimales 0 a 9, seguidos de manera opcional por el especificador de base D, tal como 125 o 125D. Aunque el ensamblador permite que usted defina valores en formato decimal, como una conveniencia al codificar, l convierte sus valores decimales a cdigo objeto binario y los representa en hexadecimal. Por ejemplo, una definicin del decimal 125 se convirti en 7D hexadecimal. Hexadecimal. El formato hexadecimal permite definir con los dgitos hexadecimales de 0 a F, seguidos por especificador de base H, que se puede usar para definir valores binarios. Ya que el ensamblador espera que una referencia que empiece con una letra es un nombre simblico, el primer dgito de una constante hexadecimal debe ser de 0 a 9. Ejemplos son 2EH y 0FD8H, que el ensamblador almacena como 2E y D80F, respectivamente. Note que los bytes en el segundo ejemplo son almacenados en orden inverso. Binario. El formato binario permite definir con los dgitos binarios 0 y 1, seguidos por el especificador de base B. El uso normal del formato binario es para distinguir valores en las instrucciones de manejo de bits AND, OR, XOR y TEST. Ya que el ensamblador convierte todos los valores numricos a binarios ( y los representa en hexadecimal), las definiciones de 12, C hex y 1100 binario general el mismo valor : 0000 1100 binario o 0C hex, dependiendo de cmo vea el contenido del byte. Cmo las letras D y B actan tanto como especificadotes de base como dgitos hexadecimales, pueden causar alguna confusin. Como solucin, MASM 6.0 introdujo el uso de la T (por ten, diez) y la Y (por binary, binario) como especificadores de base para decimal y binario, respectivamente. Real. El ensamblador convierte un valor de real dato una constante decimal o hexadecimal seguidas por el especificador de base R- en formato de punto flotante para uso con un coprocesador matemtico. Asegrese de distinguir entre el uso de las constantes numricas y de caracteres. Una constante de carcter definida como DB

Identificadores.

M. D. O. H. Sonia Alvarado Mares

61

Lenguaje Ensamblador
Un identificador es un nombre que se aplica a elementos en el programa. Los dos tipos de identificadores son: nombre, que se refiere a la direccin de un elemento de datos, y etiqueta, que se refiere a la direccin de una instruccin. Las mismas reglas se aplican tanto para los nombres como para las etiquetas. Un identificador puede utilizar los siguientes caracteres: Letra del alfabeto Dgitos desde la A hasta la Z desde el 0 hasta 9 (no puede ser el primer carcter)

Caracteres especiales

signo de interrogacin (?) subrayado (_) signo de pesos ($) arroba (@) punto (.) (no puede ser el primer carcter).

El primer carcter de un identificador debe ser una letra o un carcter especial, excepto el punto. Ya que el ensamblador utiliza algunos smbolos especiales en palabras que inician con el smbolo @, debe evitar usarlo en sus definiciones. El ensamblador trata las letras maysculas y minsculas como iguales. La longitud mxima de un identificador es de 31 caracteres (247 desde el MASM 6.0). Ejemplos de nombres vlidos son COUNT, PAGE25 y $E10. Se recomienda que los nombres sean descriptivos y con significado. Los nombres de registros, como AX, DI y AL, estn reservados para hacer referencia a esos mismos registros. En consecuencia, en una instruccin tal como: ADD AX, BX el ensamblador sabe de forma automtica que AX y BX se refieren a los registros. Sin embargo, en una instruccin como: MOV REGSAVE, AX el ensamblador puede reconocer el nombre REGSAVE slo si se define en algn lugar del programa.

M. D. O. H. Sonia Alvarado Mares

62

Lenguaje Ensamblador

1.4.2

Stack Segment.

Los programas .COM y .EXE, requieren un rea del programa reservada como una pila (stack). El propsito de la pila es mantener un espacio para el almacenamiento temporal de direcciones y datos. El DOS define de manera automtica la pila para un programa .COM, mientras que para un programa .EXE usted debe definir en forma explcita la pila. Cada elemento de dato en la pila es una palabra (dos bytes). El registro SS, como es inicializado por el DOS, contiene la direccin del inicio de la pila. Inicialmente, el SP contiene el tamao de la pila, un valor que apunta al byte que est pasando el final de la pila. La pila difiere de otros segmentos en su mtodo de almacenar los datos: empieza en la localidad ms alta y almacena los datos hacia abajo por la memoria. La instruccin PUSH (entre otras) disminuye el SP en 2 hacia abajo, hacia la siguiente palabra almacenada de la pila y coloca (o empuja, push) un valor ah. La instruccin POP (entre otras) regresa el valor de la pila e incrementa el SP en 2 hacia arriba, hacia la siguiente palabra almacenada. Note que las instrucciones POP son codificadas en secuencia inversa a la instruccin PUSH. As el ejemplo Ejemplo de operacin sobre la pila (todos los datos son arbitrarios):

M. D. O. H. Sonia Alvarado Mares

63

Lenguaje Ensamblador

1.4.3

Code Segment.

El segmento de cdigo (CS) contiene las instrucciones de mquina que son ejecutadas. Por lo comn, la primera instruccin ejecutable est en el inicio del segmento, y el sistema operativo enlaza a esa localidad para iniciar la ejecucin del programa. Como su nombre indica, el registro del CS direcciona el segmento de cdigo. Si su rea de cdigo requiere ms de 64 K, su programa puede necesitar definir ms de un segmento de cdigo.

Palabras reservadas.
Ciertas palabras en lenguaje ensamblador estn reservadas para sus propsitos propios, y son usadas slo bajo condiciones especiales. Por categoras las palabras reservadas incluyen instrucciones, como MOV y ADD, que son operaciones que la computadora puede ejecutar; directivas, como END o SEGMENT, que se emplean para proporcionar comandos al ensamblador; operadores, como FAR y SIZE, que se utilizan en expresiones; y smbolos predefinidos, como @Data y @Model, que regresan informacin a su programa.

El uso de una palabra reservada para un propsito equivocado provoca que el ensamblador genere un mensaje de error.

M. D. O. H. Sonia Alvarado Mares

64

Lenguaje Ensamblador

1.4.4

Instrucciones del programa.

Un programa fuente en ensamblador contiene dos tipos de sentencias: las instrucciones y las directivas. Las instrucciones se aplican en tiempo de ejecucin, pero las directivas slo son utilizadas durante el ensamblaje. El formato de una sentencia de instruccin es el siguiente: [etiqueta:] nombre_instruccin [operandos] [;comentario] Los corchetes, como es normal al explicar instrucciones en informtica, indican que lo especificado entre ellos es opcional, dependiendo de la situacin que se trate. Campo etiqueta. Es el nombre simblico de la primera posicin de una instruccin, puntero o dato. Consta de hasta 31 caracteres que pueden ser las letras de la A a la Z, los nmeros del 0 al 9 y algunos caracteres especiales como @, _, . y $. Reglas:

Si se utiliza el punto . ste debe colocarse como primer carcter de la etiqueta. El primer carcter no puede ser un dgito. No se pueden utilizar los nombres de instrucciones o registros como nombres de etiquetas.

Las etiquetas son de tipo NEAR cuando el campo de etiqueta finaliza con dos puntos (:); esto es, se considera cercana: quiere esto decir que cuando realizamos una llamada sobre dicha etiqueta el ensamblador considera que est dentro del mismo segmento de cdigo (llamadas intrasegmento) y el procesador slo carga el puntero de instrucciones IP. Tngase en cuenta que hablamos de instrucciones; las etiquetas empleadas antes de las directivas, como las directivas de definicin de datos por ejemplo, no llevan los dos puntos y sin embargo son cercanas. Las etiquetas son de tipo FAR si el campo de etiqueta no termina con los dos puntos: en estas etiquetas la instruccin a la que apunta no se encuentra en el mismo segmento de cdigo sino en otro. Cuando es referenciada en una transferencia de control se carga el puntero de instrucciones IP y el segmento de cdigo CS (llamadas intersegmento). Campo nombre_instruccin. Contiene el mnemnico de las instrucciones, o bien una directiva de las que veremos ms adelante.

M. D. O. H. Sonia Alvarado Mares

65

Lenguaje Ensamblador
Campo operandos. Indica cuales son los datos implicados en la operacin. Puede haber 0, 1 2; en el caso de que sean dos al 1 se le llama destino y al 2 -separado por una coma- fuente. mov ax, es:[di] --> ax destino es:[di] origen Campo comentarios. Cuando en una lnea hay un punto y coma (;) todo lo que sigue en la lnea es un comentario que realiza aclaraciones sobre lo que se est haciendo en ese programa, resulta de gran utilidad de cara a realizar futuras modificaciones al mismo.

1.4.5

Directivas.

El MASM posee un conjunto de instrucciones que no pertenecen al lenguaje ensamblador propiamente sino que son instrucciones que nicamente son reconocidas por el ensamblador y que han sido agregadas para facilitar la tarea de ensamblado, tanto para el programador como para el programa que lo lleva a cabo. Dichas instrucciones son denominadas directivas. En general, las directivas son usadas para especificar la organizacin de memoria, realizar ensamblado condicional, definir macros, entrada, salida, control de archivos, listados, cross-reference, direcciones e informacin acerca de la estructura de un programa y las declaraciones de datos. El apndice D proporciona una lista completa de estas directivas. Conjunto de instrucciones.- Dentro de las directivas ms importantes, tenemos las que instrucciones establecen el conjunto de instrucciones a soportar para un microprocesador en especial: .8086(defecto).- Activa las instrucciones para el 8086 y 8088 e inhibe las del 80186 y 80286. .8087(defecto).- Activa instrucciones para el 8087 y desactiva las del 80287. .186.- Activa las instrucciones del 80186. .286c.- Activa instrucciones del 80286 en modo no protegido. .286p.- Activa instrucciones del 80286 en modo protegido y no protegido. .287.- Activa las instrucciones para el 80287. Declaracin de segmentos.- En lo que respecta a la estructura del programa tenemos segmentos las directivas SEGMENT y ENDS que marcan el inicio y final de un segmento del programa. Un segmento de programa es una coleccin de instrucciones y/o datos cuyas direcciones son todas relativas para el mismo registro de segmento. Su sintaxis es: nombre SEGMENT [alineacin] [combinacin] [clase] nombre ENDS El nombre del segmento es dado por nombre, y debe ser nico. Segmentos con el mismo nombre se tratan como un mismo segmento. Las opciones alineacin, combinacin, y clase proporcionan informacin al LINK sobre cmo ajustar los segmentos. Para alineacin tenemos los siguientes valores: byte (usa cualquier byte de direccin), word (usa cualquier palabra de direccin, 2 bytes/word), para (usa direcciones de prrafos, 16 bytes/prrafo, deafult), y page (usa direcciones de pgina, 256 bytes/page). combinacin define cmo se combinarn los segmentos con el mismo nombre. Puede asumir valores

M. D. O. H. Sonia Alvarado Mares

66

Lenguaje Ensamblador
de: public (concatena todos los segmentos en uno solo), stack (igual al anterior, pero con direcciones relativas al registro SS, common (crea segmentos sobrepuestos colocando el inicio de todos en una misma direccin), memory (indica al LINK tratar los segmentos igual que MASM con public, at address (direccionamiento relativo a address). clase indica el tipo de segmento, sealados con cualquier nombre. Cabe sealar que en la definicin est permitido el anidar segmentos, pero no se permite de ninguna manera el sobreponerlos. Fin de cdigo fuente.- Otra directiva importante es la que indica el final de un mdulo. Al fuente alcanzarla el ensamblador ignorar cualquier otra declaracin que siga a sta. Su sintaxis es: END [expresin] la opcin expresin permite definir la direccin en la cual el programa iniciar. Asignacin de segmentos.- La directiva ASSUME permite indicar cuales sern los segmentos valores por defecto que asumirn los registros de segmento. Existen dos formas de hacer esto: ASSUME registrosegmento:nombre,,, ASSUME NOTHING NOTHING cancela valores previos. Etiquetas.- Las etiquetas son declaradas Etiquetas. nombre: donde nombre constituye una cadena de caracteres. Declaracin de datos.- Estos se declaran segn el tipo, mediante la regla datos.[nombre] directiva valor,,, donde directiva puede ser DB (bytes), DW (palabras), DD (palabra doble), DQ (palabra cudruple), DT (diez bytes). Tambin pueden usarse las directivas LABEL (crea etiquetas de instrucciones o datos), EQU (crea smbolos de igualdad) , y el smbolo = ( asigna absolutos) para declarar smbolos. Estos tienen la siguiente sintaxis: nombre = expresin nombre EQU expresin nombre LABEL tipo donde tipo puede ser BYTE, WORD, DWORD, QWORD, TBYTE, NEAR, FAR. Declaracin de estructuras.- Para la declaracin de estructuras de datos se emplea la estructuras directiva STRUC. Su sintaxis es:

M. D. O. H. Sonia Alvarado Mares

67

Lenguaje Ensamblador
nombre STRUC campos nombre ENDS

1.5

PROCEDIMIENTO DE ENSAMBLE, ENLACE Y EJECUCIN.

Antes de que sea posible formalizar la relacin con el lenguaje ensamblador, es indispensable conocer un poco ms el ambiente que lo rodea. Este ambiente forma un crculo que comprende varios procesos tales como crear el archivo fuente, ensamblarlo (crear el archivo objeto), enlazarlo (crear el archivo ejecutable) y corregirlo o depurarlo. Cada proceso es independiente de los otros, pero es necesario para la generacin de un programa ejecutable sin errores. Es decir, una vez creado el programa fuente se pasa al proceso de enlace, y este proceso genera a su vez el programa ejecutable. Ser usted muy afortunado si su programa acta sin errores la primera vez; la mayora de los programas requieren una cuarta etapa que consiste en corregir y depurar los errores. La programacin, en cualquier lenguaje que sea, necesita al menos de tres herramientas: un editor de texto para crear el archivo fuente, un compilador para convertirlo en archivo objeto y un enlazador (linker) para generar finalmente el programa ejecutable. Una cuarta herramienta sera el depurador (debugger), aunque ms bien sirve de soporte para verificar, depurar y en caso necesario corregir el programa ejecutable. La programacin en ensamblador no es la excepcin, y tambin necesita las herramientas anteriores.

EDICIN. EDICIN.
Los archivos fuente de cdigo ensamblador deben estar en formato ASCII standard. Se puede usar cualquier editor de texto, el compilador (ensamblador) es el MASM y el enlazador es el programa LINK. Al utilizar el editor de texto para crear un archivo, se esta formando el archivo fuente (archivo que contiene todas las instrucciones en el formato del ensamblador). La extensin usada en ensamblador para el archivo fuente es .ASM. Este archivo es traducido por el MASM, generando as un archivo intermedio en formato OBJ. El formato OBJ es conocido como formato intermedio porque an no es ejecutable. El enlazador (linker) combina uno o ms archivos .OBJ para generar el archivo ejecutable, cuya extensin es .EXE (tambin puede ser .COM, dependiendo de la forma en que se ensambl). Para esto puede usarse cualquier editor que permita crear archivos sin formato, por ejemplo: Edlin, Edit, Write, El editor del Turbo Pascal, Works, Word, etctera. Las declaraciones pueden ser introducidas en maysculas y/o minsculas. Una buena prctica de programacin es poner todas las palabras reservadas (directivas e

M. D. O. H. Sonia Alvarado Mares

68

Lenguaje Ensamblador
instrucciones) en maysculas y todo lo del usuario en minsculas para fines de facilidad de lectura del cdigo.

ENSAMBLADO.
Una vez creado el archivo fuente, es necesario que pase por el MASM para generar el archivo intermedio (formato OBJ). El comando para ello es: MASM archivo; seguido por la tecla [enter]. MASM es el nombre del macroensamblador, archivo es el nombre del programa (sin extensin), y el signo ; le especifica a MASM que ensamble directamente el programa. He aqu un ejemplo: MASM prueba; Suponiendo que el nombre de su programa sea prueba. Si se omitiese el punto y como, MASM respondera con lo siguiente: Source filename [.ASM]: Object filename [prueba.obj]: Source listing [NUL.LST]: Cross-reference [NUL.CRF]: digite prueba [Enter] [Enter] [Enter]

MASM pondr entre corchetes la respuesta que considere correcta. La opcin Source listing (listado fuente) permite generar un archivo que contendr lnea por lnea el cdigo de mquina (en notacin hexadecimal) generado y la lnea de su cdigo fuente. Tambin contiene informacin adicional, por ejemplo los smbolos usados en el programa y los diferentes segmentos. El nombre NUL.LST usado por MASM indica que usted no desea dicho listado. La opcin Cross-reference (referencias recprocas) contiene informacin sobre cada smbolo de su cdigo fuente, mostrando el nmero de lnea donde fue declarado y todas las lneas que hacen referencia a l. De nuevo, el nombre NUL.CRF indica que tampoco desea generar dicho listado. MASM ofrece la opcin de recibir parmetros desde la lnea para comandos de MS-DOS. Existen demasiados parmetros, los que se mencionan ms adelante son slo algunos de ellos; sin embargo, es conveniente explicar cmo se pasan al MASM. Todo parmetro pasado al MASM debe estar precedido por el smbolo /, seguido de la inicial del parmetro (pueden repetirse uno o ms parmetros en la lnea para comandos. Una vez especificados todos los parmetros, se incluye el nombre del archivo por ensamblar. Los parmetros pueden ser: /A /S /B num /C escribe los segmentos en orden alfabtico escribe los segmentos en orden del fuente fija buffer de tamao num especifica un archivo de referencias cruzadas

M. D. O. H. Sonia Alvarado Mares

69

Lenguaje Ensamblador
/L /D /D sym /I path /ML /MX /MU /N /P /R /E /T /V /X /Z especifica un listado de ensamble crea listado del paso 1 define un smbolo que puede usarse en el ensamble fija path para buscar archivos a incluir mantiene sensitividad de letras (mays./mins) en nombres mantiene sensitividad en nombre pblicos y externos convierte nombres a maysculas suprime tablas en listados checa por cdigo impuro crea cdigo para instrucciones de punto flotante crea cdigo para emular instrucciones de punto flotante suprime mensajes de ensamble exitoso despliega estadsticas adicionales en pantalla incluir condicionales falsos en pantalla despliega lneas de error en pantalla

La lnea MASM /v /z prueba; le indica al ensamblador que ensamble el programa llamado prueba, que despliega al final el nmero de lneas fuente y los smbolos procesados (/v), y que s existe algn error despliegue la lnea donde ocurri (/z). En ocasiones son demasiados los parmetros que deseamos pasarle al MASM, y sera sumamente tedioso y engorroso digitar todo de nuevo cada vez que se ensambla el programa. Adems, existe un lmite a la cantidad de caracteres que puede digitarse en la lnea para comandos (128, lo cual es una restriccin de MS-DOS). La otra forma de invocar al ensamblador es slo tecleando MASM y respondiendo a la informacin que se solicita. Para omitir algn valor slo basta teclear ENTER si dar ningn valor. El MASM traduce (ensambla) el archivo de cdigo fuente a otro de formato .OBJ. Sin embargo, MS-DOS no puede ejecutar este ltimo archivo. Primero es necesario pasar el archivo .OBJ por otro proceso que definir muchos detalles y generar el archivo ejecutable; dicho proceso es realizado por el Enlazador. El comando para invocar al Enlazador tiene similitud con el que se usa para invocar al MASM. Simplemente digite: LINK archivo + (otros archivos .OBJ o bibliotecas); Por ejemplo, el comando LINK prueba; generar el archivo prueba.EXE. Para ampliar el concepto anterior, suponga que tiene dos archivos con extensin .OBJ: prueba1.obj y prueba2.obj, y que adems desea mezclar los dos archivos anteriores con una biblioteca de grfico llamada bibliogr.lib. Usando el enlazador para generar el programa ejecutable, se utilizara el siguiente comando: LINK prueba1 + prueba2 + bibliogr; Tome en cuenta que en la lnea para comandos, el primer archivo siempre debe ser el principal, es decir, el que controlar la secuencia de eventos. El objetivo de enlazar todos los archivos .OBJ es poder generar un solo archivo ejecutable con la extensin .EXE. En el ejemplo anterior se generara el archivo PRUEBA1.EXE. Los parmetros que este requiere son:

M. D. O. H. Sonia Alvarado Mares

70

Lenguaje Ensamblador
LINK objeto [,[ejecutable][,[mapa][,[librera]]]]][opciones][;] donde: objeto.- Es el nombre para el archivo .OBJ ejecutable.- Nombre del archivo .EXE mapa.- Nombre del archivo mapa librera.- Nombre del archivo biblioteca de rutinas opciones.- Pueden ser:

/HELP muestra lista de opciones /PAUSE pausa en el proceso /EXEPACK empaca archivo ejecutable /MAP crea mapa se smbolos pblicos /LINENUMBERS copia nmero de lneas al mapa /NOIGNORECASE mantiene sensitividad en nombres /NODEFAULTLIBRARYSEARCH no usa bibliotecas por defecto /STACK: fija el tamao del stack a usar /CPARMAXALLOC: nmero fija alojacin mxima de espacio /HIGH fija la direccin de carga ms alta /DSALLOCATE aloja grupo de datos /NOGROUPASSOCIATION ignora asociaciones para direcciones /OVERLAYINTERRUPT:nmero asigna nuevo nmero a la INT 03Fh /SEGMENTS:nmero procesa un nmero de segmentos /DOSSEG sigue la convencin de orden de DOS

EJECUCIN. EJECUCIN.
En el entorno MS-DOS existen dos tipos diferentes de programas ejecutables desde la lnea para comandos: los que tienen la extensin .COM y los que tienen la extensin .EXE. Las diferencias entre uno y otro se delinearn ms adelante. Sin embargo, ambos tienen algo en comn: hacen uso de una estructura en memoria llamada PSP. El Prefijo del Segmento de Programa (PSP). El PSP (Programa Segment Prefix) es una estructura usada para controlar ciertos aspectos del programa. Tiene una longitud de 256 bytes, y siempre est ubicado en los primeros 256 bytes del segmento donde se carga el programa (forma parte del programa en la memoria). En esta estructura se almacena informacin importante, por ejemplo la tabla de entorno (Dnde se guarda la informacin sobre las variables de entorno). Para la ejecucin del programa simplemente basta teclear su nombre en el prompt de MSDOS y teclear ENTER. Con esto el programa ser cargado en memoria y el sistema proceder a ejecutarlo. El proceso completo para poder crear un programa ejecutable con el Microsoft Macro Assembler se muestra abajo.

M. D. O. H. Sonia Alvarado Mares

71

Lenguaje Ensamblador

y lo que se vera en pantalla sera lo siguiente: C:\DATA\PROGRAMS\ASM>masm main Microsoft (R) Macro Assembler Version 4.00 Copyright (C) Microsoft Corp 1981, 1983, 1984, 1985. All rights reserved. Object filename [main.OBJ]: Source listing [NUL.LST]: Cross-reference [NUL.CRF]: 50966 Bytes symbol space free 0 Warning Errors 0 Severe Errors C:\DATA\PROGRAMS\ASM>masm task Microsoft (R) Macro Assembler Version 4.00 Copyright (C) Microsoft Corp 1981, 1983, 1984, 1985. All rights reserved. Object filename [task.OBJ]: Source listing [NUL.LST]: Cross-reference [NUL.CRF]: 51034 Bytes symbol space free 0 Warning Errors 0 Severe Errors C:\DATA\PROGRAMS\ASM>link main+task Microsoft (R) 8086 Object Linker Version 3.05 Copyright (C) Microsoft Corp 1983, 1984, 1985. All rights reserved. Run File [MAIN.EXE]: List File [NUL.MAP]: Libraries [.LIB]: C:\DATA\PROGRAMS\ASM>main

M. D. O. H. Sonia Alvarado Mares

72

Lenguaje Ensamblador
Entrando a un submodulo.... .......saliendo del submodulo. C:\DATA\PROGRAMS\ASM>

DEPURACIN. DEPURACIN.
Para la depuracin de un programa en ensamblador tenemos disponibles dos herramientas. Por un lado tenemos el debugger que nos proporciona MS-DOS (DEBUG.EXE) y por otro lado tenemos el que nos proporciona Microsoft (SYMDEB.EXE). Este ltimo trabaja igual que el de MS-DOS pero nos proporciona muchas ventajas ms. Una de ellas es la facilidad de desplegar el cdigo fuente correspondiente a la instruccin que se esta ejecutando (si el programa ejecutable fue ensamblado o compilado con un ensamblador o compilador compatible), nos permite ejecutar comandos del S.O. y nos permite obtener informacin de las interrupciones de manera simblica.

LA UTILERIA EXE2BIN Y LOS ARCHIVOS .EXE Y .COM.


Para MS-DOS slo existen dos tipo de archivos ejecutables los .COM y .EXE. Ambos archivos difieren en algunas cosas. Primero, las ventajas de los .EXE son dobles, nos permiten tener archivos reubicables y el uso de hasta cuatro segmentos (STACK, DATA, EXTRA y CODE) de hasta 64KB cada uno. Un archivo .COM slo puede tener un segmento de 64KB, en el que se tiene tanto cdigo como pila, y datos. La desventaja de los .EXE es que agrega n 512 bytes como cabecera con informacin para la reubicacin del cdigo. Un .COM no es reubicable, siempre inicia en la direccin 0100H. Si nuestro programa no es muy grande 64KB son ms que suficientes. Por lo que conviene crearlo como .COM, para esto se cuenta con la utilera EXE2BIN.EXE que nos proporciona el sistema operativo. y que nos permite crear .COM a partir de .EXE . Las restricciones para esto son las siguientes: el archivo a convertir no debe estar empacado, no debe tener segmento de stack, debe tener slo segmento de cdigo y su tamao debe ser menor a 64KB.

EL LENGUAJE DE MQUINA. MQUINA.


Lo que se conoce como lenguaje o cdigo de mquina es el conjunto de cdigos numricos (comnmente expresados en hexadecimal) para cada una de las instrucciones que el microprocesador es capaz de reconoce y ejecutar. Aun cuando finalmente es con esta serie de nmeros con los que el microprocesador trabaja, es muy difcil prrogramar a este nivel. El lenguaje ensamblador fue desarrollado para liberar al programador de la difcil tarea de tener que recordar todos los cdigos y de las tediosas labores de clculo de localidades de memoria. Los cdigos mnemnicos del ensamblador son una substitucin de los cdigos numricos mejor que en una relacin 1:1. Por ejemplo, resulta que mientras que tenemos de manera general un mnemnico para cargar un registro con un valor (MOV) internamente, para cada una de las modalidades de direccionamiento o registro afectado existe un cdigo numrico.

M. D. O. H. Sonia Alvarado Mares

73

Lenguaje Ensamblador
La programacin del computador en lenguaje de mquina, tanto la introduccin de los programas, su ejecucin y su depuracin es posible usando alguna utilera provista por el sistema operativo y cabe mencionar que casi todos los sistemas operativos proveen al usuario con estas facilidades. DOS no es la excepcin; ste provee al usuario de la utilera DEBUG. La siguiente seccin da ms informacin al respecto.

CREACIN Y DEPURACIN DE PROGRAMAS CON LA UTILERA DEBUG. UTILERA


El la utilera de MS-DOS DEBUG es una herramienta muy poderosa que es desconocida por muchos. Este provee una interfaz desde la cual es seguro no slo explorar el contenido de la memoria del computador y de los registros del microprocesador sino que adems provee los medios para la introduccin de programas y su depuracin, tanto en ensamblador como en lenguaje de mquina. La utilizacin de esta herramienta se ejemplifica con el siguiente ejemplo. 1. Desde el prompt del sistema invoque la utilera. C:\> debug 2. En el prompt de la utilera introducir el siguiente programa en cdigo de mquina. -e 100 BA 40 00 8E DA BB 72 00 C7 07 34 12 EA 00 00 FF FF 3. Guardar el programa en un archivo. -rcx :11 -n reset.com -w -q

4. El paso anterior crear un archivo en el directorio vigente con el nombre


RESET.COM. La extensin .COM es importante, el nombre pudo ser cualquiera. Este programa llama a las rutinas de inicializacin del sistema, al ejecutarlo veremos que el computador se reinicializa, o si estamos trabajando en una ventana de DOS bajo Windnows esta se cerrar. C:\> reset.com Haga la prueba creando un programa ms grande, esta vez introducindolo a travs de dos lneas de programa. Para guardarlo indique la cantidad de 1C bytes al invocar el comando rcx del debug y slvelo con extensin .COM. -e 100 1E 31 C0 50 BA 0C 01 B4 09 CD 21 C3 48 6F 6C 61 20 6D 75 6E 64 6F -e 116 21 21 21 0D 0A 24

M. D. O. H. Sonia Alvarado Mares

74

Lenguaje Ensamblador

1.6 ENTORNO DE PROGRAMACIN.


Existen varios ensambladores disponibles para ambiente MS-DOS: el IBM Macro Assembler, el Turbo Assembler de Borland, el Turbo Editassm de Speedware, por citar algunos. Una breve descripcin de cada uno se propociona a continuacin. Macro Ensamblador IBM.- Est integrado por un ensamblador y un macroensamblador. En gran medida su funcionamiento y forma de invocarlo es sumamente similar al de Microsoft. Su forma de uso consiste en generar un archivo fuente en cdigo ASCII, se procede a generar un programa objeto que es ligado y se genera un programa .EXE. Opcionalmente puede recurrirse a la utilera EXE2BIN de MS-DOS para transformarlo a .COM. Es capaz de generar un listado con informacin del proceso de ensamble y referencias cruzadas. Macro Ensamblador de Microsoft.- Dependiendo de la versin, este ensamblador es capaz de soportar el juego de instrucciones de distintos tipos de microprocesadores Intel de la serie 80xx/80x86. En su versin 4.0 este soporta desde el 8086 al 80286 y los coprocesadores 8087 y 80287. Requiere 128KB de memoria y sistema operativo MS-DOS v2.0 o superior. Trabaja con un archivo de cdigo fuente creado a partir de un editor y grabado en formato ASCII. Este archivo es usado para el proceso de ensamble y generacin de cdigo objeto. Posteriormente, y con un ligador, es creado el cdigo ejecutable en formato .EXE. Turbo Editassm.- Este es desarrollado por Speddware, Inc., y consiste de un ambiente integrado que incluye un editor y utileras para el proceso de ensamble y depuracin. Es capaz de realizar el ensamble lnea a lnea, conforme se introducen los mnemnicos, y permite revisar listas de referencias cruzadas y contenido de los registros. Este ensamblador trabaja con tablas en memoria, por lo que la generacin del cdigo ejecutable no implica la invocacin explcita del ligador por parte del programador. Adicionalmente permite la generacin de listados de mensajes e informacin de cada etapa del proceso y la capacidad de creacin de archivos de cdigo objeto. Turbo Assembler.- De Borland Intl., es muy superior al Turbo Editassm. Trabaja de la misma forma, pero proporciona una interfaz mucho ms fcil de usar y un mayor conjunto de utileras y servicios.

M. D. O. H. Sonia Alvarado Mares

75

Lenguaje Ensamblador
En lo que se refiere a las presentes notas, nos enfocaremos al Microsoft Macro Assembler v4.0. Los programas ejemplo han sido desarrollados con ste y est garantizado su funcionamiento. Estos mismo programas posiblemente funcionen con otros ensambladores sin cambios o con cambios mnimos cuando utilizan directivas o pseudoinstrucciones. Realmente la diferencia entre los ensambladores radica en la forma de generar el cdigo y en las directivas con que cuente, aunque estas diferencias son mnimas. El cdigo ensamblador no cambia puesto que los microprocesadores con los que se va a trabajar son comunes. As, todos los programas que se creen con un ensamblador en particular podrn ser ensamblados en otro, cambiando las pseudo-operaciones no reconocidas por el equivalente indicado en el manual de referencia del paquete empleado. Los programas que componen el Macro Ensamblador Microsoft v4.0 son los siguientes: Programa MASM.EXE LINK.EXE SYMDEB.EXE MAPSYM.EXE CREF.EXE LIB.EXE MAKE.EXE EXEPACK.EXE EXEMOD.EXE COUNT.ASM README.DOC Descripcin _________ Microsoft Macro Assembler Microsoft 8086 object linker Microsoft Symbolic Debuger Utility Microsoft Symbol File Generator Microsoft Cross-Reference Utility Microsoft Library Manager Microsoft Program Maintenance Utility Microsoft EXE File Compression Utility Microsoft EXE File Header Utility Sample source file for SYMDEB session Updated information obtained after the manual was printed.

El Microsoft Macro Assembler v4.0 crea cdigo ejecutable para procesadores 8086, 8088, 80186, 80188, 80286, 8087 y 80287. Adems es capaz de aprovechar las instrucciones del 80286 en la creacin de cdigo protegido y no protegido. El trmino macroensamblador es usado para indicar que el ensamblador en cuestin tiene la capacidad de poder ensamblar programas con facilidad de macro. Una macro es una pseudo-instruccin que define un conjunto de instrucciones asociadas a un nombre simblico. Por cada ocurrencia en el cdigo de esta macro, el ensamblador se encarga de substituir esa llamada por todas las instrucciones asociadas y, en caso de existir, se dejan los parmetros con los que se estaba llamando la macro y no con los que haba sido definida. Es importante sealar que no se deja una llamada, como a una subrutina o procedimiento, sino que se incorporan todas las instrucciones que definen a la macro.

M. D. O. H. Sonia Alvarado Mares

76

Lenguaje Ensamblador

M. D. O. H. Sonia Alvarado Mares

77

También podría gustarte