ORGANIZACIÓN DE UNA COMPUTADORA Introducción • Las computadoras se usan en diversas aplicaciones (i d t i oficinas, (industria, fi i h hogares, ciencia, i i etc.) t ) • La primera computadora digital electrónica fue construida durante la segunda guerra mundial (1942) para resolver problemas científicos: ENIAC Caracteristicas de la ENIAC (primera generación) • • • • 300 multiplicaciones por segundo y 5000 sumas 18000 tubos de vacío Ocupaba 1800 sq feets (~200 m2) Problemas: - Costo (~600000 dólares), - Tamaño, T ñ - Potencia y refrigeración - Confiabilidad (alta frecuencia de fallos) • E Esto t se fue f solucionando l i d en lla segunda d generación ió con ell transistor, y luego con los circuitos integrados y el aumento en la densidad de integración. • En 1945 Von Neumann introdujo la idea de programa almacenado. • Para lograr funciones especificas, los chips eran muy caros. • Para cada cambio en las condiciones del sistema se necesitaba prácticamente un nuevo diseño. • La solución p para esto fue diseñar un circuito q que p pueda realizar muchas funciones distintas, según la combinación de unos y ceros (código) que tenga en determinados terminales. Ejemplo: sumar dos números, compararlos, almacenarlos, etc. código de operación Salidas Entradas • El valor codificado indica que se debe hacer (instrucción). g sean las instrucciones q que se le p pida y el orden de estas,, el circuito • Según realizará distintas tareas. • Esto es esencialmente, lo que hace un microprocesador. • En 1971 Intel introdujo el primer microprocesador (de 4-bits): el 4004 • 1972 Intel crea el 8008 Primer µP de 8-bits • 1974-77 aparecen otros µP de 8 bits de otras compañías: Motorola (6800), Zilog (Z80) e Intel (8085) • 1978-79 aparecen los µP de 16 bits 8086 y el 68000 • En los ‘80 siguen apareciendo µP con mejor performace y aparece el 1° Risc • En los ‘90 Intel introduce el Pentium y en 1999 el Pentium III a 500 Mhz. • 2003 Intel comercializa el Pentium IV a 3 3.2 2 Ghz Ghz. • En cuanto a la tecnología usada es principalmente del tipo CMOS, la densidad de integración crece 50% por año y la frecuencia del clock ha crecido desde ~1 1 Mhz al comienzo a varios Ghz actualmente. • Un µP esta compuesto por elementos estudiados en cursos anteriores: registros, contadores, ALU, etc. (hardware) • Software es el conjunto de instrucciones (programa) que se le da al µP para ejecutar. • Un µP solo “entiende” entiende un conjunto determinado de instrucciones, instrucciones las cuales llegan al él para ser ejecutadas, a través de unos y ceros. • Este lenguaje de unos y ceros es el llamado lenguaje de máquina Existe un lenguaje mas fácil de comprender llamado Assembler Ejemplo: La instrucción encargada de sumarle uno a un registro del µP (en este caso el registro A): Lenguaje de máquina 00010110 Assembler INC A Cada µ µP tiene su assembler p particular,, q que en algunos g casos es compatible p con otros procesadores. Los lenguajes superiores como C, Pascal ó Basic no dependen del µP donde se ejecuten, mientras que el assembler sí. Existen programas que “traducen” los lenguajes superiores a assembler o lenguaje de máquina para un dado P. Estos son los llamados compiladores: Lenguaje superior (Ej. C) general Assembler específico del P Lenguaje de máquina UNIDAD DE COMPUTO Vamos a llamar unidad de cómputo a un sistema que tiene la capacidad de poder realizar por sí solo una determinada tarea tarea, consistente en: - recibir información (del exterior), - procesarla, - tomar decisiones, decisiones y - brindar información o dar órdenes (al exterior). Estructura básica: Mem. de Progr. Entrad E t d a Mem. de Datos Unidad de Control ALU S lid Salida Elementos básicos de una computadora P Arithmetic L i Logic Unit Input/Output (comunicación con el exterior) Memorias Registers Control Clock (programa, datos etc.) datos, etc ) Elementos básicos: descripción de cada bloque BLOQUE DE LA UNIDAD ARITMÉTICO LÓGICA (ALU) • Es el área del µP donde se realizan todas las operaciones aritméticas y lógicas lógicas. • Puede realizar muchas operaciones que se seleccionan mediante líneas de entrada manejadas por el área de control del µP • Los operandos p y los datos resultantes se almacenan en registros g o en memoria. • El número de bits con que opera una ALU varía con el µP, existiendo de 4, 8, 16, 32 y 64 bits. BLOQUE DE REGISTROS • Son elementos que almacenan datos en forma temporaria. • Son flip-flops o registros de un bit agrupados de a 8, 16, 32 ó 64 bits dependiendo del procesador procesador. • Existen registros especiales (para tareas específicas) y registros de uso general. • Se usan en general como paso de los datos entre la CPU y la memoria y entre la CPU y los dispositivos de entrada-salida. • Almacenan por ejemplo: los datos que se quieren operar en la ALU, la dirección de la próxima instrucción, la dirección de memoria donde está un dato especifico, etc. • No todos los registros del microprocesador son accesibles para el programador. RELOJ (CLOCK) • Los microprocesadores p son,, en general, g , circuitos secuenciales sincrónicos. • El clock es el encargado de fijar la señal que con la cual se sincronizarán todas las tareas de la unidad de cómputo. • La frecuencia del clock debe ser lo mas estable posible y normalmente queda determinada por un cristal cristal. • Casi todos los nuevos procesadores tienen el circuito oscilador dentro del chip y solo se debe colocar externamente el cristal. BUSES Las distintas partes se vinculan entre si por líneas eléctricas que solo pueden tener 2 estados (digitales). ( g ) Estas líneas forman parte de alguno de los siguientes grupos: Bus de datos Tiene código de instrucciones o datos Bus de direcciones Tiene la dirección desde donde se quiere lee o escribir Bus de control Es el responsable de llevar las señales que controlan y sincronizan la unidad de cómputo BLOQUE DE CONTROL • Es el encargado de controlar el flujo de información de datos entre las distintas partes de la unidad de cómputo. • Interpreta que tarea debe realizar el µP cuando llega una nueva instrucción y orquesta las señales de control necesarias para realizarla. • Manda a leer o escribir datos de la memoria o de los dispositivos de entrada/salida haciendo uso de las señales del bus de control, habilitando algunos bloques e inhibiendo otros. • Selecciona que dirección se debe colocar en el bus de direcciones. Memoria prog. p g µP Datos Direcciones Control Memoria datos Entrada. Salida Instrucciones de un P Algunas de las instrucciones típicas de los µP son: • Incrementar I t en uno ell contenido t id de d un registro i t d dell µP P • Sumar el contenido de dos registros del µP • Cargar el valor que tiene un periférico de entrada en un registro del µP • Sacar p por un p periférico de salida el contenido de un registro g del µ µP ¿Como sumaria dos valores que llegan por un periférico de entrada? El hardware indispensable para ejecutar un programa sería el µP y la memoria. Ejemplo: j p si q queremos sumar los 10 p primeros números ( 1 + 2+3...+10 ) teniendo ademas dos instrucciones, una que borre un registro y otra que sume uno a ese registro. El problema es que no se ve el resultado (es necesario un dispositivo de salida). Si queremos sumar los N primeros números naturales es necesario una entrada, para saber N. Como se ejecuta la primer instrucción • Cuando alimentamos el P este pone siempre la misma dirección para leer la primer instrucción (por ejemplo 0000h). • Lee lo que hay en el bus de datos y lo guarda en un registro especial llamado registro de instrucción instrucción. • Luego decodifica la instrucción y pasa a ejecutar la operación solicitada. Todo este proceso se llama opcode fetch (búsqueda del código de operación) ¿Qué pasa si no hay nada en esa dirección? Una iinstrucción U t ió puede d ttener mas d de una palabra, l b pero lla operación ió ya esta t especificada en la primer palabra. “Incrementar Incrementar un registro interno” interno ( INR B ) no necesita mas que una palabra palabra. La instrucción en lenguaje de máquina (para un procesador de 8 bits) podría ser: 00000100 04h U iinstrucción Una t ió similar i il pero para ell registro i t A es: Asembler: INR A Lenguaje de máquina: 00111100 Instrucciones de transferencia: MVI Ejemplo de una instrucción donde se necesita mas de una palabra podría ser: “cargar g el registro g A ((8 bits)) con un número de 8 bits” Esta instrucción tiene dos palabras, la primera (opcode) indica que se va a cargar el registro A del µP con un número de 8 bits, la segunda palabra dice de que número se trata trata. Simbólicamente: A 4Bh La instrucción en assembler es: En lenguaje de máquina es: MVI A,4Bh 00111110 01001011 = 3Eh = 4Bh Instrucciones de transferencia: LDA “cargar el acumulador con un dato que está en una dirección determinada” Cada C d P P tiene ti un número ú d determinado t i d d de lí líneas d de di direcciones, i por llo tanto tiene la posibilidad de “direccionar” 2n posiciones: 8 bits 28 16 bit bits 216 32 bits 232 256 posiciones 65536 (64K) posiciones i i 4 Giga posiciones Vamos a trabajar j suponiendo p un P de 8 bits de datos y 16 bits de direcciones. Para cargar el registro A con lo que hay en una dirección cualquiera (de 16 bits) por ejemplo: 163Fh = 0001 0110 0011 1111 En assembler: LDA dirección ¿Cuántas palabras de código son necesarias? Instrucciones de transferencia: LDA LDA dirección El primer byte indica el tipo de operación (opcode), que en este caso le dice que hay que cargar al reg. A el valor que está en una dirección, la cual viene en los próximos 2 bytes. El siguiente byte indica los primeros 8 bits de la dirección donde está el dato y el tercero la parte restante. En lenguaje de máquina: 00111010 00010110 00111111 El assembler será: LDA 163Fh ¿Que paso con el valor que tenía A? = 3Ah = 16h = 3Fh (opcode) ( t baja (parte b j di dir.)) (parte alta dir.) A (163Fh) ( ) Instrucciones de transferencia: STA “transferir lo que está en el registro A en una dirección cualquiera” (por ejemplo la 3B01h = 0011 1011 0000 0001 ) (3B01h) A Si bóli Simbólicamente: t Aquí se escribe en la dirección 3B01 (de la RAM) el valor del registro A. En asembler sería: STA dirección STA 3B01h En binario: 00110010 00111011 00000001 = 32h = 3Bh = 01h (opcode) Instrucciones de transferencia: MOV Otro tipo de instrucción es move que consiste en “copiar el contenido de un registro en otro”: MOV B,C B C La instrucción tendría un solo byte (el opcode) con el siguiente formato: 01DDDSSS donde SSS es la fuente y DDD es el destino. Sería: 01 000 001 = 41h Para hacer la asignación en sentido contrario, C B MOV C, B 01 001 000 = 48h Otras instrucciones: ADD “ “sumar 2 registros i t iinternos” t ” El asembler es: ADD C En binario: 10000001 A A+C = 81h Y en este caso de nuevo basta con una sola palabra. Hay 4 registros internos en este P que se los identificará con el siguiente código: A 111 C 001 B 000 D 010 En la instrucción anterior los tres últimos bits del opcode indican que registro se suma al A (dado que A siempre es uno de los sumandos). Para sumar A + B el código sería: Assembler: Binario: a o ADD B 10000000 0000000 ¿como multiplicaría 2xA? = 80 80h Arquitecturas De buses independientes: DIR DATOS DIR MEM. MEM DE PROG MEM. DATOS DIR DATOS µP DATOS ENTR. DIR DATOS SAL. Este esquema no se usa ya que necesita muchas conexiones. Arquitecturas Con memoria de programa (instrucciones) y memoria de datos independientes (tipo Harvard): DIR DATOS DIR MEM. DE PROG. MEM. DATOS DATOS µP ENTR. SAL. Tiene algunas aplicaciones (PICs). Arquitecturas Con memoria de programa y de datos común (tipo von Neumann): DIR DATOS MEM. DE PROG Ejercicio: µP MEM. DATOS ENTR. SAL. Veamos con un poco de detalle el µP por dentro y como se ejecutan las siguientes instrucciones: INC MOV LDA STA MVI ADD Esta es la arquitectura mas frecuente y con la que vamos a trabajar. B A,B dir dir A,dato B Instrucciones de salto: JMP • En general las instrucciones que debe ejecutar un µP no ocupan lugares consecutivos en la memoria de programa. • Existen instrucciones de salto que hacen que la próxima instrucción a ejecutar este en cualquier lugar de la memoria. • Hay dos tipos de instrucciones de salto: Salto incondicional Salto condicional Instrucciones de salto incondicional: No se debe cumplir ninguna condición para que se ejecute el salto. Si queremos seguir nuestro programa en la dirección 0100h. La instrucción en asembler será: JMP dir di donde dir esta formada por dos bytes. E llenguaje En j d de máquina: á i 11000011 00000001 00000000 = C3h = 00h = 01h ((opcode) d ) (dir parte baja) (dir parte alta) Instrucciones de salto condicional: JZ y JNZ Son aquellas donde la dirección de la próxima instrucción depende del resultado de la ultima operación de la ALU. Ejemplos: “saltar si dió cero” En asembler: JZ dir En lenguaje de máquina: dir_L dir_H 11001011 = CBh (opcode) (parte baja de dir) (parte alta de dir) Esta instrucción salta a la dirección dir si la última operación realizada por la ALU dió cero, caso contrario ejecuta la instrucción que está en PC+3. Otra instrucción de este tipo es la siguiente: JNZ dir Aquí el salto se produce si la última operación fue distinta de cero, en caso contrario sigue en PC+3. Resumen de las instrucciones vistas ASSEMBLER INC B INC A MVI A,dato MVI B,dato LDA dir STA dir ADD B ADD C MOV B,C MOV C,B MOV A,B MOV B,A DEC A JMP dir JZ dir JNZ dir HEXADECIMAL 04 3C 3E,dato 06,dato 3A,dir 32,dir 80 81 41 48 78 47 05 C3,dir CB,dir C2,dir OPERACIÓN B B+1 A A+1 A dato B dato A (dir) (*) (dir) A AA A+B B ((*)) A A+C (*) BC CB A B B A A A-1 (*) PC dir PC dir si Z Z=1, 1, PC PC PC+3 3 si Z Z=00 PC dir si Z=0, PC PC+3 si Z=1 Nota1: dato tiene una longitud de 8 bits y dir de 16 bits Nota2: las instrucciones con (*) modifican el estado del flag Z. Si el resultado de la última operación con la ALU fue cero => Z=1 y si el resultado de la última operación con ALU fue distinto de cero => Z=0. Detalle de un P con Memoria, E/S y decodificación