ANÁLISIS, DISEÑO YY PROGRAMACIÓN PROGRAMACIÓN DISEÑO DE SISTEMAS SISTEMAS DE Principio de funcionamiento del Software de Sistemas ANÁLISIS, DISEÑO YY PROGRAMACIÓN PROGRAMACIÓN DISEÑO DE SISTEMAS SISTEMAS DE Principio de funcionamiento del Software de Sistemas ISBN 970764803-1 Autor: M.C. Norma Ramírez Hernández M.S.I Graciela Lara López M.A.S.I. Salomón Eduardo Ibarra Chávez Revisor Técnico: Ing. Valentín Martínez López 9 789707 648036 ANALISIS, DISEÑO Y PROGRAMACIÓN DE SISTEMAS CONTENIDO 1 INTRODUCCIÓN 7 1. ESTRUCTURA DE LA COMPUTADORA 11 1.1. HISTORIA 1.1.1. 3000 AC – ÁBACO ‐ CHINA 1.1.2. SIGLO XVII – REGLA DE CÁLCULO – NAPIER, GUNTHER, PASCAL, LEIBNIZ 1.1.3. SIGLO XIX – MAQUINA DIFERENCIAL –BABBAGE, BYRON, JACQUARD (TARJETAS PERFORADAS) 1.1.4. 1944 –MARK I ‐ AIKEN 1.1.5. 1944 –ENIAC – ECKERT, MAUCHLY 1.1.6. 1946 –EDVAC – JOHN VON NEUMANN 1.2. GENERACIONES 1.2.1. GENERACIÓN 0 (1942 ‐ 1945) 1.2.2. PRIMERA GENERACIÓN (1951 ‐ 1958) 1.2.3. SEGUNDA GENERACIÓN (1959‐1954) 1.2.4. TERCERA GENERACIÓN (1964‐1971) 1.2.5. CUARTA GENERACIÓN (1972‐1984) 1.3. ARQUITECTURA DE LA COMPUTADORA 1.3.1. ARQUITECTURA DE JOHN VON NEUMANN 1.3.2. ARQUITECTURA DE HARVARD 1.4. ESTRUCTURA LÓGICA DEL PROCESADOR 1.4.1. LENGUAJE MÁQUINA 1.4.2. SISTEMAS DE NUMERACIÓN 1.5. CONJUNTO DE REGISTROS Y MODELO DE PROGRAMACIÓN 1.5.1. CONCEPTOS DE MODELO DE PROGRAMACIÓN 1.5.2. DIRECCIONAMIENTOS SIMPLES. (INHERENTE, INMEDIATO, DIRECTO Y EXTENDIDO) 1.5.3. DIRECCIONAMIENTO RELATIVO DE 8 BITS 1.5.4. DIRECCIONAMIENTO RELATIVO DE 16 BITS. 1.5.5. DIRECCIONAMIENTO INDEXADO. 1.5.6. OTROS DIRECCIONAMIENTOS. 1.5.6.1. RELATIVO DE 9 1.5.6.2. MÚLTIPLES 1.5.6.3. MÁSCARA 1.6. EJERCICIOS DE FIN DE CAPITULO 11 11 11 12 13 14 14 16 16 16 17 17 18 20 25 34 37 39 41 45 45 51 53 55 56 58 58 59 59 61 3 nrh 2. ENSAMBLADORES 4 67 2.1. RELACIÓN ARQUITECTURA DE MÁQUINAS Y ENSAMBLADOR 2.1.1. CARACTERÍSTICAS DEPENDIENTES DE LA MAQUINA. 2.1.2. CARACTERÍSTICAS INDEPENDIENTES DE LA MAQUINA. 2.2. MODALIDADES DE ENSAMBLADO 2.3. TÉCNICAS DE ENSAMBLADO 2.3.1. ENSAMBLADOR DE UN PASO. 2.3.2. ENSAMBLADOR DE DOS O MÁS PASOS. 2.3.2.1. PRIMER PASO (TABSIM: TABLA DE SÍMBOLOS) 2.3.2.2. SEGUNDO PASO (S19) 2.4. GESTIÓN DE MEMORIA EN EL ENSAMBLADOR 2.5. DISEÑO Y PROGRAMACIÓN DEL ENSAMBLADOR DE DOS PASOS 2.5.1. ALGORITMO DE PROGRAMACIÓN 2.5.2. ALGORITMOS Y PSEUDOCÓDIGOS EJEMPLOS 2.5.3. FORMATO DE ARCHIVO OBJETO. 2.6. EJEMPLOS 2.7. FUNCIONAMIENTO DEL ENSAMBLADOR 2.8. EJERCICIOS DE FIN DE CAPITULO 67 74 75 81 87 88 89 89 91 93 101 103 108 120 121 127 129 3. CARGADOR ‐ LIGADOR 137 3.1. CLASES DE CARGADOR 3.1.1. LIGADO DINÁMICO 3.1.2. EJEMPLO DE CARGADOR CYBER 3.1.3. EJEMPLO DE EDITOR DE LIGADO 370 3.1.4. EJEMPLO DE EDITOR DE LIGADO VAX 3.2. RELACIÓN CARGADOR ‐ SISTEMA OPERATIVO 3.2.1. SISTEMAS OPERATIVOS 3.3. FUNCIONES DEL EDITOR DE ENLACE 3.4. PROBLEMA DE LIGAS DE OBJETOS Y MÉTODOS DE SOLUCIÓN 3.5. DISEÑO Y PROGRAMACIÓN DE UN CARGADOR 3.5.1. CARGADOR ABSOLUTO (EJEMPLO) 3.5.2. CARGADOR RE LOCALIZABLE (EJEMPLO) 3.6. EJERCICIOS DE FIN DE CAPITULO 137 142 144 145 145 147 150 151 154 159 159 160 164 4 MACROPROCESADORES 171 4.1. IMPORTANCIA TEÓRICA DE MACRO‐EXPRESIONES Y USOS DE UN MACRO‐PROCESADOR 4.1.1. CONCEPTOS CLAVE 176 179 ______________________________________________________________________________ Introducción/ Historia ANALISIS, DISEÑO Y PROGRAMACIÓN DE SISTEMAS 4.2. MACROPROCESADORES CON ARGUMENTOS Y MACROPROCESADORES RECURSIVOS 4.3. INCORPORACIÓN DEL PROCESADOR DE MACROS AL ENSAMBLADOR 4.3.1. EJEMPLOS 4.4. EJERCICIOS DE FIN DE CAPITULO 181 182 183 185 5. ANEXOS 189 5.1. CODIGO ASCII 5.2. SECCIONES DEL MANUAL DE REFERENCIA DEL HC12 5.2.1. MODELO DE PROGRAMACION 5.2.2. MODOS DE DIRECCIONAMIENTO DEL HC12 5.2.3. TABLA DE OPERACIONES INDEXADAS 5.2.4. HOJA DE DATOS DE INSTRUCCIÓN 5.2.5. INSTRUCCIÓN ABREVIADA 5.3. TABLA INDICE 5.4. TABLA DE ILUSTRACIONES 189 190 190 191 192 193 193 194 196 6. REFERENCIAS 197 5 ANALISIS, DISEÑO Y PROGRAMACIÓN DE SISTEMAS 1 Introducción EL OBJETIVO GENERAL DE ESTE TEXTO ES COMPRENDER, EN UN NIVEL OPERATIVO, LOS PRINCIPIOS DE FUNCIONAMIENTO DE LAS COMPUTADORAS BASADAS EN EL MODELO DE VON NEWMANN Y ARQUITECTURAS DE HARVARD. ENTENDER Y MANEJAR LAS DIVERSAS MODALIDADES Y MECANISMOS DE ENSAMBLADO, CARGA, MACROPROCESAMIENTO Y EJECUCIÓN DE PROGRAMAS, LOS OBJETIVOS ESPECÍFICOS SON EXPRESADOS EN CADA MÓDULO DEL CONTENIDO Antes de entrar de lleno al contenido propio de la materia hay que aclarar que dicha materia pertenece a la academia “SOFTWARE DE SISTEMAS”, pero ¿que significan estos conceptos?, empecemos…. La informática es la ciencia que se recuperación. La programación tiene como encarga de la automatización del manejo de objetivo el tratamiento de la información la información. La informática, por su rapidez correctamente, con lo que se espera que un de crecimiento y expansión, ha venido programa de el resultado correcto y no uno transformando rápidamente las sociedades erróneo. Así que cada aplicación debe actuales. La computadora, a diferencia de funcionar según lo esperado en términos de otras herramientas que en general apoyan el programación, esta pretende que sus esfuerzo físico de los humanos, fue inventada programas sean útiles y eficientes para facilitar el trabajo intelectual. Un sistema es un conjunto de El lenguaje de programación es el componentes que interaccionan entre si para medio de comunicación entre el hombre y la lograr un objetivo común. Las personas se máquina. Sistema de símbolos y reglas que comunican con el lenguaje, que es un sistema permite la construcción de programas con los muy desarrollado formado por palabras y que la computadora puede operar así como símbolos que tienen significado que tienen resolver problemas de manera eficaz. Estos significado para el que habla y para quienes lo contienen un conjunto de instrucciones que escuchan, lo mismo es para las computadoras nos permiten realizar operaciones de entrada las cuales tienen sistemas y se comunican por / salida, calculo, manipulación de textos, medio de computadoras. lógica / comparación y almacenamiento / 7 nrh La programación es el proceso de Por lo tanto la Programación de convertir las especificaciones a grandes Sistemas se refiere a la creación de rasgos de los sistemas en instrucciones de programas cuya finalidad es servir a otros máquina que produzcan los resultados programas deseados. Ensambladores, Cargadores y Ligadores, (software): ejemplos: Compiladores, Intérpretes. El Software de Sistemas es el software que controla y coordina la operación del equipo que existe en un sistema computacional. El tipo más importante de Software de Sistema es el Sistema Operativo. Este supervisa y controla todas las actividades de entrada/salida y procesamiento de un sistema de computación. Además todo el hardware y software se controla por medio de un sistema operativo. Llamamos Software de sistemas al conjunto de programas que se encargan de controlar el funcionamiento de los programas que se ejecutan y de la gestión interna de los recursos físicos de la computadora. Como es natural, el sistema operativo forma parte del software de sistema. El Software es un conjunto de programas, documentos, procedimientos, y rutinas asociados con la operación de un sistema de cómputo. Distinguiéndose de los componentes físicos llamados hardware. El hardware por si solo no puede hacer nada, pues es necesario que exista el software. El software de manera general, podemos clasificarlo en: Software de sistema: en Software de aplicación: El Software de uso general: este algunas ocasiones también software de hoja de cálculo, ofrece la estructura para un denominado software de base, de diseño asistido por gran número de aplicaciones (CAD), de empresariales, científicas y consiste en un software que computadoras sirve para controlar e procesamiento de texto, de personale; es decir, con interactuar con el sistema, manejo de Bases de Datos, software y documentación proporcionando control sobre pertenece a esta categoría. orientada a los usuarios el hardware y dando soporte a otros programas. 8 ______________________________________________________________________________ Introducción/ Historia ANALISIS, DISEÑO Y PROGRAMACIÓN DE SISTEMAS 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 desempeñan una función de apoyo al mantener el ambiente del software del sistema operativo en el que trabajan los programadores de aplicaciones y los operadores de las computadoras. También participan en las decisiones relativas a reducciones o ampliaciones de hardware y/o software. Programación de Sistemas Conceptos y Aplicaciones Se entiende por programación de sistemas el conjunto de programas necesario para que una computadora de una imagen coherente y monolítica ante sus usuarios. Es un área especializada dentro de las ciencias de la computación. Así, mediante la programación de sistemas, no solo se manejan las computadoras por medio del lenguaje maquina (0 y 1) sino por otros sistemas operativos, sin lo cual sería muy difícil la interacción con la maquina. 9 ANALISIS, DISEÑO Y PROGRAMACIÓN DE SISTEMAS 1. ESTRUCTURA DE LA COMPUTADORA OBJETIVO: ENTENDER CON DETALLE LOS PROCESOS LOGICOS QUE SUCEDEN EN UNA COMPUTADORA PARA QUE PUEDA EJECUTAR UN PROGRAMA EN LENGUAJE MAQUINA DE UNA PLATAFORMA QUE YA ESTA DEFINIDA. 1.1.Historia Podemos definir a la computadora como un dispositivo electrónico capaz de recibir un conjunto de instrucciones y ejecutarlas realizando cálculos sobre los datos numéricos, o compilando y correlacionando otros tipos de información para obtener otro conjunto de datos o información como respuesta. La informática, por su rapidez de crecimiento y expansión, ha venido transformando rápidamente las sociedades actuales. 1.1.1. 3000 AC – ÁBACO ­ CHINA Desarrollada por los chinos y utilizado por civilizaciones griegas y romanas. Este dispositivo es muy sencillo, consta de un marco rectangular de madera ensartado de varillas en las que se desplazaban bolas agujereadas de izquierda a derecha. Al desplazar las cuentas (bolas) sobre las varillas, sus posiciones representan valores almacenados, y es mediante estas posiciones que se representa y almacena datos. A este dispositivo no se le puede llamar computadora pues carece de un elemento fundamental: programa. Ilustración 1 Abaco 1.1.2. Siglo XVII – REGLA DE CÁLCULO – NAPIER, GUNTHER, PASCAL, LEIBNIZ logaritmos permitiendo que los resultados de El creciente interés en Europa por la astronomía y la navegación, impulsó a complicadas multiplicaciones se redujeran a simplificar los cálculos, en ese entonces se un proceso simple de suma; Edmund Gunther encontraba en uso "la regla del cálculo", se encarga de enmarcar los logaritmos de calculadora basada en las invenciones de y Napier en líneas, por su parte Bissaker coloca Napier, Gunther Bissaker. las líneas de ambos sobre un pedazo de madera, creando de esta manera la regla del En 1614, el escocés Napier había anunciado el descubrimiento de cálculo. los 11 ANALISIS, DISEÑO Y PROGRAMACIÓN DE SISTEMAS 1.5.Conjunto de registros y modelo de programación 1.5.1. Conceptos de modelo de programación La arquitectura de un (Reduced Instruction Set Computer), como microprocesador o de cualquier procesador por ejemplo el PIC16C84 de MicroChip o el de computadora, se define por su conjunto de propio Sparc de SUN y el PPC604 de instrucciones y por el modo en como éstas Motorola. Por otra parte tenemos a los acceden a los datos en memoria para su microprocesadores procesamiento. compuestas, los CISC ( Complex Instruction con instrucciones Set Computer ), como el 6809 de Motorola, Las instrucciones que obedece un SIC/XE y la serie 80X86 de Intel. Existen microprocesador están codificadas como algunos procesadores híbridos muy eficientes dígitos binarios en su sistema de memoria. como los famosos K6, K6‐II y K6‐III de AMD. Cada instrucción puede dividirse en uno o En este punto se ve de acuerdo al manual de más campos de bit´s. Todas las instrucciones referencia del dispositivo a tratar. Para tienen un campo de código de operación nuestro curso el microprocesador a ver será (COP), que define el propósito de la el HC12. instrucción. Además, la instrucción completa puede tener campos para operandos o El modelo de programación direcciones de memoria que especifican en representa la estructura de manipulación de donde están almacenados los datos. Lo datos que soporta el conjunto de anterior delimita el concepto de "formato de instrucciones, usualmente compuesta por: instrucción". • Unidad aritmética y lógica Las instrucciones por su complejidad • Los registros de trabajo pueden ser sencillas o compuestas. Los • El registro de condiciones microprocesadores • La memoria de datos que ejecutan instrucciones sencillas son los llamados RISC 45 ANALISIS, DISEÑO Y PROGRAMACIÓN DE SISTEMAS 2. ENSAMBLADORES Objetivo: ENTENDER Y MANEJAR LOS DIFERENTES ESQUEMAS DE ENSAMBLADO. DISEÑAR UN ENSAMBLADOR DE 2 PASOS. 2.1.Relación Arquitectura de máquinas y ensamblador La evolución 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 se introdujo el concepto de MNEMONICO, programador tenía que interpretar el que sustituye al conjunto de UNOS y CEROS, fundamento de la instrucción, se escribían y al conjunto de estos mnemónicos LENGUAJE una serie de unos y ceros (lenguaje maquina) ENSAMBLADOR. La entrada de dicho y se grababan en la memoria del dispositivo, programa se le llama PROGRAMA FUENTE y a entonces el dispositivo interpretaba como la salida PROGRAMA OBJETO (que es la esto como una instrucción. traducción de dichas instrucciones a lenguaje Los programadores encontraban esta tarea (leer maquina. o escribir en la memoria) muy lenta, así que Por lo tanto, los ensambladores son Lenguaje ensamblador es el lenguaje programas que procesan los enunciados del simbólico que se utiliza para codificar los programa origen en lenguaje ensamblador y programas origen que se procesan por el los traducen en archivos en lenguaje máquina ensamblador que son ejecutados por un microprocesador o ensamblador. Este lenguaje es una colección un micro controlador, estos permiten que los de símbolos mnemónicos que representan: programas origen se escriban y se editen en operaciones (mnemónicos de instrucciones una computadora para generar un código para la máquina o de directrices para el ejecutable en otra computadora. El archivo en ensamblador), lenguaje objeto ejecutable resultante se carga operadores y símbolos especiales. El lenguaje (CARGADOR) y se ejecuta en el sistema ensamblador destino. operación de los mnemónicos para todas las es llamado nombres proporciona lenguaje simbólicos, códigos de instrucciones de la máquina contenidas en la lista de instrucciones. 67 ANALISIS, DISEÑO Y PROGRAMACIÓN DE SISTEMAS .Ejemplos Mnemónico C.o. Explicación Ejemplos de uso No operación, incrementa el contador de NOP A7 Cpy Depende de su uso ABA 1806 Rola 45 LDAA Depende de su uso programa pero no hace nada Compara el contenido del registro Y con un valor especificado Suma el contenido del acumulador a con el b, el resultado queda en a Rota todos los bits del acumulador A hacia la derecha Carga al acumulador especificado un Solo un uso: nop CPY 04 Solo un uso: aba Solo un uso: rola valor Ldaa #01, ldaa $01, 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 línea código) línea por línea. Su sintaxis es la siguiente: nombre del campo, operacion del campo, operando del campo, sintaxis del campo, ejemplo: ETIQUETA Num1: MNEMONICO LDAA JMP Operando (S) COMENTARIO (antepone “;”) #5 ;carga al registro A un 5 $10 ;salto incondicional a la dirección 10 Campo de Etiquetas: esta puede aparecer o Un asterisco ( * ) como el primer por si sola en una línea. El ensamblador carácter en el campo de etiquetas interpreta esto como "establece el valor indica que el resto del enunciado de la etiqueta igual al valor actual del origen es un comentario. Los contador de programa (PC)". El campo de comentarios son ignorados por el etiquetas aparece como el primer campo ensamblador e impresos en el dentro de un enunciado origen. El campo listado origen solamente como de etiquetas puede adoptar cualquiera de información de programación. las siguientes formas: o Un espacio de carácter en blanco (TAB o espacio) como primer 69 ANALISIS, DISEÑO Y PROGRAMACIÓN DE SISTEMAS direccionamientos, no todos son podrían ser las mismas, se enuncian aplicables a los micros. de diferente manera, es decir: MNEMONICO: las instrucciones aunque en concepto Función MN HC12 MN HC08 Cargo al acumulador A LDAA LDA Compara al acumulador A CMPA CMP ….. y así podríamos seguir enumerando encontrando las características que hacen exclusivo al micro. 2.1.2. Características Independientes de la maquina. Las características independientes de la máquina son aquellas relacionadas más bien con el tipo de implementación del programa y sus estructuras de datos que con la máquina objeto. DIRECTIVAS: También existen las llamadas DIRECTIVAS o PSEUDOINSTRUCCIONES, las cuales especifican acciones auxiliares que se llevan a cabo por el ensamblador. PERIFERICOS: 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 podríamos seguir numerando características globales para los micros DIRECTIVAS: Las directivas de ensamblador controlan acciones auxiliares que se realizan durante el proceso de ensamblado, tales como reservar posiciones de memoria, inicializar posiciones de memoria a un determinado valor, definir etiquetas, indicar el inicio y el final del 75 nrh programa, o definir macros. Las directivas no son traducibles a código máquina. Nota: las directivas NO tienen código maquina. ORG END START Equ Especificar el punto en el cual se comienza a ensamblar una sección de código. Esta directiva debe utilizarse siempre antes de comenzar a declarar código o zonas de memoria. Especifica el fin de un archivo en código fuente ensamblador. Esta directiva deber ser incluida obligatoriamente al final de cada archivo. Cualquier expresión declarada después de esta directiva será ignorada. Especificación del comienzo de una sección de código ensamblado a dirección $0. Sustituye un identificador por una cadena de texto previamente especificada en cualquier parte del programa por el valor declarado. Esto permite una gran versatilidad a la hora de declarar constantes y posiciones de memoria de especial interés para el programador. contloc 4000 LINEA DE PROGRAMA E1 EQU $800 ORG $4000 JMP E1 END COP 06 0800 DC.B DC.W Las directivas DB y DW permiten declarar o reservar zonas de memoria, tanto para valores numéricos como para cadenas de texto. Estas directivas poseen una amplia sintaxis que permite una gran flexibilidad a la hora de definir áreas de memoria. Los elementos definidos mediante las directivas DB y DW deben ir separados por comas. Para reservar espacio en la memoria sin especificar un valor concreto, se puede emplear el signo de interrogación. La especificación de cadenas de texto debe hacerse mediante la expresión literal de la cadena entre comillas. contloc 4000 4001 4003 4004 4007 4008 400A LINEA DE PROGRAMA ORG $4000 DC.B DC.W DC.B 15 DC.B 20,21,22 DC.B ‘H DC.W ‘H DC.B ‘H, ‘O, ‘L, ‘A COP 00 00 00 0F 14 15 16 48 0048 48 4F 4C 41 76 ______________________________________________________________________________ ENSAMBLADORES/ Relación Arquitectura de máquinas y ensamblador ANALISIS, DISEÑO Y PROGRAMACIÓN DE SISTEMAS 2.5.Diseño y programación del ensamblador de dos pasos Los lenguajes son sistemas de 2. Codificación del mismo: consiste en comunicación. Un lenguaje de programación escribir el programa en algún consiste en todos los símbolos, caracteres y lenguaje de programación; en este reglas de uso que permiten a las personas caso específico en ensamblador, "comunicarse" tomando como base la solución con las computadoras. Existen por lo menos varios cientos de propuesta en el paso anterior. lenguajes y dialectos de programación 3. Traducción a lenguaje máquina, es diferentes. Algunos se crean para una la creación del programa objeto, esto aplicación especial, mientras que otros son es, el programa escrito como una herramientas de uso general más flexibles secuencia de ceros y unos que pueda que son apropiadas para muchos tipos de ser interpretado por el procesador. aplicaciones. En todo caso los lenguajes de 4. La prueba del programa: verificar programación deben tener instrucciones que que el programa funcione sin pertenecen a las categorías ya familiares de errores, o sea, que haga lo que tiene entrada/salida, que hacer. textos, lógica cálculo/manipulación / comparación de y 5. Depuración La última etapa es la eliminación de las fallas detectadas almacenamiento / recuperación. en el programa durante la fase de Los lenguajes de programación se prueba . La corrección de una falla dividen en 4 principales paradigmas: normalmente requiere la repetición imperativo, funcional, orientado a objetos y de los pasos comenzando desde el lógico. primero o el segundo. Para la creación de un programa es Un algoritmo es una serie de pasos necesario seguir cinco pasos: lógicos para realizar una acción, programa o tarea ya que es el primer paso para realizar 1. Diseño del algoritmo: se plantea el un programa. Los algoritmos se pueden problema a resolver y se propone la expresar por fórmulas, diagramas de flujo, y mejor solución, creando diagramas pseudocódigos. Los algoritmos tienen esquemáticos utilizados para el ciertas características que son: mejor planteamiento de la solución. 101 nrh Ilustración 23 Diagrama de flujo de un Ensamblador de 2 pasos PASO 1 106 ______________________________________________________________________________ ENSAMBLADORES/ Diseño y programación del ensamblador de dos pasos ANALISIS, DISEÑO Y PROGRAMACIÓN DE SISTEMAS Ilustración 24 Diagrama de flujo de un Ensamblador de 2 pasos PASO 2 107 nrh 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 para direccionamiento de 32 bits Estos archivos son una opcional tabla de información, con datos específicos para ser cargados en memoria: Modulo de registro este es opcional, contiene el nombre del modulo. Registro de símbolos en caso de ser necesario un símbolo re‐calculable. Registro de encabezado S0 Registro de dato o S1 (2 bytes) dato o S2 (3 bytes) dato o S3 (4 bytes) dato Registro de término o S7 archivo de 32 bits de dirección o S8 archivo de 24 bits de dirección o S9 archivo de 16 bits de dirección 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 1 120 4 2 checksum variable) el tamaño es DATO ( DATO (2 BYTES) DIRECCION DEL POR 1 BYTE REPRESENTADO DATOS A LO NUMERO DE S0 S1 . S1 S9 LARGO DE LA FILA, TIPO DE DATO caso del HC12 de Motorola el formato de salida será un S19 con las siguientes características: ORDEN DE CALCULO COMO SIGUE 3 5 ______________________________________________________________________________ ENSAMBLADORES/ Diseño y programación del ensamblador de dos pasos ANALISIS, DISEÑO Y PROGRAMACIÓN DE SISTEMAS 2. Mediante el algoritmo de 2 pasos, obtenga el formato de salida S19, del siguiente programa en lenguaje ensamblador: 1.asm ORG $4000 JMP INI INI JMP ‐4,Y JMP 4,‐Y JMP 40,Y ORG $4012 JMP ‐40,Y JMP A,Y END 1=31 (ascii, hexadecimal) ver anexos Retorno de carro=13H TABSIM INI=$4003 PASO 1, SE RESEVA LOCALIDADES DE MEMORIA PASO 2: SE OBTIENE EL COP Y SE GENERA EL Y SE GENERA LA TABSIM EN SU CASO FORMATO DE SALIDA S19 Eje1.asm Eje1.asm contloc Cop ORG $4000 contloc cop ORG $4000 4000 06 hh ll JMP INI 4000 06 4003 JMP INI 4003 05 xb INI JMP ‐4,Y 4003 05 5C INI JMP ‐4,Y 4005 05 xb JMP 4,‐Y 4005 05 6C JMP 4,‐Y 4007 05 xb ff JMP 40,Y 4007 05 E8 28 JMP 40,Y 400ª ORG $4012 400A ORG $4012 4012 05 xb ff JMP ‐40,Y 4012 05 E9 D8 JMP ‐40,Y 4015 05 xb JMP A,Y 4015 05 EC JMP A,Y 4017 END 4017 END 4000 El código “hhll” se sustituye por el por el valor de la variable que se encuentra declarada en la tabla de simbolos 4003 El código “xb” se sustituye de acuerdo al modulo anterior (1.6.5 Modo de direccionamiento indexado) por la formula: rr0nnnnn, donde: 123 nrh r r 0 y n n 0 1 n n n 0 0 ‐4 1 1 1 5 C 4005 El código “xb” se sustituye de acuerdo al modulo anterior (1.6.5 Modo de direccionamiento indexado) por la formula: rr1pnnnn, donde p=posición del signo pre=0, mientras que el signo del registro (para cuestiones de cálculo se toma para el desplazamiento: r r y 0 1 1 p n ‐4 0 1 n n n 1 0 0 6 C 4007 De igual manera que las anteriores: xb se sustituye por 111rr0zs, donde z es el tamaño del operador, siendo 0 cuando su tamaño es de 1 byte, y s representa el signo del operador, siendo s=0 cuando este es positivo, por lo tanto el operador 40 es la variable ff 1 1 1 r r y 0 1 0 z S 1 BYTE POSITIVO 0 0 E 8 4012 Es el mismo formato anterior, solo que aquí el operador es negativo asi que nos resultara s=1, por lo tanto el COP resultante para ‐40,y seria E9 D8. 400D Ahora el 1er operador es el registro interno “A”, por lo tanto les como sigue: 1 1 1 r r y 0 E 1 a 1 a A 0 0 C 124 ______________________________________________________________________________ ENSAMBLADORES/ EJEMPLOS ANALISIS, DISEÑO Y PROGRAMACIÓN DE SISTEMAS FORMATO DE SALIDA S19 “1.s19” S0 04 0000 31 CA S1 0D 4000 0640003 055C 056C 05E828 83 S1 05 4012 05E9D8 05EC S9 03 4017 A5 125 ANALISIS, DISEÑO Y PROGRAMACIÓN DE SISTEMAS 3. CARGADOR ­ LIGADOR Objetivo: ENTENDER EL FUNCIONAMIENTO DE LOS ESQUEMAS MAS IMPORTANTES DE LA CARGA Y LIGA DE MODULOS OBJETO. 3.1.Clases de cargador En informática, un cargador es la parte de compensar las variaciones en la cual la un sistema operativo que es responsable de memoria disponible de la aplicación empieza. cargar programas en memoria. El cargador es Las computadoras que necesitan de los usualmente una parte del núcleo del sistema cargadores relocalizables son aquellos en los operativo y es cargado al iniciar el sistema y cuales los punteros son direcciones absolutas permanece en memoria hasta que el sistema en vez de compensaciones de direcciones es reiniciado o apagado. Algunos sistemas base del programa. Un ejemplo muy conocido operativos que tienen un núcleo paginable está en los mainframes IMB Sistema 360 y sus pueden tener el cargador en una parte descendientes, incluyendo la serie de los paginable de la memoria, entonces a veces el sistemas Z9. Los ligadores dinámicos son otro cargador intercambia de memoria. tipo de cargador que carga y liga librerías Los sistemas operativos que soportan dinámicas (como dll's). la carga de programas tienen cargadores. Muchos cargadores permiten al usuario Algunos sistemas operativos empotrados de computadoras altamente especificar opciones que modificar el especializadas procesamiento estándar descrito. Algunas corren un único programa y no existen veces existe un archivo independiente de capacidades de carga de programas, por lo entrada al cargador que contiene esas tanto no usan cargadores. Ejemplos de estos proposiciones de control o esas mismas sistemas embebidos se encuentran en proposiciones equipos de audio para automóviles. En los estar entre los programas objeto. En ciertos para la llamada del sistema execve(). Algunas necesitan pueden intercaladas en el flujo primario de entrada sistemas Unix, el cargador es el manejador computadoras también sistemas el programador puede incluso cargadores introducir proposiciones de control del relocalizables, los cuales ajustan direcciones cargador en el programa fuente, y el de memoria (punteros) en un ejecutable para 137 ANALISIS, DISEÑO Y PROGRAMACIÓN DE SISTEMAS 3.5.Diseño y programación de un Cargador Algoritmo de cargador 1. colocar un programa objeto en la memoria 2. Iniciar su ejecución. 3. Si tenemos un cargador que no necesita realizar las funciones de ligado y relocalización de programas, su operación 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 código objeto que contiene pasa a dirección de la memoria indicada. 6. Cuando se encuentra el registro de fin, el cargador salta a la dirección especificada para iniciar la ejecución del programa cargado. 3.5.1. Cargador absoluto (ejemplo) Hay dos aspectos del programa cargador que requieren una contiene la dirección de un byte de memoria. mayor Inicialmente, esta variable se asigna igual a la explicación: la variable dir_byte y el campo constante DIR_CARGA.En cada iteración del dir_ini. El proceso de carga absoluta del lazo while, a la posición de memoria siguiente cargador es: La variable dir_byte identificada por dir_byte se le asigna el que se declara como apuntador a un carácter siguiente byte del archivo ejecutable; después o sea es la dirección de un carácter. Es se incrementa en uno el valor de dir_byte. De razonable suponer que se almacena un esta manera, el contenido del archivo carácter usando un byte de memoria y que, ejecutable se copia a posiciones consecutivas por consiguiente, la variable dir_byte de la memoria a partir de DIR_CARGA. /***definir la estructura del registro encabezado***/ struct enc_ejec {unsigned int dir_ini; /* las otras partes del encabezado del archivo ejecutable */ 159 ANALISIS, DISEÑO Y PROGRAMACIÓN DE SISTEMAS 4 MACROPROCESADORES Objetivo: Entender el funcionamiento de las diversas modalidades del macro procesamiento. Con el fin de evitar al programador la puede hacer un ensamblador, y además tediosa repetición de partes idénticas de un proporcionan una serie de Directivas para programa, los ensambladores y compiladores definir y ejecutar macro instrucciones (o cuentan con macro procesadores que simplemente, Macros). Cuando ejecutamos a permiten definir una abreviatura para una "macro", ésta se expande al cuerpo que representar una parte de un programa y hayamos definido. utilizar esa abreviatura cuantas veces sea Es tan común el empleo de necesario. Para utilizar una macro, primero macroinstrucciones se les considera como hay que declararla. En la declaración se una extensión de los lenguajes. De manera establece el nombre que se le dará a la macro similar se considera al procesador de y el conjunto de instrucciones que macroinstrucciones o macroprocesador como representará. una extensión del ensamblador o compilador El programador escribirá el nombre utilizado. El macroprocesador se encarga, en de la macro en cada uno de los lugares donde una primera pasada, de registrar todas las se requiera la aplicación de las instrucciones declaraciones de macros y de rastrear el por ella representadas. La declaración se programa fuente para detectar todas las realiza una sola vez, pero la utilización o macrollamadas. En cada lugar donde invocación a la macro (macrollamada) puede encuentre una macro llamada, el macro hacerse cuantas veces sea necesario. La procesador hará la sustitución por las utilización de macros posibilita la reducción instrucciones del tamaño del código fuente, aunque el proceso de sustitución se le denomina código objeto tiende a ser mayor que cuando expansión de la macro. El macroprocesador se utilizan funciones. elabora tablas para el manejo de las macros: correspondientes. A este un ¾ Tabla de nombres de macros: consiste en ensamblador modular, descendiente de los los nombres de las macros y un índice que ensambladores básicos. Hacen todo lo que le permite localizar la definición de la El Macro‐ensamblador es 171 ANALISIS, DISEÑO Y PROGRAMACIÓN DE SISTEMAS Reserva de localidades de memoria con una Macro M1 ET1 MACRO LDAA [1,X] LDAA [2,X] LDAA [3,X] LDAA [4,X] ENDM ORG $4000 M1 JMP ET1 M1 END 1ER PASO 4000 4010 4013 4023 06 hh ll M1 ET1 MACRO LDAA [1,X] LDAA [2,X] LDAA [3,X] LDAA [4,X] ENDM ORG $4000 M1 JMP ET1 M1 END Reserva de localidades de memoria con una Rutina ET1 M1 FIN ORG $4000 JSR M1 JMP ET1 JSR M1 JMP FIN LDAA [1,X] LDAA [2,X] LDAA [3,X] LDAA [4,X] RTS END 4000 4003 4006 4009 400C 4010 4014 4018 401C 401D 16 hhll 06 hhll 16 hhll 06 hhll 05 xb eeff 05 xb eeff 05 xb eeff 05 xb eeff 3D ET1 M1 FIN ORG $4000 JSR M1 JMP ET1 JSR M1 JMP FIN LDAA [1,X] LDAA [2,X] LDAA [3,X] LDAA [4,X] RTS END … como se puede apreciar, el tamaño del COP resultante es mayor el de la Macro que el de la Rutina, a su vez la Macro tiene menor tiempo de ejecución. 175 nrh 4.1.Importancia teórica de macro­expresiones y usos de un macro­ procesador Un macroinstrucción (abreviado El procesador de macros, como puede frecuentemente como macro), no es más que verse, no intenta ningún análisis ni traducción una el a código objeto del programa fuente, más programador. Una macro representa un bien parece que el procesador hace que grupo utilizadas aumente el tamaño de éste. Esto es un comúnmente en el lenguaje de programación elemento clave para el programador, pues el fuente, para el caso, ensamblador. El uso indiscriminado de macros puede hacer procesador de macros reemplaza cada que el tamaño del código objeto sea enorme macroinstrucción y poco práctico, al contrario de las llamadas a conveniencia de correspondiente notaciones proposiciones con de para el proposiciones grupo del subrutinas. lenguaje fuente, lo que se denomina Claro que también se paga un precio expansión de macros. Por todo lo anterior, las alto por el empleo de las llamadas, pues se macroinstrucciones permiten al programador pierde tiempo importante en la gestión de la escribir una versión abreviada de un pila, donde usualmente se pasan los programa, dejando que el procesador de parámetros. El macroprocesador requiere macros maneje los detalles internos. Las tres estructuras de datos para su exitosa funciones básicas de un procesador de operación. macros son: ¾ La tabla de nombres de macros ¾ Sustitución de líneas de código por una (TABNOM). referencia simbólica. ¾ La tabla de código de macros (TABDEF). ¾ Calcular las direcciones efectivas de las ¾ La tabla de argumentos (TABARG). referencias. ¾ Expansión de las referencias en un Ahí se guarda toda la información archivo intermedio. pertinente a las macros, mientras el ensamblador analiza la expansión y hace la 176 ______________________________________________________________________________ MACROPROCESADORES/ Importancia teórica de macro‐expresiones y usos de un macro‐ procesador ANALISIS, DISEÑO Y PROGRAMACIÓN DE SISTEMAS 4.3.1. Ejemplos 1. MEDIANTE EL ALGORITMO DE 2 PASOS, OBENGA EL FORMATO DE SALIDA DEL SIGUIENTE PROGRAMA EN LENGUAJE ENSAMBLADOR, TOME EN CUENTA QUE EL RETORNO DE CARRO ES 13H. 1ER PASO M1 MACRO TABSIM M1 MACRO LDAA [1,X] LDAA [1,X] ET1 = 4010 LDAA [2,X] LDAA [2,X] LDAA [3,X] LDAA [3,X] TABNOM LDAA [4,X] LDAA [4,X] M1 ENDM ENDM ORG $4000 ORG $4000 TABDEF M1 4000 M1 A6E30001 ET1 JMP ET1 4010 06 hh ll ET1 JMP ET1 A6E30002 M1 4013 M1 A6E30003 END 4023 END A6E30004 …. Recuerda el concepto de expansión? La MACRO, se expansiona y se ve reflejada en el formato de salida S19. PD. He omitido el nombre del archivo, por cuestiones prácticas pero, definitivamente es un dato requerido. S0 S1 13 4000 A6E30001 A6E30002 A6E30003 A6E30004 7E S1 13 4010 06 40 10 A6E30001 A6E30002 A6E30003 A6 FF S1 06 4020 E30004 B2 S9 03 4023 D9 183 nrh 2. MEDIANTE EL ALGORITMO DE 2 PASOS, OBENGA EL FORMATO DE SALIDA DEL SIGUIENTE PROGRAMA EN LENGUAJE ENSAMBLADOR, TOME EN CUENTA QUE EL RETORNO DE CARRO ES 13H. ESTE EJERCICIO DENOTA EL USO DE LA DIRECTIVA “LOCAL” 1ER PASO M1 MACRO M1 MACRO TABSIM E1 LOCAL E1 LOCAL E1 = 4000,400A, JMP E1 JMP E1 E2 = 4008 JMP E2 JMP E2 TABNOM LDAA #1 LDAA #1 M1 ENDM ENDM ORG $4000 ORG $4000 TABDEF M1 4000 M1 06 hh ll E2 LDAA #2 4008 86 ii E2 LDAA #2 06 hh ll M1 400A M1 86 ii END 4012 END …. Recuerda el concepto de expansión? La MACRO, se expansiona y se ve reflejada en el formato de salida S19. PD. He omitido el nombre del archivo, por cuestiones prácticas pero, definitivamente es un dato requerido. S0 S1 13 4000 06 4000 06 4008 86 01 86 02 06 400A 06 4008 6B S1 05 4010 86 01 23 S9 03 4012 AA NOTA: La 1er parte (06 4000 06 4008 86 01) pertenece a la 1er llamada a la macro (la que se encuentra en la localidad 4000, la 2da llamada a la macro es aquel código mostrado en letra cursiva (06 400A 06 4008 86 01). 184 ______________________________________________________________________________ MACROPROCESADORES/ Incorporación del procesador de macros al ensamblador ANALISIS, DISEÑO Y PROGRAMACIÓN DE SISTEMAS 5. ANEXOS 5.1.CODIGO ASCII El código ASCII (acrónimo inglés de American Standard Code for Information Interchange — Código Estadounidense Estándar para el Intercambio de Información), pronunciado generalmente [áski], es un código de caracteres basado en el alfabeto latino tal como se usa en inglés moderno y en otras lenguas occidentales. Fue creado en 1963 por el Comité Estadounidense de Estándares (ASA, conocido desde 1969 como el Instituto Estadounidense de Estándares Nacionales, o ANSI) como una refundición o evolución de los conjuntos de códigos utilizados entonces en telegrafía. Más tarde, en 1967, se incluyeron las minúsculas, y se redefinieron algunos códigos de control para formar el código conocido como US‐ASCII. El código ASCII define una relación entre caracteres específicos y secuencias de bits; además de reservar unos cuantos códigos de control para el procesador de textos, y no define ningún mecanismo para describir la estructura o la apariencia del texto en un documento; estos asuntos están especificados por otros lenguajes como los lenguajes de etiquetas. ASCII Hex Símbolo ASCII Hex Símbolo ASCII Hex Símbolo ASCII Hex Símbolo 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 1 2 3 4 5 6 7 8 9 A B C D E F NUL SOH STX ETX EOT ENQ ACK BEL BS TAB LF VT FF CR SO SI 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F (espacio) ! " # $ % & ' ( ) * + , . / 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 0 1 2 3 4 5 6 7 8 9 : ; < = > ? ASCII Hex Símbolo ASCII Hex Símbolo ASCII Hex Símbolo ASCII Hex Símbolo 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F @ A B C D E F G H I J K L M N O 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F P Q R S T U V W X Y Z [ \ ] ^ _ 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F ` a b c d e f g h i j k l m n o 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F p q r s t u v w x y z { | } ~ 189 nrh Ilustración 29 Tabla ASCII 5.2.SECCIONES DEL MANUAL DE REFERENCIA DEL HC12 5.2.1. MODELO DE PROGRAMACION El modelo de programación de cualquier dispositivo lo obtenemos del mismo proveedor, quien nos lo hace saber por medio de su manual de referencia. 190 ______________________________________________________________________________ ANEXOS/ SECCIONES DEL MANUAL DE REFERENCIA DEL HC12 ANALISIS, DISEÑO Y PROGRAMACIÓN DE SISTEMAS 5.2.2. MODOS DE DIRECCIONAMIENTO DEL HC12 Ilustración 30 Tabla de modos de direccionamiento del HC12 191 nrh 5.2.3. TABLA DE OPERACIONES INDEXADAS Ilustración 31 Formulario indexados 192 ______________________________________________________________________________ ANEXOS/ SECCIONES DEL MANUAL DE REFERENCIA DEL HC12 ANALISIS, DISEÑO Y PROGRAMACIÓN DE SISTEMAS 5.2.4. HOJA DE DATOS DE INSTRUCCIÓN 5.2.5. INSTRUCCIÓN ABREVIADA 193 nrh 5.4.TABLA DE ILUSTRACIONES Ilustración 1 Abaco ______________________________________________________________________ 11 Ilustración 2 Maquina de Pascal ____________________________________________________________ 12 Ilustración 3 Maquina diferencial ___________________________________________________________ 13 Ilustración 4 Tarjetas perforadas ___________________________________________________________ 13 Ilustración 5 MARK I _____________________________________________________________________ 14 Ilustración 6 ENIAC ______________________________________________________________________ 14 Ilustración 7 JOHNN VON NEUMANN _______________________________________________________ 15 Ilustración 8 EDVAC _____________________________________________________________________ 15 Ilustración 9 Abstracción de la computadora __________________________________________________ 20 Ilustración 10 Diagrama a bloques de un CPU simple ___________________________________________ 27 Ilustración 11 Memoria __________________________________________________________________ 29 Ilustración 12 Esquema de Arquitectura Von Neumann _________________________________________ 34 Ilustración 13 Esquema de la Arquitectura Harvard ____________________________________________ 35 Ilustración 14 Modos de direccionamiento aplicables al HC12 ____________________________________ 50 Ilustración 15 Formulario indexados ________________________________________________________ 57 Ilustración 16 Registro de segmento ________________________________________________________ 82 Ilustración 17 Jerarquía de memorias _______________________________________________________ 97 Ilustración 18 Asignación de direcciones en compilación ________________________________________ 97 Ilustración 19 Asignación de direcciones en carga ______________________________________________ 98 Ilustración 20 Asignación de dirección en ejecución ____________________________________________ 98 Ilustración 21 Espacios de memoria lógicos y físicos ____________________________________________ 99 Ilustración 22 Solapamiento en ensamblador ________________________________________________ 100 Ilustración 23 Diagrama de flujo de un Ensamblador de 2 pasos PASO 1 ___________________________ 106 Ilustración 24 Diagrama de flujo de un Ensamblador de 2 pasos PASO 2 ___________________________ 107 Ilustración 25 Ligador ___________________________________________________________________ 151 Ilustración 26 Editor de ligado ____________________________________________________________ 152 Ilustración 27 Problema de liga de objetos __________________________________________________ 154 Ilustración 28 Cargado y llamada de una subrutina (ligado dinámico) _____________________________ 157 Ilustración 29 Tabla ASCII ________________________________________________________________ 190 Ilustración 30 Tabla de modos de direccionamiento del HC12 ___________________________________ 191 Ilustración 31 Formulario indexados _______________________________________________________ 192 196 ______________________________________________________________________________ ANEXOS/ TABLA DE ILUSTRACIONES ANALISIS, DISEÑO Y PROGRAMACIÓN DE SISTEMAS 6. REFERENCIAS Bibliografía 9 SYSTEM PROGRAMMING 9 CPU12 REFERENCE MANUAL 9 COMPILADORES :Principios, técnicas y herramientas 9 9 9 9 9 9 9 9 9 9 9 JOHN DONOVAN MOTOROLA.COM/SEMICONDUCTORS Aho, Sethi & Ullman, Ed. Addison‐, iberoamericana Ed. Cambridge MODERN COMPILER IMPLEMENTATION IN Appel, Andrew W. C Basic techniques The Intel Microprocessors 8086/8088, BREY, BARRY B. 6a. edición, New Jersey, 80186/80188, 80286, 80386, 80486, Pentium, Merril, 2002. and Pentium Pro Processor Architecture, Programming, and Inter‐ facing Microcomputer system BYRD, Joseph S.; Pettus, Robert O. New Jersey, Prentice Hall, 1993 Introduction to Embedded Microcomputer VALVANO, Jonathan W. Motorola Systems 6811/6812 Simulations, USA , Thomson, 2003 Manuales técnicos de microcomputadores comerciales, HC11, PIC´s, HC08, etc Microprocesadores avanzados de Intel Barry Brey, Prentice‐Hall Software de Sistema Beck, Leland,.Addison‐Wesley Diseño de Programación de Sistemas Norma Ramírez Hernández ‐ 2008 www.n‐ramirez.com 197