Anda di halaman 1dari 64

La informtica es la ciencia que se encarga de la automatizacin del manejo de la informacin.

La informtica, por su rapidez de crecimiento y expansin, Ha venido transformando rpidamente las sociedades actuales. La computadora, a diferencia de otras herramientas que en general apoyan el esfuerzo fsico de los Humanos, fue inventada para facilitar el trabajo intelectual. El lenguaje de programacin es el medio de comunicacin entre el Hombre y la mquina. Sistema de smbolos y reglas que permite la construccin de programas con los que la computadora puede operar as como resolver problemas de manera eficaz. Estos contienen un conjunto de instrucciones que nos permiten realizar operaciones de entrada / salida, calculo, manipulacin de textos, lgica / comparacin y almacenamiento / recuperacin. La programacin tiene como objetivo el tratamiento de la informacin correctamente, con lo que se espera que un programa de el resultado correcto y no uno errneo. As que cada aplicacin debe funcionar segn lo esperado en trminos de programacin, esta pretende que sus programas sean tiles y eficientes Un sistema es un conjunto de componentes que interaccionan entre s para lograr un objetivo comn. Las personas se comunican con el lenguaje, que es un sistema muy desarrollado formado por palabras y smbolos que tienen significado que tienen significado para el que Habla y para quienes lo escuchan, lo mismo es para las computadoras las cuales tienen sistemas y se comunican por medio de computadoras. La programacin es el proceso de convertir las especificaciones a grandes rasgos de los sistemas en instrucciones de mquina que produzcan los resultados deseados. Por lo tanto la Programacin de Sistemas se refiere a la creacin de programas cuya finalidad es servir a otros programas (software) ejemplos; Ensambladores, Cargadores y Ligadores, Compiladores, intrpretes. El Software es un conjunto de programas, documentos, procedimientos, y rutinas asociados con la operacin le un sistema de computo. Distinguindose de los componentes fsicos llamados hardware. El hardware por s solo no puede hacer nada, pues es necesario que exista el software. El software de manera general, podemos clasificarlo en: Software de sistema: en algunas ocasiones tambin denominado software de base, consiste en un software que sirve para controlar e interactuar con el sistema, proporcionando control sobre el hardware y dando soporte a otros programas. Software de aplicacin: El software de hoja de clculo, de diseo asistido por computadoras (CAD), de procesamiento de texto, de manejo de Bases de Datos, pertenece a esta categora. Software de uso general: este ofrece la estructura para un gran nmero de aplicaciones empresariales, cientficas y personales. La mayora de software para uso general se vende como paquete; es decir, con software y documentacin orientada a los usuarios (manuales de referencia, plantillas de teclado y dems).

El trabajo de un programador de sistemas es seleccionar, modificar y mantener el complejo software del sistema operativo. Por lo tanto, los programadores de sistemas desempean una funcin de apoyo al mantener el ambiente de software del sistema operativo en el que trabajan los programadores de aplicaciones y los operadores de las computadoras. Tambin participan en las decisiones relativas a reducciones o ampliaciones de hardware y/o software. Programacin de Sistemas Conceptos y Aplicaciones Se entiende por programacin de sistemas el conjunto de programas necesario para que una computadora de una imagen coherente y monoltica ante sus usuarios. Es un rea especializada dentro de las ciencias de la computacin. As, mediante la programacin de sistemas, no solo se manejan las computadoras por medio del lenguaje maquina (0 y 1) sino por otros sistemas operativos, sin lo cual sera muy difcil la interaccin con la maquina. 1. ESTRUCTURA DE LA COMPUTADORA Objetivo: Entender con detalle los procesos lgicos que suceden en una computadora para que pueda ejecutar un programa en lenguaje mquina de una plataforma que en particular se define al iniciar el curso. 1-.Arquitectura de von Neumann Cuando se describe una computadora se debe distinguir entre arquitectura y organizacin. La arquitectura de computadoras que se refiere a los atributos de un sistema que son visibles a un programador, es decir aquellos atributos que tienen un impacto directo en la ejecucin lgica de un programa. Ejemplos de atributos arquitectnicos: conjunto de instrucciones, nmero de bits usados para representar datos, mecanismos de entrada salida y tcnicas de direccionamiento de memoria. Tambin suele definirse como la forma de seleccionar e interconectar componentes de hardware para crear computadoras segn los requerimientos de funcionalidad, rendimiento y costo. La organizacin de computadoras que se refiere a las unidades funcionales y sus interconexiones, que materializan especificaciones arquitectnicas. Ejemplos de atributos de organizacin: son los detalles del hardware transparentes para el programador, tales como seales de control, interfaces entre la computadora y los perifricos y la tecnologa de memoria utilizada. Por poner un ejemplo, una cuestin de arquitectura es si la computadora tendr la instruccin de multiplicar. Una cuestin de organizacin es si esa instruccin ser implementada por una unidad especializada en multiplicar o por un mecanismo que haga un uso iterativo de la unidad de suma del sistema. La unidad central de procesamiento, CPU (por sus siglas del ingls Central Processing Unit), o, simplemente, el procesador, es el componente en una computadora digital que interpreta las instrucciones y procesa los datos contenidos en los programas de computadora. La CPU proporciona la caracterstica fundamental de la computadora digital: la programabilidad, y es uno de los componentes necesarios encontrados en las computadoras de cualquier tiempo, junto con el almacenamiento primario y los dispositivos de entrada/salida. Desde mediados de los aos

1970, los microprocesadores de un solo chip han reemplazado casi totalmente todos los tipos de CPU, y hoy en da, el trmino "CPU" es aplicado usualmente a todos los microprocesadores Las funciones bsicas que una computadora puede llevar a cabo son: Procesamiento de datos, Almacenamiento de datos, Transferencia de datos, Control La computadora es una entidad que interacta de alguna manera con su entorno externo. En general, todas sus conexiones con el exterior pueden ser clasificadas como dispositivos perifricos o lneas de comunicacin. Hay cuatro componentes estructurales principales: > Unidad de Procesamiento Central (CPU): controla el funcionamiento de la computadora y lleva a cabo las funciones de procesamiento de datos. Frecuentemente se le llama procesador. Memoria Principal: es el dispositivo en el cual se almacenan datos. E/S: transfiere datos entre la computadora y el exterior. Sistema de /interconexin (Bus del sistema): es un mecanismo que proporciona la comunicacin entre la CPU, la memoria y E/S. 1.1.1 CPU Unidad de Control: controla el funcionamiento de la CPU y por tanto de la computadora. Unidad Aritmtica y Lgica (ALU): lleva a cabo las funciones de procesamiento de datos. Registros: proporciona almacenamiento interno para la CPU. interconexin interna de la CPU: son mecanismos que proporcionan comunicacin entre la unidad de control, ALU y registros. La ENIAC (Electronic Numerical Integrator And Computer) fue la primera computadora electrnica de uso general en el mundo. Uno de los inconvenientes ms grandes de la ENIAC era que tena que ser programada manualmente mediante conmutadores y conectando y desconectando cables. El proceso de programacin podra ser ms fcil si el programa se representar en una forma adecuada para ser guardado en la memoria junto con los datos. Entonces, la computadora conseguira sus instrucciones leyndolas de la memoria, y se podra hacer o modificar un programa escribiendo en una zona de memoria. John von Neumann en imagen. La idea central del modelo de computacin propuesto por John Von Neumann es almacenar las instrucciones del programa de una computadora en su propia memoria, logrando con ello que la mquina siga los pasos definidos por su programa almacenado. 1.1.2 Memoria

La memoria se puede definir como los circuitos que permiten almacenar y recuperar la informacin. En un sentido ms amplio, puede referirse tambin a sistemas externos de almacenamiento, como las unidades de disco o de cinta. Para nuestros propsitos, la memoria ser un conjunto de celdas (o casillas) con las siguientes caractersticas: 1. cada celda puede contener un valor numrico John von Neumann (28 dic. 1903 - 8 feb. 1957) matemtico hngaro-estadounidense, de ascendencia juda, realiz contribuciones importantes en fsica cuntica, anlisis funcional, teora de conjuntos, informtica, economa, anlisis numrico, hidrodinmica (de explosiones), estadstica y muchos otros campos de la matemtica. Recibi su doctorado en matemticas de la Universidad de Budapest a los 23 aos. 2. cada celda tiene la propiedad de ser direccionable, es decir, se puede distinguir una de otra por medio de un nmero unvoco que es su direccin. 3. Las celdas de memoria estn organizadas en forma de vector, que no es ms que un conjunto de celdas numerado secuencialmente. Como se dijo, se puede hacer referencia a una celda por medio de su direccin. Se usar un apuntador para dirigirse a alguna celda cualquiera. Una memoria para efectuar una lectura se deposita en el bus de direcciones la direccin de la palabra de memoria que se desea leer y entonces se activa la seal de lectura; despus de cierto tiempo (retardo), en el bus de datos aparecer el contenido de la direccin buscada. Por otra parte, para realizar una escritura se deposita en el bus de datos la informacin que se desea escribir y en el bus de direcciones la direccin donde deseamos escribirla, entonces se activa la seal de escritura (escritura), pasado el tiempo de retardo, la memoria escribir la informacin en la direccin deseada. Internamente la memoria tiene un registro de direccin (MAR, memory address register), un registro buffer de memoria o registro de datos (MB, memory buffer, o MDR, memory data register) y, un decodificador como se ve en la figura. Esta forma de estructurar la memoria se llama organizacin lineal o de una dimensin. En la figura cada lnea de palabra activa todas las celdas de memoria que corresponden a la misma palabra. 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 (aqu est la diferencia entre la Arquitectura de Neumann con la de Harvard). 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 o 1 y de esta manera forman conjuntamente el nmero de la posicin dentro de la memoria (es decir: la direccin). Cuantas

ms lneas haya disponibles, mayor es la direccin mxima y mayor es la memoria a la cual puede dirigirse de esta forma (es decir si es un dispositivo programable de 1,2 o 3 bytes). Esto que en le teora parece tan fcil es bastante ms 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. Ejemplo en INTEL:

Estructuras de interconexin Existen dos organizaciones fsicas de operaciones E/S que tienen que ver con los buses que son: * Bus nico: 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 s que soporta este controlados Bus dedicado: este 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. 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 1.2. Estructura lgica del procesador La ALU contiene localidades de almacenamiento llamadas registros, definidos de la siguiente manera:

Registro Temporal de Memoria "Buffer" (MBR): Contiene una palabra que debe ser almacenada en memoria, o recibe una palabra procedente de la memoria. Registro de Direccin de Memoria (MAR): Especifica la direccin de memoria de la palabra que va a ser escrita o leda en MBR. Registro de /instruccin (IR): Contiene el cdigo de operacin de la instruccin que se va a ejecutar. Registro Temporal de /instruccin (IBR): Almacena temporalmente la instruccin contenida en la parte derecha de una palabra. Contador de Programa (PC): Contiene la direccin de la siguiente pareja de instrucciones que se traern de memoria. Acumulador (AC) Multiplicador Cociente (MQ): Se emplean para almacenar temporalmente operandos y resultados de operaciones de la ALU. Virtualmente todas las computadoras se han diseado basndose en los conceptos desarrollados por von Neumann. Tal diseo se conoce como Arquitectura de von Neumann y se basa en tres conceptos clave: Los datos y las instrucciones se almacenan en una sola memoria de lectura - escritura. Los contenidos de esta memoria se direccionan indicando su posicin, sin considerar el tipo de dato contenido en la misma. La ejecucin se produce siguiendo una secuencia de instruccin tras instruccin (a no ser que dicha instruccin se modifique explcitamente).

Ciclo maquina La funcin bsica de una computadora es ejecutar programas, el cual est compuesto de un conjunto de instrucciones almacenadas en memoria. La CPU es la encargada de ejecutar las instrucciones especficas del programa. Para comprender esta funcin debe considerarse el detalle del proceso de ejecucin del programa. Desde el punto de vista ms simple, se considera el procesamiento de una instruccin en dos etapas: la CPU lee (busca, trae; fetch en ingls) la instruccin de memoria y la ejecuta. La ejecucin del programa consiste en la repeticin del proceso de traer y ejecutar la instruccin.

Buscar una instruccin es una operacin comn a todas las instrucciones, y consiste en la lectura de la instruccin de una localidad de memoria. La ejecucin de la instruccin puede suponer varias operaciones y depende de la naturaleza de la instruccin. El procesamiento de una instruccin se denomina ciclo de instruccin. Los dos pasos se denotan como ciclo de bsqueda y ciclo de ejecucin. La ejecucin del programa se detiene slo si la computadora se desconecta, se produce algn error o se encuentra una instruccin que detiene la computadora. Al principio de cada ciclo de instruccin, la CPU busca o trae una instruccin de memoria. En una CPU tpica, se utiliza un registro llamado contador de programa (PC program counter) para apuntar a la instruccin que debe traerse a continuacin. A no ser que se indique otra cosa, la CPU siempre incrementa el PC despus de traer una instruccin para determinar de dnde traer la siguiente instruccin de la secuencia (siguiente direccin de memoria).

La instruccin trada se almacena en un registro de la CPU conocido como registro de instruccin (IR instruction register). La CPU interpreta la instruccin y realiza la accin requerida. En general, sta puede ser de cuatro tipos: CPU - Memoria: Deben transferirse datos desde la CPU a la memoria o viceversa. CPU - E/S: Deben transferirse datos a o desde el exterior mediante el mdulo de E/S. Procesamiento de datos: La CPU realizar alguna operacin aritmtica o lgica con los datos. Control: Una instruccin puede especificar que la secuencia de ejecucin se altere por lo que la CPU debe poner el contador de programa al valor adecuado. El ciclo de ejecucin de una instruccin puede ocasionar ms de una referencia a memoria, o en su lugar, puede especificar una operacin de E/S. Con estas consideraciones en mente, la figura 5 proporciona una visin ms detallada el ciclo de instruccin. Para un ciclo de instruccin dado, algunos estados pueden no darse y otros pueden visitarse ms de una vez. Los estados del ciclo maquina ocasionan intercambio entre la CPU y la memoria o mdulo E/S. Los circuitos micro programables son sistemas digitales, lo que significa que trabajan con dos nicos niveles de tensin. Dichos niveles, por abstraccin, se simbolizan con el cero, 0, y el uno, 1, por eso el lenguaje de mquina slo utiliza dichos signos. Esto permite el empleo de las teoras del lgebra booleana y del sistema binario en el diseo de este tipo de circuitos y en su programacin. Una visin tpica de la arquitectura de computadores como una serie de capas de abstraccin: hardware, firmware, ensamblador, kernel, sistema operativo y aplicaciones. Claude Elwood Shannon, en su Analysis of Relay and Switching Circuits, y con sus experiencias en redes de conmutacin, sent las bases para la aplicacin del lgebra de Boole a las redes de conmutacin.

Un lenguaje de programacin de bajo nivel es el que proporciona poca o ninguna abstraccin del microprocesador de un ordenador. Consecuentemente es fcilmente trasladado a lenguaje de mquina. La palabra "bajo" no implica que el lenguaje sea inferior a un lenguaje de alto nivel; se refiere a la reducida abstraccin entre el lenguaje y el hardware. En general se utiliza este tipo de lenguaje para programar controladores (drivers). Se trabaja a nivel de instrucciones, es decir, su programacin es al ms fino detalle. Est orientado a la mquina. Primera generacin El lenguaje de programacin de primera generacin (por sus siglas en ingls, 1GL), es el lenguaje de cdigo mquina. Es el nico lenguaje que un microprocesador entiende de forma nativa. El lenguaje mquina no puede ser escrito o ledo usando un editor de texto, y por lo tanto es raro que una persona lo use directamente. Segunda generacin El lenguaje de programacin de segunda generacin (por sus siglas en ingls, 2GL), es el lenguaje ensamblador. Se considera de segunda generacin porque, aunque no es lenguaje nativo del microprocesador, un programador de lenguaje ensamblador debe conocer la arquitectura del microprocesador (como por ejemplo las particularidades de sus registros o su conjunto de instrucciones). Entonces recapitulemos: Lenguajes Las instrucciones deben darse en un lenguaje de programacin, es decir, en una determinada configuracin de informacin digital binaria. En las primeras computadoras, la programacin era una tarea difcil y laboriosa ya que los conmutadores ON-OFF de las vlvulas de vaco deban configurarse a mano. Programar tareas tan sencillas como ordenar una lista de nombres requera varios das de trabajo de equipos de programadores. Desde entonces se han inventado varios lenguajes informticos, algunos orientados hacia funciones especficas y otros centrados en la facilidad de uso. Lenguaje mquina El lenguaje propio del ordenador, basado en el sistema binario, o cdigo mquina, resulta difcil de utilizar para las personas. El programador debe introducir todos y cada uno de los comandos y datos en forma binaria, y una operacin sencilla como comparar el contenido de un registro con los datos situados en una ubicacin del chip de memoria puede tener el siguiente formato: 11001010 00010111 11110101 00101011. La programacin en lenguaje mquina es una tarea tan tediosa y consume tanto tiempo que muy raras veces lo que se ahorra en la ejecucin del programa justifica los das o semanas que se han necesitado para escribir el mismo. Lenguaje ensamblador

Al asignar un cdigo mnemotcnico (por lo general de tres letras) a cada comando en lenguaje mquina, es posible escribir y depurar o eliminar los errores lgicos y de datos en los programas escritos en lenguaje ensamblador, empleando para ello slo una fraccin del tiempo necesario para programar en lenguaje mquina. En el lenguaje ensamblador, cada comando mnemotcnico y sus operadores simblicos equivalen a una instruccin de mquina. Un programa ensamblador traduce el cdigo fuente, una lista de cdigos de operacin mnemotcnicos y de operadores simblicos, a cdigo objeto (es decir, a lenguaje mquina) y, a continuacin, ejecuta el programa. Sin embargo, el lenguaje ensamblador puede utilizarse con un solo tipo de chip de CPU o microprocesador. Los programadores, que dedicaron tanto tiempo y esfuerzo al aprendizaje de la programacin de un ordenador, se vean obligados a aprender un nuevo estilo de programacin cada vez que trabajaban con otra mquina. Lo que se necesitaba era un mtodo abreviado en el que un enunciado simblico pudiera representar una secuencia de numerosas instrucciones en lenguaje mquina, y un mtodo que permitiera que el mismo programa pudiera ejecutarse en varios tipos de mquinas. Estas necesidades llevaron al desarrollo de lenguajes de alto nivel. Intrpretes y compiladores La traduccin de una serie de instrucciones en lenguaje ensamblador (el cdigo fuente) a un cdigo mquina (o cdigo objeto) no es un proceso muy complicado y se realiza normalmente por un programa especial llamado compilador. La traduccin de un cdigo fuente de alto nivel a un cdigo mquina tambin se realiza con un compilador, en este caso ms complejo, o mediante un intrprete. Un compilador crea una lista de instrucciones de cdigo mquina, el cdigo objeto, basndose en un cdigo fuente. El cdigo objeto resultante es un programa rpido y listo para funcionar, pero que puede hacer que falle el ordenador si no est bien diseado. Los intrpretes, por otro lado, son ms lentos que los compiladores ya que no producen un cdigo objeto, sino que recorren el cdigo fuente una lnea cada vez. Cada lnea se traduce a cdigo mquina y se ejecuta. Cuando la lnea se lee por segunda vez, como en el caso de los programas en que se reutilizan partes del cdigo, debe compilarse de nuevo. Aunque este proceso es ms lento, es menos susceptible de provocar fallos en la computadora.

El uso de microprocesadores requiere el dominio de los sistemas numricos decimal, hexadecimal y binario. Todo sistema numrico parte del 0 y tiene tantos dgitos como su sistema lo marque. Tomando en cuenta esto, tenemos que el sistema binario empieza con 0 y contiene solo 2 (binario) dgitos por lo tanto el siguiente dgito es 1. el sistema decimal igual empieza de 0 y termina en 9 (sumando as 10 dgitos) y as sucesivamente.

Es importante que considere que "micro" (la maquina) identifica el numero negativo con "bits de estatus" que veremos en el siguiente punto (1.4), y que el smbolo negativo (-) es solo una representacin para el usuario final. 1.4.1 Conceptos de modelo de programacin La arquitectura de un microprocesador o de cualquier procesador de computadora, se define por su conjunto de instrucciones y por el modo en como stas acceden a los datos en memoria para su procesamiento. Las instrucciones que obedece un microprocesador estn codificadas como dgitos binarios en su sistema de memoria. Cada instruccin puede dividirse en uno o ms campos de bits. Todas las instrucciones tienen un campo de cdigo de operacin (COP), que define el propsito de la instruccin. Adems, la instruccin completa puede tener campos para operandos o direcciones de memoria que especifican en donde estn almacenados los datos. Lo anterior delimita el concepto de "formato de instruccin". Las instrucciones por su complejidad pueden ser sencillas o compuestas. Los microprocesadores que ejecutan instrucciones sencillas son los llamados RISC (Reduced Instruction Set Computer), como por ejemplo el PIC16C84 de MicroChip o el propio Sparc de SUN y el PPC604 de Motorola. Por otra parte tenemos a los microprocesadores con instrucciones compuestas, los CISC ( Complex Instruction Set Computer ), como el 6809 de Motorola, SIC/XE y la serie 80X86 de Intel. Existen algunos procesadores hbridos muy eficientes como los famosos K6, K6-II y K6-III de AMD. En este punto se ve de acuerdo al manual de referencia del dispositivo a tratar. Para nuestro curso el microprocesador a ver sera el HC12. El modelo de programacin representa la estructura de manipulacin de datos que soporta el conjunto de instrucciones, usualmente compuesta por: Unidad aritmtica y lgica Los registros de trabajo El registro de condiciones La memoria de datos El modelo de programacin del HC12 se muestra en la grfica siguiente: A D IX IY SP PC B Acumulador A y B 0 doble acumulador D Registro indexado X Registro indexado Y Stack pointer Contador de programa

El CPU tiene 2 registros de propsito general (A,B) que pueden ser concatenados a uno solo de 16 bits (D). Tiene 2 tipos de registros indexados (X,Y), el stack pointer, el contador de programa y los cdigos de condicin de registros . Las instrucciones por su operatividad pueden estudiarse en tres clases. De asignacin y transferencia de datos (LDAA, LEAS, STAA, MOVB, etc. ). De aritmtica y lgica (ABA, ADCA, ADDD, SBA, DEC, ANDA, ... etc.). De control de programa (JSR, JMP, RTS, JSR,... etc. ). Mientras que los registros son clasificados de acuerdo a su funcin: registro de datos registros de segmentos bandera de registro registros indexados Modo de direccionamiento: Por la manera en como las instrucciones acceden a los datos en memoria o en los registros, stas se pueden clasificar en los siguientes direccionamientos (para el HC12): SIMPLES: Inherente, inmediato, directo, extendido, NO SIMPLES: relativo, indexado (diferentes tipos), mltiples, otros. 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. Al usuario que tiene poca experiencia, la variedad de modos de direccionamiento en una computadora le Debe 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. Los modos de direccionamiento de un ordenador son las diferentes formas de transformacin del campo de aperando 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. La especificacin del modo de direccionamiento puede ir en el cdigo de operacin o en el campo de cada operando. La CPU ofrece varios mtodos para calcular direcciones de memoria. Los accesos a memoria se pueden :categorizar como accesos para obtener la siguiente instruccin a ejecutarse, o para obtener algn dato especfico. En cuanto a conseguir la siguiente instruccin por ejecutarse, la CPU utiliza la combinacin de los registros CS e IP, los rales dan la direccin deseada. Antes de entrar en detalles sobre las diferentes modalidades de direccionamiento de la memoria para obtener algn dato especfico, vale la pena aclarar algunos conceptos acerca de lo que es un segmento, as como de la manera que se forma una direccin. Una instruccin es un cdigo binario con un significado ya establecido de antemano. Para no tener que memorizar estos cdigos y facilitar de esta manera la tarea del programador, a cada instruccin se le asigna una abreviatura que d una idea de la accin que realiza. As por ejemplo si se pretende cargar un dato en el acumulador se emplea una instruccin cuyo nemnico es LDA abreviatura de LoaD Accumulator. Pero adems hay que indicar en la instruccin cual es el dato o donde se encuentra el dato con el que hay que operar. As por ejemplo la instruccin LDA (Cargar el acumulador) da lugar a los nueve cdigos de operacin que se indican en la tabla de su manual de referencia, que tienen como denominador comn que todas las instrucciones cargan en el acumulador un dato, pero difieren en la forma de obtener ese dato. Por lo tanto el MODO DE DIRECCIONAMIENTO DETERMINA COMO LA UNIDAD CENTRAL DE PROCESO (CPU) ACCEDE A LAS LOCALIDADES DE MEMORIA PARA OPERAR Los modos de direccionamiento son parte implcita del conjunto de instrucciones del dispositivo. Ver apndices del manual de referencia de dicho micro. Las instrucciones que usan ms de un modo de direccionamiento se vern como modos de direccionamiento mltiple. CADA MODO DE DIRECCIONAMIENTO GENERA UNA DIRECCIN EFECTIVA DE 16 BITS QUE ES USADA DURANTE PORCIN DE REFERENCIA DE LA INSTRUCCIN. LA DIRECCIN EFECTIVA NO REQUIERE EJECUCIN DE CICLOS EXTRA Los micros 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.

Esto permite al usuario 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. Los modos de direccionamiento de un micro 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. 1.4.2 Direccionamientos simples. (Inherente, Inmediato, Directo y Extendido) Inherente: Instrucciones que usan este mtodo de direccionamiento no tienen operando externos (solo el mnemnico o instruccin), o si los tiene son registros, estos son registros internos del cpu. En cualquier caso el cpu no accesa a ninguna localidad de memoria para completar la instruccin. EJEMPLOS: NOP; esta instruccin, no tiene operando INX; esta instruccin tiene operando del CPU Inmediato: El smbolo de (#) es usado para indicar un operando en modo de direccionamiento inmediato. Un error comn de programacin es el omitir accidentalmente el smbolo #. Esto causa que el ensamblador malinterprete la expresin que sigue como una direccin. Es decir: LDA #$55 significa un cargo al acumulador A del valor 55, mientras que LDA $55, que significa que al acumulador A se le carga el valor del contenido de la direccin $0055. Sin el smbolo #, la instruccin cambia. Nota, que el smbolo de "#" es el identificador del modo de direccionamiento aplicado, el siguiente smbolo, si es que lo tiene, identifica el sistema de numeracin. Para el usuario final (el programador en lenguaje ensamblador) las bases de numeracin tienen mucha importancia ya que la seal de salida se puede interpretar de acuerdo al dispositivo utilizado. Directo: Este modo es llamado algunas veces "direccionamiento de PAGINA CERO" porque opera en un rango de $0000 hasta $00FF. En ambos casos la localidad de memoria $0055 (IVE 2 BYTES) es a la que accesa el CPU para poder extraer el dato. El byte ms significativo deber ser 0.

Operacionalmente hablando mientras que en el modo de direccionamiento inmediato el valor del operador modifica el estado del dato (operacin), en el modo de direccionamiento directo, es la bsqueda de una localidad de memoria representada por 1 byte. Extendido: En este modo, los 16 bits de memoria son ocupados, es decir la localidad de memoria accesada en ambos casos es de 0100, o sea 2 bytes.

Este modo de direccionamiento es utilizado exclusivamente por las instrucciones de salto condicional (branch). La direccin de memoria a la que se transfiere el control del programa se obtiene sumando el valor del contador de programa al segundo byte de la instruccin, denominado "offset". Este offset es un nmero en complemento a-2, con lo que se pueden efectuar saltos de hasta 127 posiciones hacia adelante o 128 hacia atrs. Para este modo de direccionamiento es importante utilizar la variable CONLOCT, que es el contador de localidades, por lo tanto para los modos de direccionamiento relativo (8, 9 y 16), se vern ejemplos en el captulo 2.

L.4.4 Direccionamiento Relativo de 16 bits. Este al igual que el anterior corresponde a las instrucciones (mnemnicos) de salto condicional (control de programa), con la diferencia de rango -32k a +32k lo que da 2 bytes completos de desplazamiento.

1.4.5 Direccionamiento Indexado. En este, los registros internos indexados son el segundo operador, lo que hace que: El operando se encuentra en memoria. Registro ndice: se modifica a menudo en la ejecucin del programa Al igual que todos y cada uno de los modos de direccionamiento cada estructura, representa una accin diferente. Para llevar a cabo la traduccin correcta se presenta la siguiente figura, que es una tabla de modos de direccionamiento indexado (formas fuente) Para saber que formula se utilizara, debemos determinar: 1. que la lnea de programa est utilizando modo de direccionamiento indexado 2. la forma fuente del modo de indexado (n,r)

3. formula aplicar, de acuerdo al rango. Se tienen 6 formulas Chequemos por puntos:

El operando se encuentra en memoria. La instruccin contiene una direccin que se emplea para leer en memoria una direccin intermedia que ser la verdadera direccin del objeto buscado ver punto anterior 1.4.7 Otros direccionamientos. 1.4.7.1 Relativo de 9 Este al igual que los anteriores corresponde a las instrucciones (mnemnicos) de salto condicional (control de programa), con la diferencia de rango -/+ 1 byte y con el siguiente formato. Que igual que los relativos anteriores se vern a detalle en el siguiente modulo.

1.4.7.2 Mltiples 2 ENSAMBLADORES Objetivo: Entender y manejar los diferentes esquemas de ensamblado. Disear un ensamblador de dos pasos. 2.1 Relacin Arquitectura de mquinas y ensamblador La evolucin de los sistemas comienza con un ensamblador, se sigue con los CARGADORES que es el modulo 3 para nuestro caso de estudio, MACROPROCESADORES que es el modulo 4, COMPILADORES y SISTEMAS OPERATIVOS. Al inicio de los tiempos, el programador tena que interpretar el fundamento de la instruccin, se escriban una serie de unos y ceros (lenguaje maquina) y se grababan en la memoria del dispositivo, entonces el dispositivo interpretaba como esto como una instruccin. Los programadores encontraban esta tarea (leer o escribir en la memoria) muy lenta, as que se introdujo el concepto de MNEMONICO, que sustituye al conjunto de UNOS y CEROS, y al conjunto de estos mnemnicos LENGUAJE ENSAMBLADOR. La entrada de dicho programa se le llama PROGRAMA FUENTE y a la salida PROGRAMA OBJETO (que es la traduccin de dichas instrucciones a lenguaje maquina. Los ensambladores son programas que procesan los enunciados del programa origen en lenguaje ensamblador y los traducen en archivos en lenguaje mquina que son ejecutados por un microprocesador o un micro controlador, estos permiten que los programas origen se escriban y se editen en una computadora para generar un cdigo ejecutable en otra computadora. El archivo en lenguaje objeto ejecutable resultante se carga(CARGADOR) y se ejecuta en el sistema destino.

Lenguaje ensamblador es el lenguaje simblico que se utiliza para codificar los programas origen que se procesan por el ensamblador es llamado lenguaje ensamblador. Este lenguaje es una coleccin de smbolos mnemnicos que representan: operaciones (mnemnicos de instrucciones para la mquina o de directrices para el ensamblador), nombres simblicos, operadores y smbolos especiales. El lenguaje ensamblador proporciona cdigos de operacin de los mnemnicos para todas las instrucciones de la mquina contenidas en la lista de instrucciones. Los fabricantes de microprocesadores y micro controladores ofrecen una gran variedad de herramientas de soporte para los diseadores, tales programas se incluyen con los sistemas de desarrollo. Los programas almacenados en ROM ofrecen un medio de comunicacin con la PC, los cuales descargan el programa de aplicacin del usuario en memoria RAM, para luego ser interpretado por el micro, la versatilidad, que ofrecen estos sistemas disminuye la posibilidad de error de los diseadores. EL micro recibe las instrucciones de una memoria interna o externa en forma de 1 o 0, a esto se le denomina instruccin de cdigo de mquina, la cual controla las operaciones que realiza el micro. Para el usuario le queda escribir el programa en una serie de instrucciones propias llamados mnemnicos, que describe una instruccin de cdigo de mquina tambin conocido como cdigo operativo. El programa escrito en mnemnicos es ensamblado en un ambiente o software que se ejecuta en una PC. Introduciendo as un listado en cdigo hexadecimal llamado cdigo fuente, que es en realidad el listado de instrucciones de cdigo de mquina o cdigos operativos. El ensamblador es propio del fabricante. Los depuradores son sistemas en los que nos permiten evaluar un programa en tiempo real, es decir, sobre el micro, teniendo interaccin en un ambiente grfico sobre una pe, tambin reciben el nombre de emuladores (hardware y software). Los simuladores son ambientes totalmente de programacin (software) que nos permiten evaluar programas los cuales se pueden visualizar el comportamiento o estado de "acumuladores, registros de memoria del programa, contenido de memoria, etc. Un mnemnico es una instruccin en bajo nivel, el cual est escrito de manera de abreviacin del idioma ingles. Ejemplo: nop (not operation), Idaa (load accumulator a), rola (rotate left accumulator) etc. Una pseudo-instruccion es una instruccin al ensamblador (no al micro), por lo tanto esta no tiene cdigo objeto (hexadecimal) algunas de las pseudo-instrucciones ms usadas son: equ, org, end, etc. Un ensamblador es un programa que traduce las instrucciones a lenguaje maquina, estos deben ser escritos conforme a las especificaciones del ensamblador. Un programa consiste en declaraciones (llamadas linea cdigo) linea por linea. Su sintaxis es la siguiente: nombre del campo, operacin del campo, operando del campo, sintaxis del campo, ejemplo: Campo de Etiquetas: Una etiqueta puede aparecer por si sola en una lnea. El ensamblador interpreta esto como "establece el valor de la etiqueta igual al valor actual del contador de programa ( PC )". El campo de etiquetas aparece como el primer campo dentro de un enunciado origen. El campo de etiquetas puede adoptar cualquiera de las siguientes formas: o Un asterisco ( * ) como el primer carcter en el campo de etiquetas indica que el resto del enunciado origen es un comentario. Los comentarios son ignorados por el ensamblador e

impresos en el listado origen solamente como informacin de programacin, o Un espacio de carcter en blanco (TAB o espacio) como primer carcter indica que el campo de etiquetas se encuentra vaco. La lnea no tiene una etiqueta y no es un comentario, o Un smbolo como primer carcter indica que la lnea tiene etiqueta. Estos smbolos son las letras maysculas y minsculas ( a - z ), los dgitos ( 0 - 9 ) y caracteres especiales como punto (.), signo de pesos ( $ ) y subrayado (). Estos smbolos consisten de uno a quince caracteres, el primero de los cuales debe ser alfabtico o un carcter especial punto o subrayado. Todos los caracteres son significantes y las maysculas y minsculas son distintas. Etc. Campo de Operaciones: El campo de operaciones aparece despus del campo de etiquetas y debe de estar precedido por al menos un espacio en blanco. o El campo de operaciones debe de contener el mnemnico de un cdigo de operacin legal o una directriz del ensamblador. o En este campo, los caracteres en maysculas son convertidos en minsculas antes de ser revisados como un mnemnico legal, o Debido a esto " nop "," NOP " y " NoP 11 son reconocidos como el mismo mnemnico. o Los smbolos que aparecen en este campo pueden ser de uno de dos tipos. Cdigo de Operacin: Estos smbolos corresponden directamente a instrucciones de mquina. El cdigo de operacin incluye a cualquier nombre e registro asociado con la instruccin. o Estos nombres de registros no deben de estar separados del cdigo de operacin por ningn espacio en blanco. o De esta forma, " clra " significa " limpia (poner en ceros) el acumulador ( A ) ", pero 11 Ir a " significa " limpia la localidad de memoria identificada por la etiqueta a ". Directiva / Pseudoinstruccion: Estos son cdigos de operacin especiales conocidos por el ensamblador, los cuales ms bien controlan el proceso de ensamblado en vez de ser traducidos a instrucciones mquina. Campo de Operandos: La interpretacin del campo de operandos depende del contenido del campo de operaciones. o El campo de operandos, si se requiere, debe de seguir al campo de operaciones y debe de estar precedido por al menos un espacio en blanco. o El campo de operandos puede contener un smbolo, una expresin o una combinacin de smbolos y expresiones separados por comas, o El campo de operandos de una instruccin mquina es utilizada para especificar el modo de direccionamiento de la instruccin, as como el operando de la instruccin, o La siguiente tabla resume los diferentes formatos del campo de operandos para la familia HC11. Smbolos: Cada smbolo se encuentra asociado con un valor entero de 16 bits, el cual es utilizado en lugar del smbolo durante la evaluacin de la expresin. o El asterisco (*) utilizado en una expresin como smbolo representa el valor actual del contador de localidades (el primer byte de una instruccin de varios bytes ). Constantes: Las constantes representan cantidades de informacin que no varan en su valor durante la ejecucin del programa.

o Las constantes pueden ser presentadas al ensamblador en uno de cinco posibles formatos: decimal, hexadecimal, binario, octal o ASCII, o El programador le indica al ensamblador el formato del nmero con los siguientes prefijos:

Las constantes sin prefijo son interpretadas como decimal. o El ensamblador convierte todas las constantes a cdigo mquina binario y son desplegadas en el listado del ensamblado como valores hexadecimales. Campo de Comentarios : El ltimo campo de un enunciado origen del ensamblador es el campo de comentarios. o Este campo es opcional y solamente es impreso en el listado origen con propsitos de documentacin. o El campo de comentarios es separado del campo de los operandos (o del campo de operaciones sino se requiere operando) por al menos un espacio en blanco, o El campo de comentarios puede contener cualquier carcter imprimible ASCII. Esto se cumple dependiendo del mnemnico y del direccionamiento (como se muestra en los ejemplos de arriba). Una vez que hemos visto la evolucin de los lenguajes, cabe preguntarse: En estos tiempos "modernos", quiero el Lenguaje Ensamblador? , he aqu algunas ventajas y desventajas Ventajas: velocidad: El proceso de traduccin que realizan los intrpretes, implica un proceso de cmputo adicional al que el programador quiere realizar. Por ello, nos encontraremos con que un intrprete es siempre ms lento que realizar la misma accin en Lenguaje Ensamblador, simplemente porque tiene el costo adicional de estar traduciendo el programa, cada vez que lo ejecutamos. De ah nacieron los compiladores, que son mucho ms rpidos que los intrpretes, pues hacen la traduccin una vez y dejan el cdigo objeto, que ya es Lenguaje de D mquina, y se puede ejecutar muy rpidamente. Aunque el proceso de traduccin es ms complejo y costoso que el de ensamblar un programa, normalmente podemos despreciarlo, contra las ventajas de codificar el programa ms rpidamente. Sin embargo, la mayor parte de las veces, el cdigo generado por un compilador es menos eficiente que el cdigo equivalente que un programador escribira. La razn es que el compilador no tiene tanta inteligencia, y requiere ser capaz de crear cdigo genrico, que sirva tanto para un programa como para otro; en cambio, un programador humano puede aprovechar las caractersticas especficas del problema, reduciendo la generalidad pero al mismo tiempo, no desperdicia ninguna instruccin, no hace ningn proceso que no sea necesario.

Eficiencia en el tamao: Por las mismas razones que vimos en el aspecto de velocidad, los compiladores e intrpretes generan ms cdigo mquina del necesario; por ello, el programa ejecutable crece. As, cuando es importante reducir el tamao del ejecutable, mejorando el uso de la memoria y teniendo tambin beneficios en velocidad, puede convenir usar el lenguaje Ensamblador. Entre los programas que es crtico el uso mnimo de memoria, tenemos a los virus y manejadores de dispositivos (drivers). Muchos de ellos, por supuesto, estn escritos en lenguaje Ensamblador. Flexibilidad: Las razones anteriores son cuestin de grado: podemos hacer las cosas en otro lenguaje, pero queremos hacerlas ms eficientemente. Pero todos los lenguajes de alto nivel tienen limitantes en el control; al hacer abstracciones, limitan su propia capacidad. Es decir, existen tareas que la mquina puede hacer, pero que un lenguaje de alto nivel no permite. Por ejemplo, en Visual Basic no es posible cambiar la resolucin del monitor a medio programa; es una limitante, impuesta por la abstraccin del GUI windows. En cambio, en ensablador es sumamente sencillo, pues tenemos el acceso directo al hardware del monitor. Desventajas: Tiempo de programacin: Al ser de bajo nivel, el Lenguaje Ensamblador 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. Por todo esto, es ms lento el desarrollo de programas comparables en Lenguaje Ensamblador que en un lenguaje de alto nivel, pues el programador goza de una menor abstraccin. Programas fuentes grandes: Por las mismas razones que aumenta el tiempo, 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: Tenemos la ventaja de que todo lo que se puede hacer en la mquina, se puede hacer con el Lenguaje Ensamblador (flexibilidad). El problema es que todo error que podamos cometer, o todo riesgo que podamos tener, podemos tenerlo tambin en este Lenguaje. En ciertos casos extremos, puede llegarse a sobrescribir informacin del CMOS de la mquina. Falta de portabilidad:

Como ya se mencion, existe un lenguaje ensamblador para cada mquina; 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. Si bien esto es un problema general a todos los lenguajes, es mucho ms notorio en ensamblador: yo puedo reutilizar un 90% o ms del cdigo que desarrollo en "C", en una PC, al llevarlo a una RS/6000 con UNIX, y lo mismo si despus lo llevo a una Macintosh, siempre y cuando est bien hecho y siga los estndares de "C", y los principios de la programacin estructurada. En cambio, si escribimos el programa en Ensamblador de la PC, por bien que lo desarrollemos y muchos estndares que sigamos, tendremos prcticamente que reescribir el 100 % del cdigo al llevarlo a UNIX, y otra vez lo mismo al llevarlo a Mac. 2.1.1 Caractersticas Dependientes de la Maquina. El ensamblador de dos pasos puede ser muy eficiente para la administracin de la memoria que ocupa durante su ejecucin, pues e! primero y segundo paso no tiene necesidad de estar cargados en memoria al mismo tiempo pues : las tareas respectivas en lo fundamental son distintas. Cuyas caractersticas son las siguientes: Dependientes de la mquina Independientes de la mquina Son caractersticas dependientes del procesador, desde luego el conjunto de instrucciones, los modos de direccionamiento, la generacin de cdigo y sin faltar la interfaz con la plataforma en la cual corre el ensamblador, un aspecto importante que no se nos debe pasar por alto, es que los ensambladores pueden tener una clasificacin en virtud de su generacin de cdigo. COP: cdigo de operacin, pues si bien el cdigo 8605 significa para el HC12 cargar al Acumulador A un 5, para el HC08 de la misma familia de Motorola es otra cosa muy diferente (el cdigo correspondiente para dicha accin es 9605 MODO DE DIRECCIONAMIENTO: son aplicables a los micros. aunque existen "E" modos de direccionamientos, no todos

MNEMONICO: las instrucciones aunque en concepto podran ser las mismas, se enuncian de diferente manera, es decir:

REGISTROS INTERNOS: como parte de la arquitectura de cada micro y as podramos seguir enumerando encontrando las caractersticas que hacen exclusivo al micro. 2.1.2 Caractersticas Independientes de la maquina.

Las caractersticas independientes de la mquina son aquellas relacionadas ms bien con el tipo de implementacin del programa y sus estructuras de datos que con la mquina objeto. DIRECTIVAS: tambin existen las llamadas DIRECTIVAS o PSEUDOINSTRUCCIONES, las cuales especifican acciones auxiliares que se llevan a cabo por el ensamblador. PERIFRICOS: todo dispositivo que ser controlado por el micro ARCHIVOS AUXILIARES: *.LST, *.OBJ, *.S19, *.TABSIM, etc., dependiendo del algoritmo con que se trabaje.... De igual manera podramos seguir numerando caractersticas globales para los micros 2.2 Modalidades de ensamblado Al considerar que un segmento es un rea especial en un programa que inicia en un lmite de un prrafo, esto es, en una localidad de regularmente divisible entre 16, o 10 hexadecimal. Aunque un segmento puede estar ubicado casi en cualquier lugar de la memoria y, en modo real, puede ser hasta de 64K, solo necesita tanto espacio como el programa requiera para su ejecucin. Un segmento en modo real puede ser de hasta 64K. Se puede tener cualquier nmero de segmentos; para direccionar un segmento en particular basta cambiar la direccin en el registro del segmento apropiado. Los tres segmentos principales son los segmentos de cdigo, de datos y de la pila. Segmento de cdigo: El segmento de cdigo (CS) contiene las instrucciones de mquina que son ejecutadas por lo comn la primera instruccin ejecutable esta 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 64K, su programa puede necesitar definir ms de un segmento de cdigo. Segmento de datos: El segmento de datos (DS) contiene datos, constantes y reas de trabajo definidos por el programa. El registro DS direcciona el segmento de datos. Si su rea de datos requiere ms de 64K, su programa puede necesitar definir ms de un segmento de datos. Segmento de pila: En trminos sencillos, la pila contiene los datos y direcciones que usted necesita guardar temporalmente o para uso de sus "llamadas" subrutinas. El registro de segmento de la pila (SS) direcciona el segmento de la pila. Limites de los segmentos:

Los registros de segmentos contienen la direccin inicial de cada segmento. La siguiente figura presenta un esquema de los registros CS, DS y SS; los registros y segmentos no necesariamente estn en el orden mostrado. Otros registros de segmentos son el ES (segmento extra) y, en los procesadores 80386 y posteriores, los registros FS y GS, que contienen usos especializados. Un segmento inicia en un lmite de prrafo, que es una direccin por lo comn divisible entre el 16 decimal o 10 hexadecimal. Ejemplo: un segmento de datos inicia en la localidad de memoria 045F0H. Ya que en este y todos los dems casos el ultimo dgito hexadecimal de la derecha es cero, los diseadores de computadora 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 sobrentendido. En donde sea apropiado, el texto indica al cero de la derecha con corchetes, como 045F [0]. Desplazamiento: 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 65, 535. Para referir cualquier direccin de memoria en un segmento, el procesador combina la direccin del segmento en un registro de segmento con un valor de desplazamiento. En el ejemplo siguiente, el registro DS contiene la direccin de segmento del segmento de datos en 045F[0]H y una instruccin hace referencia a una localidad con un desplazamiento de 0032H bytes dentro del segmento de datos. Por lo tanto, la localidad real de memoria del byte referido por la instruccin es 04622H; Direccin del segmento DS: 045F0H Desplazamiento: +0032H Direccin real: 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. Como hemos visto un ensamblador es un programa de sistema que acepta un programa de lenguaje simblico (texto usualmente) y produce un lenguaje de cdigo objeto o de lenguaje mquina. El programa de entrada es llamado programa fuente y est guardado comnmente en un archivo de texto; la salida es la traduccin del "fuente" en un archivo de cdigo objeto, que puede ser ejecutable por el microprocesador. El ensamblador puede generar cdigo objeto en un slo paso o en varios. La principal limitacin del ensamblador de un paso es que no puede resolver referencias delanteras ( por ejemplo ... saltos hacia adelante con referencias simblicas ). Por ese motivo en el presente curso se prefiere implementar un ensamblador de dos pasos, pues pueden resolverse referencias adelantadas... adems de un mejor manejo de los smbolos.

En definitiva, el ensamblador empleado depender de que en las instrucciones se emplee uno o varios operando, de que existan uno o varios tipos de direccionamiento, etc. La potencia de un ensamblador se mide por las pseudo instrucciones que contenga. Aunque todos los ensambladores realizan bsicamente las mismas tareas, podemos clasificarlos de acuerdo a caractersticas. Ensambladores bsicos: Son de muy bajo nivel, y su tarea consiste bsicamente en ofrecer nombres simblicos a las distintas instrucciones, parmetros y cosas tales como los modos de direccionamiento. Adems, reconoce una serie de directivas (o meta instrucciones) que indican ciertos parmetros de funcionamiento del ensamblador. Ensambladores modulares, o macro ensambladores. Descendientes de los ensambladores bsicos, fueron muy populares en las dcadas de los 50 y los 60, antes de la generalizacin de los lenguajes de alto nivel. Hacen todo lo que puede hacer un ensamblador, y adems proporcionan una serie de directivas para definir e invocar macroinstrucciones (o simplemente, macros). Ensambladores modulares 32-bits o de alto nivel. Son ensambladores que aparecieron como respuesta a una nueva arquitectura de procesadores de 32 bits, muchos de ellos teniendo compatibilidad hacia atrs pudiendo trabajar con programas con estructuras de 16 bits. Adems de realizar la misma tarea que los anteriores, permitiendo tambin el uso de macros, permiten utilizar estructuras de programacin ms complejas propias de los lenguajes de alto nivel. 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. 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 este microprograma se llama microensamblador. Existen procesadores que permiten la modificacin de sus microprogramas, para lo cual se utilizan microensambladores. 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 las posibilidades de definicin y manipulacin de las macroinstrucciones, pero normalmente son programas bastantes complejos, por lo que suelen ser ensambladores residentes. 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. 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 de no resolver referencias adelantadas. 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. La tabla de smbolos es un conjunto de pares ordenados ( Si , Ti ) en los que el primer elemento Si es un smbolo y el segundo Ti el valor asociado, es decir la traduccin correspondiente. Se puede considerar una tabla de smbolos posibles, en un conjunto T , de los cdigos de operacin y direcciones binarias. En general, en las tablas de smbolos llevan un nmero fijo de caracteres, que se completan con espacios en blanco si es necesario. Como es natural, las tcnicas de construccin y consultas de tablas tienen que ser diferentes en cada caso. 2.3 Tcnicas de ensamblado Como se vio en la seccin anterior, existen ensambladores que realizan su tarea en una o ms fases o pasos. El proceso de ensamble de un paso consiste en leer una lnea de programa fuente y traducirla a lenguaje mquina cuando se trata de una instruccin, o se ejecuta si es una pseudoinstruccin (directiva). La tabla de smbolos se va construyendo a medida que se avanza en la lectura de las lneas del programa fuente. Para que el ensamble de un paso funciones, todos los smbolos deben estar definidos antes de emplearse. Esto debido a que, para traducir correctamente cada instruccin, se debe conocer la direccin de cada uno de los smbolos que intervienen en ella. En otras palabras, no pueden quedar referencias pendientes porque ya no habr otra oportunidad de resolverlas. Tampoco podrn hacerse saltos hacia lneas posteriores. No es posible saltar hacia una lnea cuya etiqueta todava no ha sido definida. Para resolver el problema que presenta el proceso de ensamble de un paso, se utiliza el proceso de ensamble de dos pasos o fases. En la primera fase, se lee el programa fuente y se construye la tabla de smbolos. En la segunda fase, se vuelve a leer el programa fuente y se traduce totalmente ya que se conoce la totalidad de los smbolos utilizados (incluyendo las etiquetas) y las posiciones de memoria que se les han asignado. Como ya se conocen las direcciones de las etiquetas utilizadas, pueden realizarse saltos hacia adelante. Se pueden hacer varios tipos de ensambladores, con las anteriores caractersticas bsicas, segn el tipo de mquina y de la potencia del lenguaje ensamblador deseado. En definitiva, el ensamblador empleado depender de que en las instrucciones se emplee uno o varios operandos, de que

existan uno o varios tipos de direccionamiento, etc. La potencia de un ensamblador se mide por las pseudo instrucciones que contenga. Aunque todos los ensambladores realizan bsicamente las mismas tareas, podemos clasificarlos de acuerdo a sus caractersticas. Los lenguajes de alto nivel fueron diseados para eliminar las particularidades de una computadora especfica, mientras que un lenguaje ensamblador est diseado para una computadora especfica, o, de manera ms correcta, para una familia especifica de microprocesadores. Para el aprendizaje de lenguaje ensamblador no es necesario conocimiento previo de un lenguaje de programacin, aunque tenerlo puede ayudarle a comprender algunos conceptos de programacin ms rpido, no es necesario conocimiento previo de electrnica o circuitera. Empecemos a dar una descripcin general de las funciones de los 2 pasos del ensamblador simple propuesto. 2,3.1 Ensamblador de un paso. La evolucin de la programacin ha ido variando la estructura de los ensambladores hacindolos cada vez ms complejos. Los ms sencillos son los llamados en ingls load-and-go, que se puede traducir por ensambladores sobre la marcha, ya que aceptan un programa en forma simblica; y en cuanto entra, lo ensambla en binario en la memoria, generalmente, mediante una exploracin (sean) del programa fuente. En este caso se obtienen los ensambladores de un paso. Los ensambladores de un paso pueden ser de dos tipos diferentes, segn que la salida generada est en binario o en simblico-binario. Los ensambladores que generan una salida en binario, llamados en la ingles de tipo load and go, suelen ser utilizados para programas pequeos (que son frecuentemente modificados) o para mquinas pequeas sin memorias auxiliares, en los cuales el hecho de leer dos veces el programa por cinta de papel o por mquina de escribir supondra una gran prdida de tiempo. El principal problema de estos ensambladores es la necesidad de usar los smbolos antes de definirlos. Se utiliza, por ello, una tcnica parecida a la del editor de encadenamiento: Si a un smbolo se le menciona, pero no est definido, se le introduce en una tabla que almacena todas las presencias del smbolo. En el momento en que se define, se vuelve atrs y se rellenan todas las referencias con el valor correspondiente. El resto de la tcnica es anloga a la de los ensambladores de dos pasos. En los ensambladores que producen una salida simblico-binaria, suele requerirle que todos los nombres de datos se definan en cabeza, por lo que slo queda el problema de smbolos no definidos para las instrucciones de bifurcacin. El resto es anlogo a los del tipo load and go, aunque la salida no es procesable directamente, sino que necesita un cargador. La mayor dificultad de este tipo de ensambladores aparece cuando hay operandos cuyos smbolos son expresiones aritmticas, en las que todava no se han definido sus smbolos constituyentes. En las

bifurcaciones hacia adelante debe dejar una indicacin de que el cargador ha de completar estas instrucciones. Se crea una tabla de referencia hacia adelante. 2.3.2 Ensamblador de dos o ms pasos. Las ventajas de dividir un programa en subprogramas son grandes. A parte de poder trabajar con unidades independientes, cuando hay que cambiar o corregir un programa basta con reprogramar y ensamblar de nuevo los subprogramas o rutinas afectados por el cambio. Este mtodo aumenta la eficacia del ensamblador, ya que el tiempo de proceso de las referencias cruzadas o parmetros de ensamblaje es prcticamente proporcional al cuadrado del nmero de instrucciones del programa; por consiguiente, al dividir el programa en partes, se consigue una reduccin Importante en el tiempo de ensamblaje. A los ensambladores que pueden realizar la incorporacin automtica de subrutinas de bibliotecas y el enlazamiento de las diversas partes de un programa se les denomina ensambladores de rutinas o de subprogramas. Este tipo de ensambladores suele trabajar en dos pasos, es decir, haciendo dos exploraciones del programa fuente: En el primer paso, construyen la tabla de smbolos y acumulan todas las definiciones de smbolos que se encuentran en la rutina para efectuar la traduccin en el segundo paso. Las rutinas ensambladas se suelen almacenar en un medio externo (cinta magntica, discos, tarjetas, etc.). 2.3.2.1 Primer paso (crear tabla de smbolos) Durante el primer paso, la principal tarea del ensamblador es extraer del programa fuente todas las definiciones de smbolos y crear las correspondientes tablas. Para ello, como ya se ha visto, procede a analizar las cadenas de entrada para convertirlas en un conjunto de campos y buscarlos o aadirlos a la tabla correspondiente. En esta fase se suele efectuar un anlisis sintctico de las sentencias del programa fuente, con el fin de poder detectar posibles errores. Este anlisis lo realiza una subrutina cuya estructura es muy variable, puesto que las sentencias de entrada, que dependen del lenguaje de que se trate, tienen muy diversas estructuras: formato y longitud fijos, formato variable y longitud fija o formato y longitud variable, aparte de que el nmero de operandos y expresiones permitidas varan desde un mnimo de dos campos a cuatro o cinco por trmino medio. Algoritmo para el primer paso: En el caso de la pseudo-instruccin se bifurca a la subrutina correspondiente para efectuar las acciones de control que sean adecuadas a cada caso; en particular, cuando se detecta la de fin de programa, el efecto es inicializar la rutina de post-anlisis, completar las tablas de smbolos y dar paso a la segunda fase. La definicin de los smbolos depende del tipo de instruccin en la que aparezcan. La ms sencilla se manifiesta cuando se define por una etiqueta, pues automticamente el contador de direcciones refleja la direccin relativa del smbolo. En las tablas se almacena el smbolo, el valor si se puede determinar en ese momento- y un identificador de tipo del smbolo cuya utilidad se comprender a estudiar el fin del paso 1.

El primer paso de un ensamblador tiene por misin principal la del anlisis de las sentencias o instrucciones. Un esquema de las etapas del primer paso es el siguiente:

S Leer sentencia o instruccin. Analizar sentencia o instruccin. S Tratamiento de etiquetas. S Buscar en tabla de smbolos (si no est, pasar al siguiente paso). S Insertar en tabla de smbolos. S Tratamiento de cdigo de operacin. S Buscar en tabla de cdigo de operacin y actualizar campo de direccin. S Escribir cdigo de operacin. S Buscar en tabla de pseudo- instrucciones y hacer el tratamiento de la pseudo-instruccin. S Anlisis del operando (en caso de la creacin de un cdigo intermedio). S Almacenar en tabla de smbolos. S Buscar en tabla de smbolos. S Sustituir por direccin en tabla de smbolos. Al finalizar el paso uno, entra en juego una subrutina post analizadora que, segn el tipo de indicador asociado e cada smbolo en las tablas, completa los valores. As, si este indicador era de definicin por etiqueta, respeta el .valor almacenado; si era definicin por pseudo-instruccin, evala las correspondientes cadenas de equivalencia; o si era de indefinicin, le da una direccin que haya quedado libre de acuerdo con la estrategia del ensamblador, siempre que no se trate de una variable externa. En resumen el primer paso se asignan direcciones a todas las proposiciones del programa, se guardan los valores direcciones) asignados a todas las etiquetas para usarse en el paso 2 y se realizan algn procesamiento de las instrucciones para el ensamblador. (Esto incluye el procesamiento que-afecta a la asignacin de direcciones, como la determinacin de la longitud de las reas de datos definidas por BYTE, RESP , etc.) 2,3.2.2 Segundo paso (formato de salida) 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. El objetivo de este paso es obtener una visin semi-compilada (simblica-binaria del programa o rutina que se est ensamblando), adems de las tablas de uso para el cargador y la informacin necesaria para la localizacin de as variables. Para ello vuelve a leer el programa fuente, bien de un medio exterior (cinta de papel, tarjetas) o, lo ms usual, de una cinta o disco magntico. Al leer una instruccin, ignora la etiqueta que ya fue completamente procesada en el primer paso. El cdigo de operacin es traducido de acuerdo con la tabla correspondiente o se genera la bifurcacin a la subrutina correspondiente, s se trataba de un cdigo de pseudo-instruccin. Determina si las cantidades y direcciones se encuentran en modo absoluto, localizable o todava indeterminada (variables externas), efectuando los clculos o evaluaciones necesarios y generando los valores binarios correspondientes, con indicacin para la posterior localizacin si fuese necesaria. La salida de esta fase y, por consiguiente, del ensamblaje depende del editor de encadenamiento, aunque un formato tpico es el siguiente: S Nombre de la rutina, subprograma o programa. S Seccin binaria con el programa en forma semicompilada y con la informacin necesaria para la localizacin. S Tabla de definicin, con los smbolos globales definidos en la rutina. S Tabla de uso, que detalla el uso de los smbolos globales. Esta ltima tabla es muy compleja, puesto que registra todas las apariciones de los smbolos externos, al depender de las posibilidades del ensamblador correspondiente. Si se permite la multiplicacin de estos smbolos globales, hay que generar tambin una tabla de uso para el producto. Las tablas de uso son necesarias para la fase siguiente del encadenamiento de las diversas rutinas. En el caso ms sencillo -que es cuando se canalizan todas las variables globales a travs de un rea comn se almacena en la tabla, para cada smbolo, el lugar o lugares de la rutina en que ha sido usada. Cuando el valor del smbolo es determinado, el editor de encadenamiento puede colocarlo en sus lugares correctos. Al acabar el ensamblaje -o simultneamente a l en otros casos- se produce un listado con el programa fuente, incluidos: Los comentarios, el programa objeto, las tablas de smbolos con sus valores y los errores detectados con sus diagnsticos. El formato y caractersticas particulares de este listado dependen del lenguaje utilizado. SEGUNDO PASO

V Lectura del programa de memoria secundaria. S Tratamiento de sentencias o instrucciones. En el primer paso slo se analizaban las sentencias para ver si eran correctas. Tratamiento del cdigo de operacin (SEGUNDO PASO). En el primer paso el cdigo de operacin se trataba Simplemente para ver si era correcto o no. S Buscaren tabla de cdigo de operacin. Obtener cdigo de mquina y su longitud. S Actualizar contador de direcciones. S Buscar tabla de pseudo-instruccin (si es smbolo). Tratar la pseudoinstruccin. S Tratamiento del operando. S Buscaren tabla de smbolo (si es smbolo). Obtener la direccin. S Obtener valor (si no es smbolo se obtiene la direccin directamente). S Escribir cdigo objeto 2.4 Gestin de memoria en el ensamblador La gestin de memoria se refiere a como un ensamblador puede manejar los ficheros objeto obtenidos del archivo fuente hacia la maquina que habr de ejecutarlo, ya sea que el procesador al que controla pertenezca al mismo equipo en donde fue diseado (ensamblador nativo) o que maneje la memoria del procesador de algn otro equipo (ensamblador cruzado). Un proceso necesita memoria para ejecutar programas o Cdigo del programa o Datos estticos y dinmicos El Gestor de Memoria pretende optimizar el uso de la o memoria principal disponible o Sistema operativo residente o Memoria principal disponible para ejecutar procesos El rendimiento global del sistema mejora si se pueden ejecutar varios procesos concurrentemente. El mtodo a utilizar depende principalmente del hardware disponible. ENSAMBLADORES NATIVOS O RESIDENTES El ensamblador residente se ejecuta sobre una maquina que contiene el mismo procesador que el destinatario de! cdigo ensamblado. Un ensamblador residente ofrece al programador la ventaja de utilizar una nica mquina para crear, probar, y depurar cdigo, los ensambladores residentes

sobre los primeros microprocesadores fueron algo lentos y restrictivos en caractersticas debido al alto costo de memoria y la lentitud del microprocesador, con la disponibilidad de memoria de bajo costo(y consecuentemente grandes memorias disponibles en la mayor parte de los sistemas) y la posibilidad del procesador de direccionar directamente grandes cantidades de memoria, as como de realizar funciones ms rpidas, los ensambladores residentes proporcionan ahora una variedad de caractersticas y velocidad de ensamblaje que anteriormente solo se encontraban en ensambladores cruzados sobre grandes computadores y microcomputadores. En el Ensamblador Nativo, como otros ensambladores, permite que el resto del ensamblador reparta solamente en instrucciones de mquina simblicas (en nuestro caso, son ms como "instrucciones de mquina procesales"). Las mnemnicas elegidas estn cerca de las mnemnicas estndares de SPARC; la nica diferencia es que los procedimientos del ensamblador requieren la especificacin de si el segundo operando sea un registro o un inmediato. Las optimizaciones adems de crear el cdigo automtico para las instrucciones y de resolver blancos de la rama y otras expresiones, el ensamblador nativo realiza una cantidad limitada de optimizacin. Actualmente, llena el rama retrasa ranuras usando un algoritmo simple: si la blanco del rama es una instruccin que puede entrar en retrasa la ranura, despus inserta la instruccin de la blanco en retrasa la ranura e incremente el rama compensado por 4.Uno ms sofisticado retrasa algoritmo que llena de la ranura es deseable, porque el algoritmo antedicho no disminuye tamao de cdigo -- solamente hace un rama tomado levemente ms rpido. Un algoritmo mejor trabajara por lo menos en bloques bsicos e intentara mover instrucciones a travs de ramas, en la ranura que sigue la rama, siempre que sea posible. No sera duro poner esto en ejecucin eficientemente. El ensamblador nativo podra tambin realizar la instruccin programar, pero eso es poco probable pagar apagado mucho hasta que conseguimos librados de la mayora del tipo dinmico cheques. ENSAMBLADORES CRUZADOS Un ensamblador cruzado es el polo opuesto del ensamblador nativo. El ensamblador cruzado es aquel que se ejecuta sobre un computador con un procesador diferente de aquel para el que se ensambla el cdigo. -OS ensambladores cruzados permiten a un programador desarrollar programas para diferentes sistemas sobre un computador. Sin embargo, excepto en el caso de minicomputadores y grandes computadores que pueden ofrecer un simulador de microprocesador destinatario real, no se puede normalmente probar y depurar el cdigo creado por un ensamblador cruzado sin ejecutarse sobre una maquina real que utilice este procesador. En cualquier caso, siempre se debe utilizar la sintaxis correcta, esto es, cdigos OP, operandos, y as sucesivamente, para el microprocesador para el que el ensamblador cruzado est diseado. De hecho, la cosa ms interesante sobre los Ensambladores cruzados son los motivos para de su existencia, entre las principales se encuentran: *Los primeros miniordenadores eran lentos y tenan dispositivos an ms lentos. Esto tuvo sentido al ensamblar un programa sobre una unidad central, donde tanto el redactor como el

ensamblador cruzado podran usar cintas magnticas o discos, y luego transferir el archivo objeto, sobre la cinta de papel, al miniordenador para la ejecucin. *Algunos de aquellos primeros miniordenadores fueron diseados para pequeos programas de uso. Ellos tenan pequeas memorias o conjuntos de instruccin limitados que hicieron poco prctico para controlar un ensamblador. Para tales ordenadores, CA era una solucin prctica. Los problemas principales en la puesta en prctica del Ensamblador Cruzado son: Si el ensamblador cruzado es de un paso, no puede cargar el programa objeto directamente en la memoria del ordenador objetivo. Esto tiene que cargarlo en la memoria del ordenador de la fuente, resolver todas las referencias avanzadas, y generar un archivo objeto absoluto. El archivo objeto tarde o temprano es descargado al ordenador objetivo. la diferencia en el tamao de palabra entre los ordenadores de la fuente y objetivo presenta un problema ya que Ensamblador cruzado tiene que generar instrucciones y constantes para el ordenador objetivo, pero esto slo puede usar instalaciones disponibles sobre el ordenador de la fuente. El resultado puede ser un empleo extenso de instrucciones que manipulando bits para funcionar sobre las partes de palabras. El ensamblador cruzado carece de la ayuda para las instrucciones del coprocesador de matemticas, las constantes de la secuencia, y las macros. Se apoyan los directorios siguientes del ensamblador: END, ORG, EQU, SET, REG, DC. (constante definida), BCD (bloque constante definido), y DS (almacenaje definido). META ENSAMBLADOR Tambin conocido como ensamblador universal, es un ensamblador que puede ensamblar cdigo de un Diferente nmero de computadoras. Un ensamblador convencional que solo puede manejar cdigo fuente y objeto de una computadora, est tcnica a la misma computadora. En contraste, un meta ensamblador trabajando en una computadora "K" quizs sera capaz Te ensamblar cdigo Te las computadoras "K","L","M" Y algunas ms. Por esto, un meta ensamblador es por lo tanto, un ensamblador cruzado. Hay dos tipos de meta ensamblador: Restringido este solo puede ensamblar cdigo de un nmero limitado de computadores, normalmente los miembros De una familia de computadoras. La informacin sobre conjunto de instrucciones es construirla en el meta ensamblador y entonces slo falta darle el nombre De un ordenador, seguido por el archivo De origen. General en principio, manejar cdigo de cada computadora. Esto no tiene ninguna instruccin, y tiene que ser entregado, con cada archivo De origen, una descripcin completa De instrucciones De objeto y la fuente. Y hay dos maneras de disear un meta ensamblador:

Generativo (puede ser restringido o general) se le Da el nombre De cualquier ordenador De una descripcin de un conjunto de instrucciones, y genera un ensamblador dedicado. Este ensamblador es controlado normalmente, traduciendo archivos De origen en los archivos De objeto. Adaptable Si sigue una generacin restringida un meta ensamblador se forma De varios ensambladores su nico trabajo es decidir cual ensamblador se necesita y generar una copia de el. Un ensamblador general adaptarlo, es un programa general, disponible para adaptarse en sus salidas para diferentes situaciones, y es potencialmente til. El principal problema en usarlo como un meta ensamblador es disear la entrada. La entrada debera incluir una descripcin del conjunto de instrucciones de la computadora objetivo, pero no debera ser tan largo ni muy complejo. Una caracterstica interesante de meta ensambladores, es que ellos pueden ensamblar programas para muchas computadoras pero los programas fuentes deben conformarse con la sintaxis de los meta ensambladores. En otras palabras, en uno puede tomar simplemente un programa escrito en un ensamblador existente y ensamblarlo en un meta ensamblador sin hacerle cambios. El meta ensamblador Y puede ensamblar programas para una computadora X (y otras computadoras). Un programa fuente que corre en X puede no ser vlido para Y, desde que Y puede requerir la fuente para estar en un formato correcto y para contener comandos especiales. 2.4.1 Jerarqua de memorias Recordando el ciclo maquina 1. Se busca la instruccin en memoria principal 2. Se decodifica la instruccin y se buscan en memoria los operandos 3. Se ejecuta la instruccin 4. Se almacena el resultado en memoria principal cdigo absoluto la asignacin no se puede cambiar nunca Ejemplo: programas .COM en MS-DOS asignacin de direcciones en tiempo de carga cdigo generado por el montador o el cargador la asignacin se hace en el momento de lanzar el programa cdigo reubicable

CPU 2.4.4 Asignacin de direccin en tiempo de ejecucin - el cdigo no tiene direcciones definitivas incluso despus de la carga la asignacin se resuelve en cada acceso a memoria permite mover el programa durante la ejecucin necesita hardware especial 2.4.5 Espacios de memoria lgicos y fsicos Direccin lgica o La generada por la CPU durante la ejecucin del programa Llamada tambin direccin virtual

Direccin fsica o La usada realmente en el Registro de Direcciones de Memoria

Carga dinmica Se trata de no perder tiempo cargando cdigo que luego no se ejecuta Al empezar solo se carga el programa principal. Las subrutinas no se cargan hasta que son llamadas. Solo hace falta tener una tabla de rutinas cargadas y una forma especial de llamarlas No hace falta un SO especial, solo un cargador reubicable. El espacio en memoria est reservado para el proceso, pero no se utiliza siempre. Enlace dinmico Se trata de no reservar espacio para las subrutinas hasta el momento de la ejecucin. Cada llamada lleva asociada un cdigo para localizar la direccin de la rutina en memoria, o Ese cdigo se sustituye por la direccin de la rutina una vez cargada.

Consume menos memoria y menos disco. o Solo hay una copia de la biblioteca en memoria o El cdigo del programa no incluye el de las bibliotecas Se pueden tener varias versiones de la misma biblioteca o Bibliotecas Compartidas Necesita que el SO compruebe que no se vulnera la proteccin de memoria.

Solapamientos (overlays) Tcnica que permite ejecutar un programa que sea mayor que la memoria principal disponible. Se basa en mantener en memoria solo las instrucciones y Tatos que se necesita en cada momento. No hace falta soporte Tel SO. o Hace falta programar el traductor y el montador Hace falta un programador experto o para agrupar instrucciones y datos en conjuntos adecuados Solo se usa con hardware limitado (micros 86, 286). o En otros casos, tcnicas automticas de memoria virtual Un ensamblador en dos pasos

2,5 Diseo y programacin del ensamblador de dos pasos Un algoritmo es una serie de pasos lgicos para realizar una accin, programa o tarea ya que es el primer paso para realizar un programa. Los algoritmos se pueden expresar por frmulas, diagramas de flujo, y pseudocdigos. Los algoritmos tienen ciertas caractersticas que son: S Preciso: Esto quiere decir que debe indicar el orden en cada paso. V Definido: Es decir, si se sigue dos veces, obtiene el mismo resultado cada vez. S Finito: Que tiene fin, o sea un nmero definido de pasos. Analizando en detalle el proceso de compilacin, se divide en dos grandes fases, una de Anlisis y la otra de Sntesis. Fase de Anlisis: En el llamado anlisis lexicogrfico o lxico, el compilador revisa y controla que las "palabras" estn bien escritas y pertenezcan a algn tipo de token (cadena) definido dentro del lenguaje, como por ejemplo que sea algn tipo de palabra reservada, o si es el nombre de una variable que

este escrita de acuerdo a las pautas de definicin del lenguaje. En esta etapa se crea la tabla de smbolos, la cual contiene las variables y el tipo de dato al que pertenece, las constantes literales, el nombre de funciones y los argumentos que reciben etc. En el anlisis sintctico como su nombre lo indica se encarga de revisar que los tokens estn ubicados y agrupados de acuerdo a la definicin del lenguaje. Dicho de otra manera, que los tokens pertenezcan a frases gramaticales validas, que el compilador utiliza para sintetizar la salida. Por lo general las frases gramaticales son representadas por estructuras jerrquicas, por medio de rboles de anlisis sintctico. En esta etapa se completa la tabla de smbolos con la dimensin de los identificadores y los atributos necesarios etc. El anlisis semntico se encarga de revisar que cada agrupacin o conjunto de token tenga sentido, y no sea un absurdo. En esta etapa se rene la informacin sobre los tipos para la fase posterior, en esta etapa se utiliza la estructura jerrquica de la etapa anterior y as poder determinar los operadores, y operandos de expresiones y preposiciones. Fase de Sntesis: Etapa de generacin de cdigo intermedio, aunque algunos compiladores no la tienen, es bueno saber de su existencia, en esta etapa se lleva el cdigo del programa fuente a un cdigo interno para poder trabajar mas fcilmente sobre l. Esta representacin interna debe tener dos propiedades, primero debe ser fcil de representar y segundo debe ser fcil de traducir al cdigo objeto. En la etapa de optimizacin de cdigo, se busca obtener el cdigo ms corto y rpido posible, utilizando distintos algoritmos de optimizacin. Etapa de generacin de cdigo, se lleva el cdigo intermedio final a cdigo maquina o cdigo objeto, que por lo general consiste en un cdigo maquina relocalizable o cdigo ensamblador. Se selecciona las posiciones de memoria para los datos (variables) y se traduce cada una de las instrucciones intermedias a una secuencia de instrucciones de maquina puro. La tabla de smbolos no es una etapa del proceso de compilacin, sino que una tarea, una funcin que debe realizar el proceso de compilacin. En ella se almacenan los identificadores que aparecen en el cdigo fuente puro, como as tambin los atributos de los mismos, su tipo, su mbito y en el caso de los procedimientos el nmero de argumentos el tipo del mismo etc. En otras palabras una tabla de smbolos es una estructura de datos, que contiene un registro por cada identificado y sus atributos. La tabla de smbolo es accedida tanto para escritura como parar lectura por todas las etapas. Detector de errores o manejador de errores, al igual que la tabla de smbolos no es una etapa del proceso de compilacin, si no que es una funcin, muy importante, pues al ocurrir un error esta funcin debe tratar de alguna forma el error para as seguir con el proceso de compilacin (la mayora de errores son detectados en las etapas de anlisis lxico, anlisis sintctico, anlisis semntico). Algoritmo de programacin del paso 1

Se puede dar una descripcin general de las funciones de los 2 pasos del ensamblador simple propuesto. 1 (define los smbolos): 1. Asignar direcciones a todas las proposiciones del programa. 2. Guardar los valores (direcciones) asignados a todas las etiquetas para usarse en el paso 2. 3. Realizar algn procesamiento de las instrucciones para el ensamblador. (Esto incluye el procesamiento que afecta a la asignacin de direcciones, como la determinacin de la longitud de las reas de datos definidas por BYTE, RESP , etc.)

2.5.2 Algoritmo de programacin del paso 2 Paso 2 (ensambla instrucciones y genera el programa objeto): 1. Ensamblar instrucciones (traduccin de los cdigos de operacin y examen de las direcciones). 2. Generar los valores de datos definidos por BYTE, P ORD, etc. 3. Realizar el procedimiento no realizado en el paso 1 de las instrucciones del ensamblador. 4. Escribir el programa objeto y el listado de ensamblado.

Generar S19 2.5.3 Formato de Archivo objeto. Un archivo de salida de Motorola es un archivo tipo ASCII, Motorola maneja 3 tipos: S19 para direccionamiento de 16 bits S2 para direccionamiento de 24 bits S3 direccionamiento de 32 bits para

Estos archivos son una opcional tabla de informacin, con datos especficos para ser cargados en memoria: Modulo de registro este es opcional, contiene el nombre del modulo. Registro de smbolos en caso de ser necesario un smbolo re-calculable. Registro de encabezado SO Registro de dato SI S2 (2 bytes) dato (3 bytes) dato

S3 S7 S8 S9

(4 bytes) dato Registro de trmino archivo de 32 bits de direccin archivo de 24 bits de direccin archivo de 16 bits de direccin

Recordemos que este es solo un formato para el cargador del simulador, para facilitar la vida del programador, lo nico exacto y sin varianza deber ser el COP resultante. Para nuestro caso del HC12 de Motorola el formato de salida ser un S19 con las siguientes caractersticas: 3 CARGADOR - LIGADOR Objetivo: Entender el funcionamiento de los esquemas ms importantes de la carga y liga de mdulos objeto. 3.1 Clases de cargador En informtica, un cargador es la parte de un sistema operativo que es responsable de cargar programas en memoria desde los ejecutables (por ejemplo, archivos ejecutables). El cargador es usualmente una parte del ncleo del sistema operativo y es cargado al iniciar el sistema y permanece en memoria hasta que el sistema es reiniciado o apagado. Algunos sistemas operativos que tienen un ncleo paginable pueden tener el cargador en una parte paginable de la memoria, entonces a veces el cargador intercambia de memoria (swapping). Todos los sistemas operativos que soportan la carga de programas tienen cargadores. Algunos sistemas operativos empotrados de computadoras altamente especializadas corren un nico programa y no existen capacidades de carga de programas, por lo tanto no usan cargadores. Ejemplos de estos sistemas embebidos se encuentran en equipos de audio para automviles. En los sistemas Unix, el cargador es el manejador para la llamada del sistema execve(). Algunas computadoras necesitan cargadores relocalizables, los cuales ajustan direcciones de memoria (punteros) en un ejecutable para compensar las variaciones en la cual la memoria disponible de la aplicacin empieza. Las computadoras que necesitan de los cargadores relocalizables son aquellos en los cuales los punteros son direcciones absolutas en vez de compensaciones de direcciones base del programa. Un ejemplo muy conocido est en los mainframes IMB Sistema 360 y sus descendientes, incluyendo la serie de los sistemas Z9. Los ligadores dinmicos son otro tipo de cargador que carga y liga libreras dinmicas (como dll's). Muchos cargadores permiten al usuario especificar opciones que modificar el procesamiento estndar descrito. Muchos cargadores tienen un lenguaje especial de mandatos que se utiliza para especificar opciones. Algunas veces existe un archivo independiente de entrada al cargador que contiene esas proposiciones de control. En ocasiones esas mismas proposicio3nes tambin pueden estar intercaladas en el flujo primario de entrada entre los programas objeto. En ciertos

sistemas el programador puede incluso introducir proposiciones de control del cargador en el programa fuente, y el ensamblador o el compilador retienen esos mandatos como parte del programa objeto. Una opcin tpica del cargador permite la seleccin de fuentes alternativas de entrada, por ejemplo el mandato INCLUDE, puede indicar al cargador que lea el programa objeto designado en una biblioteca y que lo trate como si fuera parte de la entrada primaria del cargador. Otros mandatos permiten al usuario eliminar smbolos externos o secciones de control completas. CARGADOR LIGADOR Un cargador es un programa del sistema que realiza la acccin de carga. Algunos sistemas tienen un ligador para realizar las operaciones de enlace, y un cargador separado para manejar la relocalizacin y la carga. El cargador es normalmente un programa pequeo que permite al usuario entrar directamente las palabras de instruccin y datos a direcciones concretas de la memoria, mediante un teclado o una cinta magntica. El cargador consiste en un juego de instrucciones que permiten al dispositivo de entrada (teclado o unidad distinta) asignar la direccin de inicio de la memoria y asegurar que el computador leer el programa y lo largar byte a byte. La ligadura de tales recursos puede ser de naturaleza esttica o dinmica. Esto nos lleva al siguiente proceso:

carga: lleva el programa objeto a la memoria para su ejecucin relocalizacin: modifica el programa objeto de forma que puede cargarse en una direccin diferente de la localidad especificada originalmente ligado: combina 2 o ms programas objeto independientes y proporciona la informacin necesaria para realizar referencias entre ellos. El ligador realiza la operacin de enlazar programas objetos independientes. Los editores de ligado pueden efectuar varias funciones ultimas adems de la simple preparacin de un programa objeto para su ejecucin estos tambin se pueden utilizar para construir paquetes de subrutinas u otras secciones de control que suelen utilizar juntas. Estos pueden ser tiles al tratar con bibliotecas de subrutinas que manejan lenguajes de programacin de alto nivel. Comparados con los cargadores de ligadores los editores de ligado en general tienden a ofrecer mayor flexibilidad y control con el correspondiente incremento en complejidad y sobrecarga. La tarea primaria del enlazador es resolver referencias externas lleva acabo la siguiente etapa del proceso de traduccin enlazado los mdulos ensambladores y los acervos para formar un programa completo. En algunos sistemas el cargador simplemente copia el programa ejecutable a las posiciones de memorias apropiadas. Sus funciones:

- Enlazar cdigo intermedio compilado independiente en un solo modulo de cara resolviendo las diferencias entre Tokens. Incorporada las denominadas rutinas de librera en caso de solicitarlas el propio programa. - reunir procedimientos traducidos por separado y enlazarlos para que se ejecuten como una unidad llamada programa binario ejecutable. Ahora si mostrar algunos tipos de cargadores.. Arranque Bootstrap Cargadores inciales Con la maquina vaca e inactiva, no hay necesidad recoleccin de programacin, tan solo se puede especificar la direccin especifica del programa que se carga en primer lugar. En la mayora de los casos este programa es el sistema operativo, que ocupa un lugar en la memoria. Esto significa para realizar las funciones. Una opcin es que el operador introduzca en la memoria el cdigo objeto de un cargador absoluto, utilizando los interruptores en la consola del computador. Algunos computadores requeran que el operador hiciera exactamente eso. Sin embargo este proceso es demasiado incomodo y propenso a errores para hacer una buena solucin del problema. Ofrece algunas ventajas sobre los otros tipos de ligado. Proporciona la posibilidad de cargare las rutinas solo cuando y si se necesitan. Si las subrutinas son grandes o tiene muchas referencias externas se pueden conseguir ahorros considerables de tiempo y espacio de memoria. El programa cargador una vez, situado en la memoria del computador, cargar el programa de aplicacin y los datos. Pero, previamente, se ha debido cargar el cargador en la memoria. Y esto se puede realizar por los siguientes mtodos: . Entrada manual: Mediante el teclado el usuario teclea el cargador BOOTSTRAP. Despus de esto, el cargador se carga as mismo en la memoria del computador. Entrada por ROM: Es posible tener las instrucciones de inicializacin almacenados permanentemente en alguna porcin de la ROM, en lugar de introducirlas manualmente por teclado o por panel frontal. Cuando se requiere el programa de bootstrap, el operador simplemente dirige al computador, mediante los conmutadores del panel, a ejecutar las instrucciones memorizadas en ROM: al estar el programa almacenado en ROM se elimina tambin la posibilidad de borrados accidentales. Indican a la computadora la forma de poner, dentro de la memoria principal unos datos que estn guardados en un perifrico de memoria externa ( cinta, disco, etc ). Sirven para cargar en la memoria pequeos programas que inician el funcionamiento de una computadora. Algunas computadoras de carcter general no tienen en memoria ningn programa de forma permanente y cuando se desconectan pierden toda la informacin de su memoria interna. Al volverlos a

conectar no son capaces de controlar ningn perifrico. Se hace as para que sea el usuario el que ponga los programas que le interese ejecutar. Cargadores ligadores (linker) Cargadores con reubicacin En ocasiones un mismo programa necesita ejecutarse en diferentes posiciones de memoria. Para esto la traduccin debe estar realizada en forma adecuada, es decir no utilizando referencias absolutas a direcciones en memoria, sino referencias a una direccin especial llamada de reubicacin. Cargadores absolutos El programa cargador pone en memoria las instrucciones guardadas en sistemas externos. Independientemente de que sea un cargador inicial, o no sin dichas instrucciones se almacenan siempre en el mismo espacio de memoria ( cada vez que se ejecuta el programa cargador ) se dice que es un cargador absoluto. Montar un programa consiste en aadir al programa objeto obtenido a la traduccin las rutinas externas a las que hace referencia dicho programa. El ensamblador debe permitir dichas referencias y las rutinas deben estar a su vez en lenguaje mquina guardadas en algn elemento accesible por el montador. Generalmente, dichas rutinas se encuentran guardadas en un fichero especial al que suele denominarse librera porque estn almacenadas todas las rutinas externas susceptibles de ser utilizadas por los diferentes programas del usuario. All va el programa ligador cuando est realizando el montaje de un programa a buscarlas y las adjunta al programa objeto. Diferencia fundamental entre un editor de ligado y un cargador ligador: Un cargador tiene como funcin principal la de subir un programa objeto que se encuentra en almacenamiento secundario a la memoria para que pueda ser ejecutado; durante el proceso de carga, si el programa que se va a ejecutar requiere o tiene definidas algunas referencias externas que pueden ser partes de programas o programas en si, entonces es cuando entra el proceso de liga. El proceso de carga puede ser absoluto o relocalizable . el proceso de liga puede ser esttico o dinmico. Primero, ensambla o compila el programa fuente, produciendo un programa objeto (que puede contener varias secciones de control diferentes). Una cargador ligador realiza todas las operaciones de ligado y relocalizacin incluyendo bsqueda automtica en bibliotecas, si se especfica, y carga el programa ligado directamente en la memoria para su ejecucin. Por otro lado un editor de ligado produce una versin ligada del programa ( llamada a menudo modulo de carga imagen ejecutable ) que se escribe en un archivo o biblioteca para su ejecucin posterior. Cuando el usuario est listo para ejecutar el programa ligado, se puede utilizar un cargador relocalizador simple para cargar el programa en la memoria.

3.1.1 Ligado dinmico El ligado dinmico, consiste en enlazar en tiempo de ejecucin los mdulos que contienen a las subrutinas, este ofrece algunas ventajas sobre los tipos de ligado. Proporciona la posibilidad de cargar las rutinas slo cuando si se necesitan. Si las subrutinas son grandes tienen muchas referencias externas se pueden conseguir ahorros considerables de tiempo y espacio en memoria. El ligado dinmico evita la necesidad de cargar la biblioteca completa para cada ejecucin. Puede incluso hacer innecesario que el programa conozca el conjunto de subrutinas que se podra utilizar. El nombre de la subrutina se tratara simplemente como otro elemento de entrada. En el mtodo que se utilice aqu las rutinas que se carguen dinmicamente deben llamarse por medio de una solicitud del servicio al sistema operativo. Este mtodo tambin podra considerarse como una solicitud a una parte del cargador que se mantiene en la memoria durante la ejecucin del programa. Cuando se utiliza ligado dinmico, la asociacin de direccin real y el nombre simblico de la rutina llamada no se hace hasta que se ejecuta la proposicin llamada. Modificacin necesaria al cdigo objeto es la suma de una direccin de carga real a los valores relativos del programa. El editor de ligado realiza la relocalizacin de todas las secciones de control al inicio del programa ligado. De esta forma todos los elementos que necesitan modificarse en el momento de la carga tienen valores relativos al inicio del programa ligado. Los editores de ligado se pueden utilizar para construir paquetes de subrutinas u otras secciones de control que se suelen utilizar juntas . esto puede ser til al tratar con bibliotecas de subrutinas que manejan lenguajes de programacin de alto nivel. A veces permiten al usuario especificar que las referencias externas no se resuelven por bsqueda automtica en biblioteca.

Tablas y lgica de un cargador ligador: o Ahora ya se puede presentar un algoritmo de un cargador ligador (y relocalizador), se utilizan registros de modificacin para que las funciones de relocalizacion y ligado se realicen por medio de este mecanismo. o El algoritmo de un cargador-ligador es mucho ms complicado que el del cargador absoluto, la entrada de este cargador consta de un conjunto de programas objeto o secciones de control que se van a ligar. Una seccin puede (y es comn que lo haga) hacer una referencia externa a un smbolo cuya definicin aparece ms adelante en este flujo de entrada. En este caso, la operacin de ligado requerida no se puede realizar hasta haber asignado una direccin al smbolo externo implicado. o La principal estructura de datos necesaria para el cargador ligador es una tabla de smbolos externos TABSE (anloga TABSIM), se usa para almacenar el nombre y la direccin de los smbolos externos en el conjunto se secciones de control que se est cargando, la tabla tambin suele indicar en qu seccin de control se define el smbolo, entre otras variables importantes podemos

encontrar a DIRPROG (direccin y carga del programa) que es la direccin inicial de la memoria donde se va a cargar el programa ligado, y DIRSC (direccin de la seccin de control) que contiene la direccin inicial asignada a la seccin de control que est examinando el cargador. 3.1.2 Ejemplo de cargador CYBER Los programas CYBER suelen contener mucho mas valores relocalizables que los programas de VAX o del sistema /370. Una palabra de CYBER puede contener ms de una instruccin, por lo que no es posible usar un solo bit de relocalizacin por palabra. A causa de que en CYBER slo las instrucciones de 30 bits pueden contener direcciones de memoria, existen cinco posibles de valores relocalizables dentro de una palabra. 1. Sin relocalizacin 2. Valor relocalizable solo en la mitad superior de la palabra 3. Valor relocalizable solo en la mitad inferior de la palabra 4. valores relocalizables en las mitades superior e inferior de la palabra 5. valor relocalizable en la mitad de los 30 bits de la palabra cuando se usa la tcnica de la mscara de bits, hay un campo de 4 bits asociado a cada palabra de cdigo objeto. Esos 4 bits se utilizan para codificar las posibles antes listadas, y tambin para especificar si la direccin base del programa se suma o resta a cada valor relocalizable. El cargador de CYBER puede utilizar programas de superposiciones de un tipo ms restringido que el descrito. Una estructura de superposiciones est limitada a un mximo de 3 niveles. Cada segmento est identificado por un par ordenado de enteros, y un segmento solamente puede tener un punto de entrada. Cada segmento, excepto el raz, debe cargarse por medio de una solicitud explcita; no existe la carga automtica de segmentos. El programa de aplicacin puede solicitar la carga de un segmento por medio de una llamada de servicio al sistema operativo. Como alternativa, en el segmento raz puede haber un pequeo cargador residente para manejar el proceso de superposicin. Hay tambin una opcin ms poderosa que las superposiciones: la segmentacin. Un programa segmentado tambin usa una estructura de rbol; sin embargo, puede haber ms de 3 niveles, y cada segmento puede tener varios puntos de entrada. 3.1.3 Ejemplo de editor de ligado 370 El formato de los programas objeto manejado por el editor de ligado del sistema /370 es muy parecido al analizado para SIC/XE. La tcnica de referencia a un nmero, se usa para mejorar la eficiencia. El programa de salida del editor de ligado se llama mdulo de carga, y puede cargarse

en la memoria para su ejecucin, y suele contener suficiente informacin para permitir que el editor de ligado los reprocese. El usuario tiene la posibilidad de especificar que un mdulo de carga sea "no editable", en cuyo caso puede omitirse gran parte de la informacin de control, para producir un mdulo de carga ms pequeo. El editor de ligado del sistema 370 puede realizar todas las funciones estndar analizadas, las secciones de control pueden ser eliminadas, reemplazadas o reordenadas. 3.1.4 Ejemplo de editor de ligado VAX Es un editor de ligado que realiza las mismas funciones bsicas alcanzadas con anterioridad. La accin del ligador en la creacin de las secciones de imagen est controlada por el ensamblador o compilador por medio de una secuencia de mandatos que forman parte del programa objeto. El ligador usa una pila interna como almacenamiento de trabajo. Los mandatos del programa objeto pueden especificar el apilamiento de valores a partir de diversas fuentes, guardar valores de la pila en la imagen que se est creando y realizar operaciones con valores de pila. El lenguaje de mandatos ofrece una gran diversidad de posibilidades: hay ms de 50 cdigos de mandatos posibles. El ligador VAX realiza las funciones usuales de ligado y relocalizacin. Adems hace parte del trabajo que en otros sistemas realizan el ensamblador o compilador. No utiliza programas de superposiciones, debido en parte a la gran memoria virtual que dispone VAX. Los diseadores del sistema consideraron que el tamao de esta memoria virtual, junto con los algoritmos para la administracin de la memoria, hacan innecesaria la utilizacin de las superposiciones. 3.2 Relacin Cargador- Sistema Operativo Un sistema operativo es un programa que acta como intermediario entre el usuario y el hardware de un computador y su propsito es proporcionar un entorno en el cual el usuario que pueda ejecutar programas. El objetivo principal de un sistema operativo es, entonces, lograr que el sistema de computacin se use de manera cmoda, y el objetivo secundario es que el hardware del computador se emplee de manera eficiente. Un sistema operativo es una parte importante de casi cualquier sistema de computacin. Un sistema de computacin puede dividirse en cuatro componentes: el hardware, el sistema operativo, los programas de aplicacin y los usuarios. El Principal objetivo de un sistema operativo es proporcionar una interfaz entre el equipo y los programas. Para lograr este objetivo, el sistema operativo debe administrar los recursos del sistema de cmputo, de manera tal que su utilizacin sea lo ms sencilla y eficiente posible. Ahora, recordando que un cargador s un programa que coloca en la memoria para su ejecucin, el programa guardado en algn dispositivo de almacenamiento secundario. Un cargador es un programa del sistema que realiza la "'uncin de carga, pero muchos cargadores tambin incluyen relocalizacin y ligado. Algunos sistemas tienen un ligador para realizar las operaciones de enlace y un cargador separado para manejar la relocalizacin y la carga.

Un programa montado sin errores se puede ejecutar; antes de eso, el programa est en un fichero de almacenamiento secundario, como lo hace? El ncleo del sistema operativo trae el programa a memoria y empieza a ejecutarlo. Para empezar el programa, el sistema operativo realiza los siguientes pasos: > Lee la cabecera del fichero ejecutable para determinar el tamao de los segmentos de texto y datos. > Crea un espacio de direcciones nuevo para el programa. Este espacio de direcciones es suficientemente grande para albergar los segmentos de texto y de datos, junto con el segmento de pila. > Copia instrucciones y datos del fichero ejecutable en el nuevo espacio de direcciones. > Copia los argumentos pasados al programa en la pila. > Inicia los registros de la maquina, por lo general todos los registros se ponen a cero, pero al puntero de la pila hay que asignarle la direccin de la primera posicin libre de la pila. > Salta a la rutina de inicio que copia los argumentos del programa de la pila a registros y llama a la rutina main del programa, si la rutina main retorna, la rutina de inicio termina el programa con la llamada al sistema de salida. El hardware (unidad central de proceso (CPU), memoria y dispositivos de entrada y salida (E/S)) proporciona los recursos de computacin bsica bsicos. Los programas de aplicacin (compiladores, sistemas de bases de datos, juegos de vdeo y programas para negocios) definen la forma en que estos recursos se emplean para resolver los problemas de computacin de los usuarios. Puede haber distintos usuarios (personas, mquinas, otros computadores) que intentan resolver problemas diferentes; por consiguiente, es posible que haya diferentes programas de aplicacin. El sistema operativo controla y coordina el uso del hardware entre los diversos programas de aplicacin de los distintos usuarios. Los sistemas operativos son ante todo administradores de recursos; el principal recurso que administran es el hardware del computador: los procesadores, los medios de almacenamiento, los dispositivos de entrada/salida, los dispositivos de comunicacin y los datos. Los sistemas operativos realizan muchas funciones, como proporcionar la interfaz con el usuario, permitir que los usuarios compartan entre s el hardware y los datos, evitar que los usuarios interfieran recprocamente, planificar la distribucin de los recursos, facilitar la entrada y salida, recuperarse de los errores, contabilizar el uso de los recursos, facilitar las operaciones en paralelo, organizar los datos para lograr un acceso rpido y seguro, y manejar las comunicaciones en red. No existe una definicin universal aceptada de qu forma parte de un sistema operativo y qu no. Una perspectiva sencilla considera como tal todo lo que enva un vendedor cuando se ordena la adquisicin del "sistema operativo". Sin embargo, los requisitos de memoria y las caractersticas incluidas varan en forma considerable de un sistema a otro. Algunos requieren menos de un megabyte de espacio e incluso carecen de un editor de pantalla, mientras que otros necesitan cientos de megabytes de espacio e incluyen revisores

ortogrficos y sistemas de ventanas. Una definicin ms comn es que el sistema operativo es el programa que se ejecuta todo el tiempo en el computador (conocido usualmente como ncleo), siendo programas de aplicacin todos los dems. La segunda definicin es la ms comn y es la que utilizamos en general. La necesidad de un cargador relocalizador es una consecuencia de la rpida evolucin de las computadoras, ms poderosas y con ms memoria, de tal manera que puede alojar no uno sino varios programas y entonces el sistema operativo ( segn la poltica de gestin de procesos ) puede hacer que se ejecuten varias tareas. Pero desde luego primero se tiene que cargar el sistema operativo, por lo tanto necesitamos un cargador que desde el inicio o arranque de la computadora, aloje memoria para el S.O. Tal cargador es el llamado "Cargador de Arranque" o Bootstrap, el cual comnmente es un cargador absoluto. Ese cargador aloja memoria para el cargador relativo del sistema operativo y una parte de ste, el conmutador de tareas ... finalmente se carga todo el sistema operativo y el control de carga se pasa al cargador relativo incluido en ste. El arrancador Bootstrap, se encuentra en una memoria de slo lectura (ROM), la cual tiene decodificadas direcciones fijas, lo que define al cargador absoluto. En dicha memoria ROM, se encuentran adems otras rutinas pertinentes al arranque en fro de la computadora Aqu sera bueno que ud, explicara qu pasa en otras plataformas?... UNIX, MAC, etc.... 3.3 Funciones del editor de enlace La mayor parte de los programas se componen de ms de un procedimiento. Los compiladores y ensambladores suelen traducir un procedimiento a la vez y guardan en memoria secundaria el resultado de esta Traduccin. Antes de que pueda ejecutarse el programa, todos los procedimientos traducidos deben recuperarse y darse correctamente. Si no se dispone de memoria virtual, el programa enlazado debe cargarse explcitamente en memoria. Los programas que realizan estas funciones reciben varios nombres, como cargador (loader), cargador montado (linking loader) y editor de enlaces (linkage editor). La traduccin completa de un programa fuente se efecta en dos pasos: Compilacin o ensamblaje de los procedimientos fuente Encadenamiento (linking) o montaje de los mdulos objeto. Un enlazador (en ingls, linker) es un programa que toma los ficheros de cdigo objeto generado en los primeros pasos del proceso de compilacin, la informacin de todos los recursos necesarios (biblioteca), quita aquellos recursos que no necesita, y enlaza el cdigo objeto con su(s)biblioteca con lo que finalmente produce un fichero ejecutable o una biblioteca. En el caso de los programas enlazados dinmicamente, el enlace entre el programa ejecutable y las bibliotecas se realiza en tiempo de carga o ejecucin del programa.

La generacin de un mdulo ejecutable a partir de una coleccin de procedimientos traducidos independientemente requiere un ligador. El ensamblador asiste al ligador suministrndole una tabla de smbolos o rtulos y referencias no resueltas. La tarea principal del enlazador es resolver las referencias externas, o sea establecer la correspondencia entre smbolos definidos en un archivo objeto y su empleo en otro archivo de la misma naturaleza. El enlazador debe combinar varios archivos objeto con su acervo respectivo de datos en un solo archivo ejecutable. Existen algunos pasos necesarios para ejecutar el editor de enlace, los que finalmente dependen de las directrices de importacin-exportacin de objetos: 1. Probar directrices, el micro tiene 2 sentencias en el lenguaje ensamblador: directivas e instrucciones 2. Referencias externas, crear tabla de smbolos: Establecer la correspondencia entre smbolos definidos en un archivo objeto y su empleo en otro archivo de la misma naturaleza. El enlazador debe combinar varios archivos objeto con su acervo respectivo de datos en un archivo ejecutable. 3. Abrir archivos objeto y formatear datos 4. Combinar archivos objeto 5. Enlazar cdigo intermedio compilado 6. Incorpora rutinas de libreras en caso de solicitarlas el propio programa. 7. Su funcin es reducir procedimientos traducidos por separado y enlazarlos para que se ejecuten como una unidad llamada programa binario ejecutable Los editores de ligado en general tienden a ofrecer una gran flexibilidad y control con el correspondiente incremento de complejidad y sobrecarga. 3.3.1 Ligadura de una subrutina El editor de ligado primero se ensambla o compila el programa fuente, produciendo un programa objeto (que puede contener varias secciones de control diferentes). Un cargador ligador realiza todas las operaciones de ligado y relocalizacin, incluyendo bsqueda automtica en bibliotecas. El enlace de una subrutina es la estructura con que se comparte la informacin del involucrado. El involucrado proporciona la direccin como parte del enlace de subrutina. Las subrutinas se encuentran guardadas en algn elemento accesible por el que se suele denominarse librera porque ah estn almacenados todas las rutinas externas susceptibles de ser utilizadas por los diferentes programas del usuario ah va el programa ligado cuando est

realizando el montaje de un programa al buscarlas y las adjunta al programa objeto a este proceso se le llama ligadura de rutinas y subrutinas. 3.3.2 Razones de porque dividir un programa en subprogramas Vincular entre lenguajes; es decir combinar el poder computacional de un lenguaje de alto nivel con el eficiente procesamiento del lenguaje ensamblador. Facilitar el desarrollo de proyectos largos en los cuales equipos diferentes proceden sus mdulos separadamente. Incrustar partes de un programa durante su ejecucin a causa del gran tamao del programa Cuando se utilizan subrutinas en unos programas, el cdigo ejecutable de cada una de ellas debe encontrarse en memoria al tiempo de ejecucin. Para esto antes de cargar un programa debe ligarse su cdigo objeto de cada una de las subrutinas involucradas por el obtenido as por un programa ejecutable que tiene tanto el cdigo del modulo involucrado como el cdigo de los mdulos involucrados. 3.4 Problema de ligas de objetos y mtodos de solucin Uno de los objetivos alternativos del cargador es pegar o unir otros recursos al cdigo objeto para que ste realice por completo sus funciones especficas desde el intrprete de rdenes del sistema operativo. Estos recursos pueden ser bloques de memoria de datos o de cdigo, dispositivos de entrada y salida, inclusive otros archivos ejecutables, y esta ligadura puede ser de forma esttica o dinmica. En el proceso de ligado que lleva a cabo el cargador se combinan 2 o ms programas objeto independientes y proporciona la informacin necesaria para realizar referencias entre ellos y de esta manera puedan interactuar La problemtica que suele presentarse en el cargador es que se haga una referencia a un smbolo de un mdulo externo cuya definicin aparece ms adelante en el flujo de entrada. En tal caso, la operacin de ligado no se puede hacer hasta haber asignado una direccin al smbolo externo implicado en la liga A este problema se le llama: problema de liga de referencias adelantadas externas y su para su solucin es necesario considerar tres pasos descritos a continuacin: Combinacin de bloques de memoria de cdigo y de datos: Esto significa que en la memoria estarn intercalados bloques tanto de datos como de cdigo lo que implica que entre el cdigo estarn estn implcitos los datos necesarios para realizar las tareas especficas. Construccin de una tabla de Smbolos (Acervo): A lo que nos referimos con esto es, que ser necesario contar con una tabla que contenga todos los smbolos requeridos para la ejecucin de un programa de manera que se sepa de antemano lo que puede solicitarse por parte del cdigo.

Lista de partes exportables pblicas y privadas incluyendo su desplazamiento: Con esto nos referimos a que se realizar una lista en la que se especifiquen que partes de un mdulo podrn exportarse y que partes son pblicas y privadas incluido el desplazamiento que se les har para la ejecucin de programa. El enlazado permite al programador y al propio sistema operativo dividir un programa en varios archivos llamados mdulos, que pueden ensamblarse por separado y enlazarse en una ocasin posterior, el enlace puede ser de naturaleza esttica o dinmica. El enlace esttico da como resultado, un archivo ejecutable con todos los smbolos y mdulos respectivos incluidos en dicho archivo. Por otra parte sistemas operativos como el, win 95/nt, y el OS/2 se puede preferir una liga dinmica, solo mientras se est en ejecucin el programa ejecutable, as los mdulos que estn invocados en el tiempo de ejecucin, denotan la librera de enlace dinmico o DLL. 3.4.1 Cargador dinmico Un cargador dinmico es til cuando no es posible asignar en memoria un programa completo. Utiliza los dispositivos del sistema operativo para cargar subprogramas en el momento en que se llaman por primera vez. Al retardar el proceso de ligado de esta forma, se puede lograr flexibilidad adicional, aunque, este enfoque suele implicar ms operaciones que el cargador ligador. Se trata de esquema que pospone la funcin de ligado hasta el momento de la ejecucin: una subrutina se carga y liga al resto del programa al llamarla por primera vez. El programa contiene subrutinas que corrigen o diagnostican errores en los datos de entrada durante la ejecucin. Si esos errores son poco comunes, las rutinas de correccin y diagnstico pueden no ser utilizadas durante la mayora de las ejecuciones del programa. Sin embargo, si el programa estuviera totalmente ligado antes de la ejecucin, habra que cargar y ligar esas rutinas cada vez que se ejecuta el programa. El ligado dinmico proporciona la posibilidad de cargar las rutinas slo cuando se necesiten. Si las subrutinas son grandes o tienen muchas referencias externas, se pueden conseguir ahorros considerables de tiempo y espacio de memoria. De forma similar, supngase que en cualquier ejecucin un programa usa solo pocas de una gran cantidad de subrutinas posibles, pero el nmero exacto de rutinas necesarias no puede predecirse hasta que el programa examine la entrada. Esta situacin podra presentarse, por ejemplo, con un programa que permita al usuario llamar interactivamente a cualquiera de las subrutinas de una gran biblioteca matemtica y estadstica. El usuario podra suministrar la entrada de datos desde un terminal de tiempo compartido, y los resultados podran exhibirse en el terminal. En este caso, podran ser necesarias todas las subrutinas de la biblioteca, pero en cualquier sesin de terminal slo se usaran unas cuantas. Las rutinas que se carguen dinmicamente deben llamarse por medio de una solicitud de servicio al sistema operativo. Este mtodo tambin podra considerarse como una solicitud a una parte del cargador que se mantiene en la memoria durante la ejecucin del programa.

El programa hace una solicitud de servicio de carga y llamada al sistema operativo. El parmetro de esta solicitud es el nombre simblico de la rutina llamada (fig. a). El sistema operativo examina sus tablas internas para determinar si la rutina ya se ha cargado o no; en caso necesario, la rutina se carga desde la biblioteca de usuario o desde el sistema especificado (fig. b). Entonces el control pasa del sistema operativo a la rutina llamada (fig. c). Cuando se completa el procesamiento de la subrutina llamada, vuelve a quien la llam (es decir, a la rutina del sistema operativo que maneja la solicitud de servicio de carga y llamada). Entonces el sistema operativo devuelve el control al programa que hizo la solicitud (fig. d). Es importante devolver el control de esta forma, para que el sistema operativo sepa cundo la rutina llamada termin su ejecucin. Una vez terminada la subrutina, puede ser C dinmico Algunas veces es conveniente retener la rutina en la memoria para algn uso posterior, siempre y cuando no se necesite el espacio de almacenamiento para otro proceso. Si una subrutina sigue en la memoria, una segunda llamada a ella puede no necesitar otra operacin de carga. El control puede pasarse del cargador dinmico a la rutina llamada. Cuando se utiliza ligado dinmico, la asociacin de una direccin real y el nombre simblico de la rutina llamada no se hace hasta que se ejecuta la proposicin de llamada. Otra forma de escribir esto es decir que el ligamiento del nombre a una direccin real se retrasa del tiempo de carga al tiempo de ejecucin. Como ya se haba expuesto, este ligamiento retardado da como resultado una mayor flexibilidad, y tambin requiere mayor sobrecarga, ya que el sistema operativo debe intervenir en el proceso de llamada. 3.5 Diseo y programacin de un Cargador Algoritmo de cargador 1. colocar un programa objeto en la memoria 2. Iniciar su ejecucin. 3. Si tenemos un cargador que no necesita realizar las funciones de ligado y relocalizacin de programas, su operacin es simple pues todas las funciones se realizan en un solo paso. 4. Se revisa el registro de encabezamiento para comprobar si se ha presentado el programa correcto para la carga (entrando en la memoria disponible). 5. A medida que lee cada registro de texto, el cdigo objeto que contiene pasa a direccin de la memoria indicada. 6. Cuando se encuentra el registro de fin, el cargador salta a la direccin especificada para iniciar la ejecucin del programa cargado. 3.5.1 Cargador absoluto (ejemplo)

Hay dos aspectos del programa cargador que requieren una mayor explicacin: la variable dir byte y el campo dirini. El proceso de carga absoluta del siguiente cargador es: La variable dir_byte que se declara como apuntador a un carcter o sea es la direccin de un carcter. Es razonable suponer que se almacena un carcter usando un byte de -memoria y que, por consiguiente, la variable dirbyte contiene la direccin de un byte de memoria. Inicialmente, esta .variable se asigna igual a la constante DIR_CARGA.En cada iteracin del lazo while, a la posicin de memoria identificada por dir_byte se le asigna el siguiente byte del archivo ejecutable; despus se incrementa en uno el valor de dirbyte. De esta manera, el contenido del archivo ejecutable se copia a posiciones consecutivas de la memoria a crter de DIRCARGA.

3.5.2 Cargador re localizable (ejemplo) Para analizar el proceso de relocalizacin introduciremos dos trminos: el espacio lgico de direcciones y el espacio fsico de direcciones. Un espacio lgico de direcciones representa el espacio desde la perspectiva del programa, los nicos objetos que necesitan direcciones son aquellos a los cuales hace referencia el programa. E I ensamblador y el enlazador usan el espacio lgico de direcciones para completar sus etapas del proceso de traduccin. El espacio fsico de direcciones representa la perspectiva de la memoria en la maquina. Cada posicin de memoria tiene una direccin. El cargador completa el proceso de traduccin estableciendo la correspondencia de las direcciones del programa entre el espacio lgico de direcciones y el espacio fsico. Se pueden emplear dos tcnicas para asegurar que la ejecucin del programa sea correcta despus de moverlos: la relocalizacin esttica y la relocalizacin dinmica. El termino esttica en relocalizacin esttica se refiere al hecho de que los programas solo se pueden refocilara antes de iniciar su ejecucin. Cuando se usa la relocalizacion dinmica los programas se pueden relocalizar en cualquier momento incluso despus de haber iniciado su ejecucin, a esto se debe el nombre de relocalizacion dinmica Para la relocalizacion esttica se requiere que el enlazador proporcione informacin de relocalizacion adicional en el archivo ejecutable esta informacin de relocalizacion consiste en una lista de parches que indican al cargador cuales son las posiciones del programa que tienen que modificarse al mover el programa. La relocalizacion dinmica es ms rpida y flexible que la esttica, pero requiere hardware de correspondencia de direcciones. Si no se proporciona este tipo de hardware, ser necesario emplear la relocalizacion esttica. La relocalizacion dinmica se establece la correspondencia entre las direcciones usadas en el programa y direcciones fsicas cada vez que se utilizan durante la ejecucin del programa. Las direcciones lgicas generadas por el ensamblador y el enlazador no se alteran durante la carga en posiciones contiguas de la memoria. En la fig. de la parte de abajo representa un cargador sencillo

que puede usarse con la relocalizacion dinmica. En este caso el cargador lee el encabezado del archivo ejecutable y determina la cantidad de espacio necesaria para el programa. Despus asigna espacio suficiente para el programa y copia el archivo ejecutable a memoria. Cuando se carga el programa en la memoria, el cargador establece la correspondencia necesaria para el programa, pasando la direccin de carga y el tamao del programa a una rutina llamada establecer_corespondencia. Al leer este cdigo, observe que la funcin de cargar devuelve un entero sin signo en lugar de un apuntador. Esto refleja el hecho de que la direccin inicial es un direccin lgica y no una direccin fsica.

* establecer la correspondencia de direcciones */ establecer_correspondencia (dir_carga, tamao_prog); return((char*) encabezado.dirini); } Relocalizacion. Los cargadores que permiten la relocalizacin de programas se denominan cargadores relocalizadores o cargadores relativos. Existen dos mtodos para la relocalizacin. El primer mtodo utiliza un registro de modificacin para describir cada parte del cdigo que se ha de cambiar al relocalizar el programa. La necesidad de relocalizar los programas es una consecuencia directa del cambio a computadoras ms grandes y potente. La forma de efectuar la relocalizacin en un cargador tambin depende de las caractersticas de la mquina. 4 MACROPROCESADORES Objetivo: Entender el funcionamiento de las diversas modalidades del macro procesamiento. Con el fin de evitar al programador la tediosa repeticin de partes idnticas de un programa, los ensambladores y compiladores cuentan con macro procesadores que permiten definir una abreviatura para representar una parte de un programa y utilizar esa abreviatura cuantas veces sea necesario. Para utilizar una macro, primero hay que declararla. En la declaracin se establece el nombre que se le dar a la macro y el conjunto de instrucciones que representar. El programador escribir el nombre de la macro en cada uno de los lugares donde se requiera la aplicacin de las instrucciones por ella representadas. La declaracin se realiza una sola vez, pero la utilizacin o invocacin a la macro (macrollamada) puede hacerse cuantas veces sea necesario. La utilizacin de macros posibilita la reduccin del tamao del cdigo fuente, aunque el cdigo objeto tiende a ser mayor que cuando se utilizan funciones. Es tan comn el empleo de macroinstrucciones se les considera como una extensin de los lenguajes. De manera similar se considera al procesador de macroinstrucciones o macroprocesador como una extensin del ensamblador o compilador utilizado. El macroprocesador se encarga, en una primera pasada, de registrar todas las declaraciones de macros y de rastrear el programa fuente para detectar todas las macrollamadas. En cada lugar donde encuentre una macrollamada, el macroprocesador har la sustitucin por las instrucciones

correspondientes. A este proceso de sustitucin se le denomina expansin de la macro. El macroprocesador elabora dos tablas para el manejo de las macros: Una tabla de macronombres que consiste de los nombres de las macros y un ndice que le permite localizar la definicin de la macro en otra tabla llamada tabla de macrodefiniciones. Como su nombre lo indica, la tabla de macrodefiniciones contiene las definiciones de todas las macros a utilizar en el programa. En ocasiones es conveniente agrupar macros, de acuerdo a las tareas que realizan, y almacenarlas en archivos que se constituyen en bibliotecas de macros. De esta manera, cuando se requiera la utilizacin de alguna macro en particular, se incluye en el programa fuente el archivo de la biblioteca de macros correspondiente. Macroinstruccin es una pseudo operacin o un conjunto de instrucciones a la cual se le asigna un nombre para ser llamada y despus utilizar su cdigo. Estas permiten escribir una versin abreviada de un programa. Dejando que el macroprocesador maneje los detalles internos, su caracterstica principal es sustitucin de lneas de codigo por una referencia. Ejemplo: En este ejemplo el nombre de la macro es DELAY, cuando se encuentra en un programa DELAY, el ensamblador toma el cuerpo de esta macro del macro procesador y lo pasa al cdigo fuente donde encontr DELAY. La estructura de una macroinstruccin es la siguiente:

La tabla de nombres de macros es donde se almacenan las referencias de las macroinstrucciones, la de cdigos es donde se almacenan los cdigos de cada macro y la de argumentos los parmetros de cada macro. Usos su uso ms comn es en el lenguaje ensamblador, debido a la complejidad de los mnemnicos, pero la macro tambin puede ser un guin o puede tener un uso en aplicaciones finales (Word, Excel) o para perfilar compiladores como visualbasic. Rutina vs macro Una rutina es un procedimiento (en este caso un conjunto de cdigo) que es usado cada vez que se le llame. Una rutina al ser llamada dentro de un programa hace que el cdigo principal y se dirija a ejecutar el cdigo de la rutina, en cambio cuando se llama a una macro, el ensamblador llama al cdigo de la macro y lo implanta donde fue llamado, aumentando as el cdigo fuente y por consiguiente el objeto. La idea aqu es que se incorpore un procesador de macros en su ensamblador de dos pasos. Considere que su ensamblador es de dos pasos, por lo tanto ya tiene un procedimiento de insercin y bsqueda de smbolos en la famosa estructura de datos llamada "tabla de smbolos". Le sugiero que la tabla de smbolos sea creada por adelantado y con un cuarto campo en sus registros, este campo adicional es en realidad una liga a una lista de elementos ( una lista vinculada ), que contiene la informacin de las tres tablas empleadas por el reconocedor de

macros, el cual es un procedimiento muy sencillo de implantar al inicio del ensamblador. Acto seguido, implemente las funciones bsicas de un procesador de macros en el propio ensamblador. De esta manera al escribir el cdigo de su ensamblador se ahorrar mucho trabajo y tiempo. 4.1 importancia terica de macro-expresiones y usos de un macro-procesador Un macroinstruccin (abreviado frecuentemente como macro), no es ms que una conveniencia notacional para el programador. Una macro representa un grupo de proposiciones utilizadas comnmente en el lenguaje de programacin fuente, para el caso, ensamblador. El procesador de macros reemplaza cada macroinstruccin con el grupo correspondiente de proposiciones del lenguaje fuente, lo que se denomina expansin de macros. Por todo lo anterior, las macroinstrucciones permiten al programador escribir una versin abreviada de un programa, dejando que el procesador de macros maneje los detalles internos. Las funciones bsicas de un procesador de macros son: > Sustitucin de lneas de cdigo por una referencia simblica. > Calcular las direcciones efectivas de las referencias. > Expansin de las referencias en un archivo intermedio. El procesador de macros, como puede verse, no intenta ningn anlisis ni traduccin a cdigo objeto del programa fuente, ms bien parece que el procesador hace que aumente el tamao de ste. Esto es un elemento clave para el programador, pues el uso indiscriminado de macros puede hacer que el tamao del cdigo objeto sea enorme y poco prctico, al contrario de las llamadas a subrutinas. Claro que tambin se paga un precio alto por el empleo de las llamadas, pues se pierde tiempo importante en la gestin de la pila, donde usualmente se pasan los parmetros. El macroprocesador requiere tres estructuras de datos para su exitosa operacin. > La tabla de nombres de macros (TABNOM). > La tabla de cdigo de macros (TABDEF). > La tabla de argumentos (TABARG). Ah se guarda toda la informacin pertinente a las macros, mientras el ensamblador analiza la expansin y hace la traduccin a cdigo objeto. A veces hay confusin entre macros y subrutinas. Subrutinas son rutinas comunes en el programa se accede a ellas haciendo llamados a estas, son normalmente usadas para rutinas ms complejas donde el retorno de llamada tolerada. Macros es comnmente usado para rutinas ms simples o donde la velocidad de en cdigo de linea es requerida. Para poder utilizar una macro esta debe ser definida dentro del programa fuente. La macrodefinicion consta de 3 partes estas son:

> la macro cabecera que especifica el macro nombre y su lista de parmetro > el macro cuerpo que es la parte que es insertada actualmente dentro el programa de fuente > el macro terminator la cabecera se tiene de la siguiente forma: ame MACRO <parameter list> El nombre del campo contiene un smbolo nico que el usado para identificar la macro. Siempre que el smbolo es encontrado en el programa fuente, se insertara la macro en el programa fuente donde se apunta. El campo MACRO del encabezado de la macro contiene la llave de esta y esta le dice al ensamblador donde comienza la definicin de la misma. El campo <parameter list> lista de 0 a 16 parmetros que sern usados en el cuerpo de la macro y que son definidos por el tiempo del ensamblador, Los smbolos usados en la lista de parmetros solo son usados por el ensamblador durante el tiempo de carga de la macro. El macro cuerpo puede contener instrucciones, directivas, declaraciones de ensamble condicional o de control. Ejemplos: MULT_BY_16 MACRO (no parameters) DIRECTADD MACRO DESTINATION,SOURCE (two parameters)

Tenemos 2 definiciones de terminacin de macros: ENDM y EXITM, toda definicin de macro debe tener un ENDM para notificar al ensamblador que la definicin de macro ha terminado, EXITM es alternativa para usos de final de macros que son usadas con ensambles condicionales, cuando EXITM es encontrado en un programa las declaraciones de ENDM son ignoradas.

Esta seccin se trata de varias situaciones que surgen en el uso de macros y como a manejarlas. Primero la macro definicin es listada, entonces el programa fuente invoca la macro y finalmente como la macro era expandida por el ensamblador. El uso ms comn de los procesadores de macros es en la programacin de lenguaje ensamblador. Para ilustrar los conceptos del uso de las macros, se van a emplear ejemplos de la mquina SIC/XE, NeMiSyS y 80x86 con el TASM 2.0. Si podemos aceptar que una macro tambin puede ser un guin, entonces las macros tambin tienen su uso en aplicaciones finales ... por ejemplo EXCEL, P ORD ... etc. por mencionar algunos. Pero tambin existen guiones para perfilar compiladores como DELPHI y como VISUALBASIC. A continuacin unos ejemplos. Se definen 4 operadores especiales para el uso de macros: % Cuando aparece este smbolo en la lista de parmetros el valor es pasado al cuerpo del macro en vez del smbolo mismo.

c Cuando este smbolo precede a un carcter este es tomado como una literal y pasa al cuerpo de la macro sin ! . este es til cuando es necesario delimitar el cuerpo del macro. Por ejemplo en la lista de parmetro siguiente, el parmetro segundo pasa a la macro seria una COMA (,): GENERARJNST 75,!STK_VALOR. & Los smbolos de ambos lados se concatenan y el smbolo es removido.

1 Cuando estos smbolos son usados, el comentario precedente NO ser grabado y por lo tanto NO ser invocado en una macro. 4.1.1 Conceptos clave Expansin: Cuando el ensamblador se encuentra con una cabecera de MACRO, lo que hace es almacenarla con su cuerpo correspondiente en una tabla. Posteriormente, cuando en el programa se utilice la cabecera o el nombre de esa MACRO, el ensamblador acceder a la tabla mencionada y sustituir, en el programa, ese nombre de MACRO por el cuerpo de la misma. A la operacin de bsqueda en la tabla de macros se le conoce como "Llamada a la MACRO", y a la sustitucin del nombre de la MACRO por el cuerpo de la misma se denomina "Expansin de la MACRO". En otras palabras, El ensamblador sustituye cada vez que aparezca la macro. No es como los procedimientos, que se "llaman" pero no repiten el cdigo. Una macro puede llamar a otra o a s misma: Es posible una expansin de macros recursiva, siempre y cuando aseguremos una posicin definida de los smbolos que se van a emplear dentro de la macro. Por ejemplo para el SIC/XE, dicha tarea es un poco difcil, aunque si se programa el expansor de macros como una mquina de pila es posible la implementacin. Un tipo recursivo es aquel cuyos valores son compuestos de valores del mismo tipo. Es aquel que est definido en trminos del mismo. Recursividad: La ventaja de la directiva LOCAL: En general, el conjunto de valores de un tipo recursivo T, puede ser definido por un conjunto de ecuaciones recursivas de la forma: T=..T.. El conjunto de ecuaciones recursivas puede tener muchas soluciones. Si una macro es recursiva, es decir, si se llama a s misma, deber pasarse a s misma un parmetro que se modificar en cada expansin, y la macro deber probar el parmetro y terminar la recursin cuando llegue a cierto valor. En caso contrario, el ensamblador podra ingresar en un ciclo infinito. Si esto sucede, el usuario deber suspender explcitamente el ensamblador. Por otra parte est la solucin de Intel, la cual nos dice que los smbolos internos de las macros los deberemos marcar como "LOCAL", para que la reubicacin de los mismos sea factible en la segunda pasada del ensamblador. Directiva que le indica al ensamblador que dentro de la macro

van a existir una serie de etiquetas que deben de ser identificadas de una forma especial al realizar la expansin de la macro y siempre considerando la relacin que existe con la tabla de smbolos. Con ello se evita las definiciones mltiples de estas etiquetas. El formato es el siguiente: LOCAL etiquetas (separadas por comas), Esta directiva debe situarse, en el caso de que exista despus de la cabecera de la macro. Etiquetas en macros: se tienen 2 alternativas para especificar etiquetas en el cuerpo de una macro: una etiqueta puede ser un parmetro o puede ser generada dentro del cuerpo de la macro. 4.2 Microprocesadores con argumentos y Microprocesadores recursivos Las macros de la pgina anterior, ms o menos tienen la misma pauta. El prototipo de una macro comienza con la palabra clave MACRO, el nombre de la macro y opcionalmente una lnea con argumentos, que son los parmetros de la macro. En el caso de las macros de Intel, con el TASM 2.0 o el MASM de IBM, primero se empieza con el nombre de la macro y despus con la palabra clave MACRO. Tambin se cuenta con lnea de argumentos.

Es posible una expansin de macros recursiva, siempre y cuando aseguremos una posicin definida de los smbolos que se van a emplear dentro de la macro. Por ejemplo para el SIC/XE, dicha tarea es un poco difcil, aunque si se programa el expansor de macros como una mquina de pila es posible la implementacin. Por otra parte est la solucin de Intel, la cual nos dice que los smbolos internos de las macros los deberemos marcar como "LOCAL", para que la reubicacin de los mismos se factible en la segunda pasada del ensamblador. TIPOS RECURSIVOS EN GENERAL: Un tipo recursivo es aquel cuyos valores son compuestos de valores del mismo tipo. Es aquel que est definido en trminos de el mismo. En general, el conjunto de valores de un tipo recursivo T, puede ser definido por un conjunto de ecuaciones recursivas de la forma: T=..T.. El conjunto de ecuaciones recursivas puede tener muchas soluciones. STRING Una String es una secuencia de caracteres. Las strings son soportadas por todos los lenguajes de programacin moderna. Pero no se tiene consenso en su clasificacin: Una string puede ser primitiva o compuesta? Qu tipo de operacin debe tener? Una string como un tipo primitivo, con valores que son strings de cualquier longitud. Ejem. ML. Una string como una array de caracteres: Pascal y Ada. Una string como una lista de caracteres: Miranda y Prolog. 4.3 Incorporacin del procesador de macros al ensamblador La idea aqu es que se incorpore un procesador de macros en su ensamblador de dos pasos. Tomando en cuenta que el ensamblador es de dos pasos, por lo tanto ya tiene un procedimiento de insercin y bsqueda de smbolos en la famosa estructura de datos llamada "tabla de smbolos", se sugiere que la tabla de smbolos sea creada por adelantado y con un cuarto campo en sus registros, este campo adicional es en realidad una liga a una lista de elementos ( una lista vinculada ), que contiene la informacin de las tres tablas empleadas por el reconocedor de

macros, el cual es un procedimiento muy sencillo de implantar al inicio del ensamblador. Acto seguido, implemente las funciones bsicas de un procesador de macros en el propio ensamblador. Ventajas: grupos pequeos Repetidos de instrucciones reemplazadas por 1 macro Errores en macros son fijos solo una vez, en la Duplicacin Por definicin el esfuerzo es reducido En efecto, instrucciones de nivel ms alto nuevo puede ser creado Programa es hecho ms fcil, error menos boca abajo Generalmente ms rpido en ejecucin que subrutinas Desventajas En programas grandes, tamao de cdigo de producto mayor que procedimientos Cuando usar macros: Para reemplazar grupos pequeos de instrucciones no merecedor de subrutinas Para crear un conjunto de instruccin ms alta para aplicaciones especificas Para crear compatibilidad con otros ordenadores Para reemplazar porciones de cdigo que es repetido a menudo por todo Macros es expandido cuando el programa es reunido. Este medio que cada suceso del macro nombre (aparte desde la definicin) es reemplazado por las declaraciones en la macro definicin. Un ejemplo demostrara este.

5 GLOSARIO Instruccin o sentencia Lnea o lneas de un programa donde se da la orden de realizacin de un operacin o conjunto de operaciones particulares. Adems del trmino general, distinguiremos dos tipos de instrucciones.

Instruccin privilegiada Es aquella que para ser ejecutada necesita que el programa o usuario tengan ciertos privilegios.

Macroinstruccin Instruccin en el lenguaje fuente que es reemplazada por una secuencia definida de instrucciones en el mismo lenguaje fuente, todas las macroinstrucciones son expandidas por el compilador o ensamblador al conjunto de instrucciones que representan.

Cdigo maquina Representacin de instrucciones y datos de un programa ejecutables directamente por una computadora.

Programa Secuencia de instrucciones que representan la resolucin de un algoritmo y que pueden ser ensambladas, compiladas o interpretadas con el fin de obtener un programa ejecutable en cdigo mquina para realizar un trabajo til para el usuario

Mdulo Unidad de programa que puede ser compilada y unida a otros mdulos para formar un programa completo, tambin lo podemos definir como una parte separable de un programa. Los programas o mdulos , segn el proceso de conversin a cdigo mquina, pueden ser Programa Fuente y Programa Objeto o Programa Ejecutable.

Programa Fuente Programa escrito en ensamblador o lenguaje de alto nivel (FORTRAN, COBOL, PASCAL, C, etc) que debe ser ensamblado, compilado o interpretado antes de ejecutarse en la computadora. Normalmente son editados por el usuario o programador por medio de un editor.

Mdulo Objeto

Es un mdulo fuente ensamblado o compilado que est listo para ser unido a otros para formar un programa ejecutable. Si se trata de todo un programa (un solo mdulo) se denomina programa objeto.

Programa Ejecutable Programa construido por el editor de enlace o montador (linker) a partir de uno o ms mdulos objeto y de rutinas de librera. Este programa puede ser cargado en memoria y ejecutado. En el proceso de traduccin o conversin de un programa fuente a ejecutable entran en juego unos archivos cuya composicin es un conjunto de mdulos que puede-ser reclamados por los distintos elementos a traducir, denominados libreras. Pueden ser tres clases: Librera de Programas, Librera Objeto, Libreras del Sistema.

Librera de Programas Archivo que contiene una coleccin organizada de programas

Librera Objeto Archivo compuesto de una coleccin de rutinas que pueden ser solicitadas e incorporadas por los distintos programas al hacer referencia a las mismas.

Librera del Sistema Coleccin controlada de software perteneciente al sistema y que puede ser incorporado a un programa de igual forma que una rutina de librera objeto. Ensamblador En la traduccin de un programa fuente a cdigo mquina se utilizan diversos programas que forman parte del sistema operativo. Estos programas traductores pueden ser: Ensamblador, Ensamblador Cruzado, Compilador, Compilador cruzado, Intrprete. Programa Utilizado para traducir un programa escrito en lenguaje ensamblador a lenguaje de mquina de tal forma que la traduccin se realiza convirtiendo cada sentencia fuente en una instruccin de mquina. En la traduccin se sustituyen las direcciones simblicas por direcciones absolutas.

Ensamblador Cruzado

Programa traductor de lenguaje ensamblador a lenguaje de mquina que se ejecuta en una computadora y traduce para ejecutar en otro distinto. Compilador Programa traductor de un lenguaje de alto nivel a su cdigo de mquina absoluto o reubicable equivalente. La traduccin se realiza de tal forma que una sentencia fuente se convierte en varias instrucciones mquina, efectuando adems un control previo de errores de todo el programa. Si existen errores, la traduccin se interrumpe. Compilador Cruzado Programa traductor de lenguaje de alto nivel a lenguaje de mquina que se ejecuta en una computadora, generando el cdigo para ser ejecutado en otra distinta. Interprete Programa traductor de lenguaje de alto nivel a cdigo mquina, de tal forma que una sentencia fuente se convierte en varias instrucciones mquina y tras la traduccin de cada! una de ellas se ejecutan sin esperar a traducir la siguiente.

Editor Los sistemas operativos para la construccin de programas suelen adems contar con las siguientes utilidades o utilitarios: Editor, Editor de Enlace, Cargador, Depuradora Este es un programa que permite escribir o corregir archivos de texto, generalmente programas fuente. Editor de enlace Tambin denominado montador, es un programa para crear un cdigo ejecutable a partir) de uno o ms mdulos objeto resolviendo las referencias existentes entre los mismos y asignando direcciones definitivas a los elementos reubicables. tambin extraen las rutinas necesarias de las libreras para incluirlas en el programa ejecutable final.

Cargador Es una rutina que lee un programa ejecutable y lo almacena en la memoria principal antes ;de su ejecucin.

Depurador

Es un programa de ayuda que permite ejecutar un programa fuente paso a paso investigando la imagen del mismo, que se va creando en la memoria con el fin de analizarlo: y corregir posibles errores.

Ejecucin Proceso de llevar a efecto las instrucciones de un programa ejecutable previamente cargado en la memoria principal.

Proceso Se utiliza este trmino para hacer referencia a un programa en ejecucin.

6 ANEXOS 6.1 CDIGO ASCII El cdigo ASCII (acrnimo ingls de American Standard Code for Information Interchange Cdigo Estadounidense Estndar para el Intercambio de informacin), pronunciado generalmente [ski], es un cdigo de caracteres basado en el alfabeto latino tal como se usa en ingls moderno y en otras lenguas occidentales. Fue creado en 1963 por el Comit Estadounidense de Estndares (ASA, conocido desde 1969 como el Instituto Estadounidense de Estndares Nacionales, o ANS) como una refundicin o evolucin de los conjuntos de cdigos utilizados entonces en telegrafa. Ms tarde, en 1967, se incluyeron las minsculas, y se redefinieron algunos cdigos de control para formar el cdigo conocido como US-ASCII. Casi todos los sistemas informticos actuales utilizan el cdigo ASCII o una extensin compatible para representar textos y para el control de dispositivos que manejan texto. El cdigo ASCII define una relacin entre caracteres especficos y secuencias de bits; adems de reservar unos cuantos cdigos de control para el procesador de textos, y no define ningn mecanismo para describir la estructura o la apariencia del texto en un documento; estos asuntos estn especificados por otros lenguajes como los lenguajes de etiquetas. 6.2 SECCIONES DEL MANUAL DE REFERENCIA DEL HC12 6.2.1 MODELO DE PROGRAMACIN El modelo de programacin de cualquier dispositivo lo obtenemos del mismo proveedor, quien nos lo hace saber por medio de su manual de referencia.

Jerarqua de memoria En una computadora 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. 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 como se ver en este captulo. 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 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.

Clasificacin de memorias semiconductoras de acceso aleatorio Las memorias se clasifican, por la tecnologa empleada y, adems segn la forma en que se puede modificar su contenido, A este respecto, las memorias se clasifican en dos grandes grupos:

Memorias RAM: Son memorias en las que se puede leer y escribir, si bien su nombre (Random access memory) no representa correctamente este hecho. Por su tecnologa pueden ser de ferritas (ya en desuso) o electrnicas. Dentro de stas ltimas hay memorias estticas (SRAM, static RAM), cuya clula de memoria est basada en un biestable, y memorias dinmicas (DRAM, dinamic RAM, en las que la clula de memoria es un pequeo condensador cuya carga representa la informacin almacenada. Las memorias dinmicas necesitan circuitos adicionales de refresco ya que los condensadores tienen muy poca capacidad y, a travs de las fugas, la informacin puede perderse, por otra parte, son de lectura destructiva. Memorias ROM (Read Only Memory): Son memorias en las que slo se puede leer. Pueden ser: o ROM programadas por mscara, cuya informacin se graba en fbrica y no se puede modificar, o PROM, o ROM programable una sola vez. EPROM (erasable PROM) o RPROM (reprogramable ROM), cuyo contenido puede borrarse mediante rayos ultravioletas para regrabarlas. EAROM (electrically alterable ROM) o EEROM (electrically erasable ROM), que son memorias que est en la frontera entre las RAM y las ROM ya que su contenido puede regrabarse por medios elctricos, estas se diferencian de las RAM en que no son voltiles. En ocasiones a este tipo de memorias tambin se las denomina NYRAM (no voltil RAM), o Memoria FLASH, denominada as por la velocidad con la que puede reprogramarse, utilizan tecnologa de borrado elctrico al igual que las EEPROM. Las memorias flash pueden borrarse enteras en unos cuantos segundos, mucho ms rpido que las EPROM.

Bsicamente las memorias ROM se basan en una matriz de diodos cuya unin se puede destruir aplicando sobre ella una sobretensin (usualmente comprendida ente -12.5 y -40 v.). De fbrica la memoria sale con 1's en todas sus nosiciones, para grabarla se rompen las uniones en que se quieran poner 0's. Esta forma de realizar la grabacin se denomina tcnica de los fusibles.