DEPARTAMENTO DE SISTEMAS Y COORDINACIÓN DOCENTE: ING. ROSEL MUÑOZ LÓPEZ. MATERIA: ARQUITECTURA DE COMPUTADORAS UNIDA II: ALUMNOS: MÉRIDA CORTES SERGIO JAIR DE LA CRUZ CUETO ABRAHAM MOLINA HERRERA EDUARDO NÚMERO DE CONTROL: 13510694 13510643 13510696 -TAPACHULA CHIAPAS, MÉXICO A 19 DE OCTUBRE DEL 2015- “PERIODO: AGOSTO-DICIEMBRE 2015” Índice Introducción ....................................................................................................... 3 2.1.- Organización del procesador ................................................................... 4 Figura 1: visión simplificada de un procesador .............................................. 5 2.2. Estructura de registros .............................................................................. 6 Figura 2: Clasificación de los registros de la CPU ........................................ 8 Figura 3: puntero de Instrucción ...................................................................... 9 2.2.1. Registros visibles para el usuario ........................................................ 10 Figura 4: Registros de uso general ................................................................ 11 2.2.2. Registros de Control y de Estado ........................................................ 12 Figura 5: indicadores de la ALU ............................¡Error! Marcador no definido. 2.2.3.- Ejemplos de organización de registros de CPU reales ..................... 14 Las Figuras 6: (a) y (b)..................................................................................... 14 En la Figura 6: (c) ....................................................¡Error! Marcador no definido. 2.3. El ciclo de instrucción .............................................................................. 16 Figura 7. Ciclo de Instrucción......................................................................... 17 Figura 8. Búsqueda ......................................................................................... 18 2.3.1 ciclo fetch-decode-execute .................................................................... 19 Figura 9. Ciclo fetch-decode-execute ............................................................ 20 2.3.2. Segmentación de instrucciones ........................................................... 21 Figura 10.- segmentación de instrucciones .................................................. 21 2.3.3.- Conjunto de instrucciones: Características y Funciones ................. 22 2.3.4.- Modos de direccionamiento y formatos ............................................. 23 2.4.- Casos de estudios de CPU reales .......................................................... 27 Figura 11: Arquitectura de los Registros....................................................... 28 Conclusión ....................................................................................................... 30 Bibliografía ....................................................................................................... 31 Introducción En su forma más simple, un sistema de computadora cuenta con una unidad que ejecuta instrucciones de programas. Esta unidad se comunica con otros subsistemas dentro de la computadora, y a menudo controla su operación. Debido al papel central de tal unidad se conoce como unidad central de procesamiento, o CPU (Central processing unit). Dentro de muchas computadoras, un subsistema como una unidad de entrada, o un dispositivo de almacenamiento masivo, puede incorporar una unidad de procesamiento propia. Tal unidad de procesamiento, aunque es central para su propio subsistema, resulta claro que no es "central" para el sistema de computadora en su conjunto. Sin embargo, los principios del diseño y operación de una CPU son independientes de su posición en un sistema de computadora. Este trabajo estará dedicado a la organización del hardware que permite a una CPU realizar su función principal: traer instrucciones desde la memoria y ejecutarlas. De igual manera en este documento se verá; La secuencia de instrucciones resultante es un programa en lenguaje de máquina que representa al algoritmo en cuestión. El mismo enfoque general se utiliza para permitir a la computadora realizar funciones especificadas por instrucciones individuales de máquina. Esto es, cada una de estas instrucciones se ejecuta realizando una secuencia de operaciones más rudimentarias. Estas operaciones, y los medios por los cuales se generan, serán el tema principal de análisis en este trabajo. 2.1.- Organización del procesador La Unidad de Procesamiento (CPU) controla el funcionamiento del computador y lleva a cabo sus funciones de procesamiento de datos. Frecuentemente se le llama procesador. Un procesador, incluye tanto registros visibles por el usuario como registros de control/estado. Los registros visibles por el usuario pueden ser de uso general o tener una utilidad especial, mientras que los registros de control y estado se usan para controlar el funcionamiento del procesador, un claro ejemplo es el contador de programa. Lleva a cabo una gran variedad de: • Cálculos • Comparaciones numéricas • Transferencias de datos como respuesta a las peticiones de los programas que están siendo ejecutados en memoria. La CPU controla las operaciones básicas del ordenador enviando y recibiendo señales de control, direcciones de memoria y datos de un lugar a otro de la computadora a través de un grupo de canales llamados BUS. La Unidad Central de Proceso está constituida internamente por: • La Unidad de Control • Unidad Aritmético-Lógica Unidad Aritmético-Lógica (ALU) Recibe los datos sobre los que efectúa operaciones de cálculo y comparaciones. Toma decisiones lógicas (determina si una afirmación es correcta o falsa mediante reglas del algebra de Boole) y devuelve luego el resultado. Todo ello bajo supervisión de la unidad de control. La Unidad de Control La unidad de control le indica al resto del sistema como llevar a cabo las instrucciones de un programa. Comanda las señales electrónicas entre la memoria y la unidad aritmético-lógica, y entre el CPU y los dispositivos de entrada y salida. Para ejecutar cualquier programa, cada comando del mismo se desglosa en instrucciones. Los procesadores utilizan la segmentación de instrucciones para acelerar la ejecución. La segmentación de cauce se puede dividir en ciclo de instrucción en varias etapas separadas que operan secuencialmente, tales como la captación de instrucción, decodificación de instrucción, cálculo de direcciones de operando, ejecución de instrucción y estructura del operando resultado. A continuación se muestra cómo se organiza un procesador, para esto se tiene que considerar los siguientes requisitos: Captar instrucciones: el procesador lee una instrucción de memoria (registro, cache o memoria principal). Interpretar instrucción: la instrucción se codifica para determinar qué acción es necesario. Captar datos: la ejecución de una instrucción puede exigir leer datos de memoria o de un módulo de E/S. Procesar datos: la ejecución de una instrucción puede exigir llevar a cabo alguna operación aritmética o lógica con los datos. Escribir datos: los resultados de una ejecución pueden exigir escribir datos en la memoria o en el módulo de E/S. Para hacer estas cosas, el procesador necesita almacenar instrucciones y datos temporalmente mientras una instrucción está ejecutándose, en otras palabras el procesador necesita una pequeña memoria interna, también llamados registros. En esta figura se muestra una visión simplificada de un procesador, que indica su conexión con el resto de sistema, a través del bus del sistema. La ALU lleva a cabo el verdadero cálculo o procesamiento de datos. La unidad de control controla la transferencia de datos e instrucciones así a dentro y así afuera del procesador, y el funcionamiento de la ALU. Además, la figura muestra una memoria interna mínima, que consta de un conjunto de posiciones de almacenamiento llamadas registros. Figura 1: visión simplificada de un procesador En esta figura se indican los caminos de transferencia de datos y de la lógica de control, que incluye un elemento con el rotulo bus interno del procesador. También se muestran los elementos básicos típicos de la ALU. Hay que observar la similitud entre la estructura interna del computador en su totalidad y la estructura interna del procesador. En ambos casos hay una pequeña colección de elementos principales (computador: procesador, E/S, memoria; procesador: unidad de control, ALU, registros) conectados por caminos de datos. 2.2. Estructura de registros ¿Qué son los registros del CPU? Se emplean para controlar las instrucciones en ejecución, manejar direccionamiento de memoria y propiciar la capacidad aritmética. Los registros vienen de tres tipos: datos, direcciones e índice, que tiene lugar en casi todos los aspectos de la operación del CPU. El tamaño de un registro depende del CPU; los más simples tienen registros que aceptan 8 o 16 bits de datos y los más complejos tienen registros de 32, 48 o 64 bits. Clasificación de los Registros Registro de datos: Un CPU puede funcionar con datos en uno de tres modos: entre dos registros, entre registros y una ubicación de Memoria de acceso al azar (RAM Random-Access Memory) y entre dos ubicaciones RAM. Como el CPU está conectado directamente a los registros, las operaciones que implican dos registros son las más rápidas; las que se dan entre ubicaciones RAM son las más lentas. Es decir, junta dos registros, añade un registro a una ubicación RAM, o añade dos ubicaciones RAM. Registro de direcciones: Para que un CPU pueda almacenar y recuperar datos en RAM, debe tener la dirección de la memoria de la información. Esas operaciones que implican RAM usan registros de dirección de memoria. EL CPU no realiza aritmética en estos registros; en cambio, los usa para ubicar datos que necesita. Registro de índice: Un CPU no puede hacer matemáticas en registros de datos, aunque puede hacerlo indirectamente con un registro de índice. Éste trabaja con los registros de datos, permitiendo a un programa procesar hilos de información eficazmente. Registros de segmento: Un registro de segmento tiene 16 bits de longitud y facilita un área de memoria para direccionamiento conocida como segmento actual. Registro Cs: el dos almacena la dirección inicial del segmento de código de un programa en el registro CS. Indica la dirección de una instrucción que es buscada para su ejecución. Registro Ds: genera una referencia a la localidad de un byte específico en el segmento de datos. Registro SS: permite la colocación en memoria de una pila, para almacenamiento temporal de dirección y datos. Registro ES: se utiliza para algunas operaciones con cadenas de caracteres se utiliza para el manejo de direccionamiento de memoria. Registros de propósito general: Los registros de propósito general son el AX, BX, CX, y DX, de 16 bits. Cada uno de ellos se divide en dos registros de 8 bits, llamados AH y AL, BH y BL, CH y CL, y, DH y DL, H significando High (alto) y L significando Low (bajo), indicando la parte alta o la parte baja del registro correspondiente de 16 bits. Registro AX: El registro AX es el registro acumulador, es utilizado para operaciones que implican entrada/salida, y multiplicación y división (estas dos últimas en conjunto con el registro DX). Registro BX: El registro BX es el registro base, y es el único registro de propósito general que puede ser un índice para direccionamiento indexado. Registro CX: El registro CX es conocido como el registro contador. Puede contener un valor para controlar el número de veces que un ciclo se repite o un valor para corrimiento de bits. Registro DX: El registro DX es el registro de datos. En algunas operaciones se indica mediante este registro el número de puerto de entrada/salida, y en las operaciones de multiplicación y división de 16 bits se utiliza junto con el acumulador AX. Registros de apuntadores: Los registros SP (apuntador de pila) y BP (apuntador base) están asociados con el registro SS y permiten al sistema acceder a datos en el segmento de la pila. Registro SP: El apuntador de pila de 16 bits está asociado con el segmento SS y proporciona un valor de desplazamiento que se refiere a la palabra actual que está siendo procesada en la pila. Registro BP: El apuntador base de 16 bits facilita la referencia de parámetros dentro de la pila. Figura 2: Clasificación de los registros de la CPU Registros de banderas: Es un registro de 16 bits, de los cuales nueve sirven para indicar el estado actual de la máquina y el resultado del procesamiento. Los bits de las banderas son las siguientes: ✓ OF (overflow, desbordamiento): Indica desbordamiento del bit de mayor orden después de una operación aritmética de números con signo (1=existe overflow; 0=no existe overflow). Para operaciones sin signo, no se toma en cuenta esta bandera. ✓ DF (dirección): Controla la selección de incremento o decremento de los registros SI y DI en las operaciones con cadenas de caracteres (1=decremento automático; 0=incremento). La bandera DF se controla con las instrucciones STD y CLD. ✓ IF (interrupción): Controla el disparo de las interrupciones (1=habilita las interrupciones; 0=deshabilita las interrupciones). La interrupción no enmascarable es la única que no puede ser bloqueada por esta bandera. El estado de la bandera IF se controla con las instrucciones STI y CLI. ✓ TF (trampa): Permite la operación del procesador en modo de depuración (paso a paso). ✓ SF (signo): Contiene el signo resultante de una operación aritmética (0=positivo; 1=negativo). ✓ ZF (cero): Indica el resultado de una operación aritmética o de comparación (0=resultado diferente de cero; 1=resultado igual a cero). ✓ AF (acarreo auxiliar): Contiene el acarreo del bit 3. Esta bandera se prueba con las instrucciones DAA y DAS para ajustar el valor de AL después de una suma o resta BCD. ✓ PF (paridad): Indica si el número de bits 1, del byte menos significativos de una operación, es par (0=número de bits 1 es impar; 1=número de bits 1 es par). ✓ CF (acarreo): Contiene el acarreo del bit de mayor orden después de una operación aritmética; también almacena el contenido del último bit en una operación de desplazamiento o de rotación. Registro de punteros de instrucción: El registro IP de 16 bits contiene el desplazamiento de dirección de la siguiente instrucción que se ejecuta. El IP está asociado con el registro CS en el sentido de que el IP indica la instrucción actual dentro del segmento de código que se está ejecutando actualmente en la memoria. Figura 3: puntero de Instrucción Un computador emplea una jerarquía de memoria. En los niveles más altos de la jerarquía, la memoria es más rápida, más pequeña y más cara (por bit). Dentro de la CPU hay un conjunto de registros que funciona como un nivel de memoria, por encima de la memoria principal y de la caché en la jerarquía. Los registros de la CPU son de dos tipos: • Registros visibles para el usuario: Permiten al programador de lenguaje máquina o ensamblador, minimizar las referencias a memoria principal cuando optimiza el uso de registros. • Registros de control y de estado: Son utilizados por la unidad de control para controlar el funcionamiento de la CPU, y por programas privilegiados del sistema operativo para controlar la ejecución de programas. No hay una separación bien definida de registros dentro de estas dos categorías. Por ejemplo, en algunas máquinas el contador de programa es visible para el usuario (por ejemplo, en el VAX), pero en muchas no lo es. 2.2.1. Registros visibles para el usuario Un registro visible para el usuario es uno que puede ser referenciado por medio del lenguaje máquina que ejecuta la CPU. Podemos clasificarlos en las siguientes categorías: • Uso general: Pueden ser asignados por el programador a diversas funciones. A veces, su uso dentro del repertorio de instrucciones es ortogonal a la operación. Es decir, cualquier registro de uso general puede contener el operando para cualquier código de operación. Esto proporciona una utilización de registros de uso general auténtico. Con frecuencia, sin embargo, existen restricciones. • Datos: Pueden usarse únicamente para contener datos y no se pueden emplear en el cálculo de la dirección de un operando. • Direcciones: Pueden ser de uso más O menos general, o pueden estar dedicados a un modo de direccionamiento particular. • Códigos de condición: (también llamados indicadores o «flags»), Son bits fijados por el hardware del procesador como resultado de alguna operación. Por ejemplo, una operación aritmética puede producir un resultado positivo, negativo, nulo o con desbordamiento. Además de almacenarse el propio resultado en un registro o en la memoria, se obtiene también un código de condición. Los registros de uso general pueden ser asignados por el programador a diversas funciones. A veces, su uso dentro del repertorio de instrucciones depende de la operación. Es decir, cualquier registro de uso general puede contener el operando para cualquier código de operación. Esto proporciona una utilización de registros de auténtico uso general. Con frecuencia, sin embargo, existen restricciones. Por ejemplo, puede haber registros específicos para operaciones en coma flotante y operaciones de pila. En algunos casos, los registros de uso general pueden ser utilizados para funciones de direccionamiento (este tema será visto más adelante en esta asignatura). En otros casos, hay una separación parcial o total entre registros de datos y registros de direcciones. Los registros de datos pueden usarse únicamente para contener datos, y no se pueden emplear en el cálculo de una dirección de operando. Los registros de dirección pueden ser de uso más o menos generales, o pueden estar dedicados a un modo de direccionamiento particular. Entre otros, se pueden citar los siguientes ejemplos: A. Punteros de segmento: En una máquina con direccionamiento segmentado un registro de segmento contiene la dirección de la base del segmento. Puede haber múltiples registros: por ejemplo, uno para el sistema operativo y otro para el proceso actual. B. Registros índices: Se usan para direccionamiento indexado, y pueden ser auto indexado. C. Puntero de pila: Si existe direccionamiento a pila visible al usuario, la pila está normalmente en memoria, y hay un registro dedicado que apunta a la cabecera de ésta. Esto permite un direccionamiento implícito; es decir, apilar (“push”), desapilar (“pop”), y otras instrucciones dela pila que no necesitan contener un operando explícito referente a ella. Hay aquí varias cuestiones de diseño a estudiar. Una importante, es si usar registros de uso Completamente general o si especializar su uso. D. Con el uso de registros especializados: Generalmente puede quedar implícito en el código de operación a qué tipo de registro se refiere un determinado campo de operando. Figura 4: Registros de uso general El campo de operando sólo debe identificar uno de entre un conjunto de registros especializados, en lugar de uno de entre todos los registros, lo cual ahorra bits. Por otra parte, esta especialización limita la flexibilidad del programador. Este problema de diseño, pero, como se mencionó, la tendencia parece hacia el uso de registros especializados. Otro problema de diseño es el número de registros de uso general o de datos más direcciones que tienen que incluirse. De nuevo, esto afecta al diseño del repertorio de instrucciones, ya que más registros requieren más bits para el campo de operando, parece óptimo alrededor de entre 8 y 32 registros. Menos registros se traducen en más referencias a memoria; más registros no reducen notablemente las referencias a memoria. Sin embargo, una nueva aproximación, que saca partido al uso de cientos de registros, se manifiesta en algunos sistemas RISC. Por último, está la cuestión de la longitud de los registros. Los registros que han de contener direcciones, han de ser lo suficientemente grandes como para albergar la dirección más grande. Los registros de datos deben ser capaces de contener valores de la mayoría de tipos de datos. Algunas máquinas permiten que dos registros contiguos sean usados como uno solo para contener valores de doble longitud. Una última categoría de registros, que es al menos parcialmente visible al usuario, contiene códigos de condición (también llamados “indicadores” o “flags”). Los códigos de condición son bits fijados por el hardware de la CPU como resultado de alguna operación. Por ejemplo, una operación aritmética puede producir un resultado positivo, negativo, nulo, o con desbordamiento. Además de almacenarse el propio resultado en un registro o en la memoria, se obtiene también un código de condición. El código puede ser examinado con posterioridad, como parte de una operación de bifurcación condicional. Los bits de códigos de condición se reúnen en uno o más registros. Normalmente, forman parte de un registro de control. Por lo general, las instrucciones de máquina permiten que estos bits sean leídos por referencia implícita, pero no pueden ser alterados por el programador. En algunas máquinas, una llamada a una subrutina dará lugar a la salvaguarda automática de todos los registros visibles por el usuario, que serán restablecidos en el retorno de la subrutina. La CPU lleva acabo la salvaguarda y restablecimiento como parte de la ejecución de las instrucciones de llamada y retorno, respectivamente. Esto permite a cada subrutina usar independientemente los registros visibles por el usuario. En otras máquinas, es responsabilidad del programador guardar los contenidos de losregistros visibles para el programador relevantes, antes de la llamada a la subrutina, teniendo que incluir en el programa instrucciones para este fin. 2.2.2. Registros de Control y de Estado Hay diversos registros de la CPU que se emplean para controlar su funcionamiento. La mayoría de ellos, en la mayor parte de las máquinas, no son visibles para el usuario. Algunos de ellos pueden ser visibles a instrucciones máquina ejecutada en un modo de control o de sistema operativo. Naturalmente, máquinas diferentes tendrán diferentes organizaciones de registros y usarán distinta terminología. Se incluye aquí una lista razonablemente completa de tipos de registros, con una breve descripción. Son esencial cuatro registros para la ejecución de una instrucción: ✓ Contador de programa (Program Counter, PC): Contiene la dirección de la siguiente instrucción a captar. ✓ Registro de instrucciones (Instruction Register, IR): Contiene la instrucción captada más recientemente. ✓ Registro de direcciones de memoria (Memory Address Register, MAR): Está conectado a las líneas de dirección del bus del sistema. Especifica la dirección de memoria de una operación de lectura o de escritura. ✓ Registro intermedio de memoria o Registro de Datos o Registro de Palabra (MemoryBuffer Register, MBR): Está conectado a las líneas de datos del bus del sistema. Contiene el valor a almacenar en memoria o el último valor leído de memoria. Normalmente, la CPU actualiza el contador de programa después de cada captaci ón de instrucción, de manera que siempre apunta a la siguiente instrucción a ejecutar. Una instrucción de bifurcación o salto también modificará el contenido del PC. La instrucción captada se carga en IR, donde son analizados el código de operación y los campos de operando. Se intercambian datos con la memoria por medio de MAR y de MBR. En un sistema con organización de bus, MAR se conecta directamente al bus de direcciones y MBR directamente al bus de datos. Los registros visibles por el usuario intercambian repetidamente datos con MBR. Los cuatro registros que se acaban de mencionar se usan para la transferencia de datos entre la CPU y la memoria. Dentro de la CPU, los datos tienen que ofrecerse a la ALU para su procesamiento. La ALU: Puede tener acceso directo a MBR y a los registros visibles para el usuario. Como alternativa, puedehaber registros intermedios adicionales en torno a la ALU; estos registros sirven como registros de entrada y salida de la ALU, e intercambian datos con MBR y los registros visibles para el usuario. Todos los diseños de CPU incluyen un registro o un conjunto de registros, conocidos a menudo como palabra de estado del programa (program status Word, PSW), que contiene información de estado. PSW contiene normalmente códigos de condición, además de otra información de estado. Entre los campos o indicadores comunes se incluyen los siguientes: A. Signo: Contiene el bit de signo del resultado de la última operación aritmética. B. Cero: Puesto a uno cuando el resultado es 0. C. Acarreo: Puesto a uno si una operación da lugar a un acarreo (suma) o adeudo (resta) del bit más significativo. Se usa en operaciones aritméticas multipalabra. D. Igual: Puesto a uno si el resultado de una comparación lógica es la igualdad. E. Desbordamiento: Usado para indicar un desbordamiento aritmético. F. Interrupciones habilitadas/inhabilitadas: Usado para permitir o inhabilitar interrupciones. G. Supervisor: Indica si la CPU funciona en modo supervisor o usuario. Únicamente en modo supervisor se pueden ejecutar ciertas instrucciones privilegiadas y se puede acceder a ciertas áreas de memoria. Figura 5: indicadores de la ALU 2.2.3.- Ejemplos de organización de registros de CPU reales Resulta instructivo examinar y comparar las organizaciones de registros de sistemas análogos. En esta sección, examinamos dos microprocesadores de 16 bits que fueron diseñados aproximadamente al mismo tiempo: el Motorola MC68000 [STRI79] y el lntel 8086 [MORS78]. Las Figuras 6: (a) y (b). Representan la organización de registros de cada uno de ellos; los registros estrictamente internos, tales como el registro de dirección de memoria, no se muestran. En la Figura 6: (c). Se ilustra un segundo aspecto instructivo acerca del diseño de la organización de los registros. Esta figura muestra la organización de los registros visibles por el usuario en el Intel 80386 [ELAY85), un microprocesador de 32 bits diseñado como una ampliación del 8086'. El MC68000 distribuye sus registros de 32 bits en ocho de datos y nueve de direcciones. Los ocho registros de datos se usan principalmente para manipulación de datos y también se usan en direccionamiento como registros índice. El Intel 8086 usa un enfoque diferente para la organización de los registros. Cada uno de los registros tiene un uso especial, aunque algunos registros se pueden emplear también para un uso general. El 8086 contiene cuatro registros de datos de 16 bits que son direccionables como registros de bytes o como registros de 16 bits, y cuatro registros punteros e índices de 16 bits. Los registros de datos pueden utilizarse como de uso general en algunas instrucciones. En otras, los registros se usan implícitamente. La unidad de procesamiento central (CPU) realiza operaciones en los datos. En la mayoría de las arquitecturas consta de tres partes: una unidad aritmética lógica (ALU), una unidad de control y un conjunto de registros, ubicaciones de almacenamiento rápido. Los registros son lugares de almacenamiento rápido independiente que guardan datos en forma temporal. Registros múltiples son necesarios para facilitar el funcionamiento del CPU. Podemos dividir las partes que componen un ordenador en tres grandes categorías o subsistemas: la unidad de procesamiento central (CPU), la memoria principal y el subsistema de entrada /salida. 2.3. El ciclo de instrucción Al encender una computadora, su CPU arranca de un estado inicial conocido (Reset) el cuál le obliga a comenzar siempre desde el mismo punto de partida. El fabricante (en este caso yo) fija el lugar, la dirección de la celda de memoria donde se requiere que esté la primer instrucción que la CPU va a ejecutar. La tarea de una CPU es traer instrucciones desde la memoria y cumplir con lo que ellas le indican, al finalizar la ejecución de la instrucción, la CPU queda en conocimiento de donde se encuentra la que sigue. Para comenzar, solo tiene que saber dónde se encuentra la primera porque desde esa en adelante, se asume que vienen en secuencia, a menos que las propias instrucciones le instruyan que debe seguir por otro lado, provocando saltos o desvíos del curso o flujo del programa. Un Ciclo de instrucción Incluye los siguientes subciclos: ✓ Captación: Elevar la siguiente instrucción de la memoria a la CPU. ✓ Ejecución: Interpretar el código de operación y llevar a cabo la operación indicada. ✓ Interrupción: Si las interrupciones están habilitadas y ha ocurrido una interrupción, salvar el estado del proceso actual y atender la interrupción. El Ciclo Indirecto La ejecución de una instrucción puede involucrar a uno o más operandos en memoria, cada uno de los cuales requiere un acceso a memoria. Además, si se usa direccionamiento indirecto serán necesarios accesos a memoria adicionales. Podemos considerar la captación de direcciones indirectas como un subciclo de instrucción más. La principal línea de actividad consiste en alternar las actividades de captación y ejecución de instrucciones. Después de que una instrucción sea captada, es examinada para determinar si incluye algún direccionamiento indirecto. Si es así, los operandos requeridos se captan usando direccionamiento indirecto. Tras la ejecución se puede procesar una interrupción antes de la captación de la siguiente instrucción. Figura 7. Ciclo de Instrucción Esta figura ilustra más correctamente la naturaleza del ciclo de instrucción. Una vez que una instrucción es captada, deben identificarse sus campos de operandos. Se capta entonces de la memoria cada operando de entrada, y este proceso puede requerir direccionamiento indirecto. Los operandos ubicados en registros no necesitan ser captados. Una vez que se ejecuta la operación, puede ser necesario un proceso similar para almacenar el resultado en la memoria principal. Figura 8. Búsqueda La CPU cuenta con una serie de celdas de almacenamiento internas llamadas Registros, algunos de ellos tienen un uso dedicado y controlan el funcionamiento de la máquina. PC = Program Counter o Contador de Programa: Es un registro dedicado de la CPU que en la fase de Búsqueda apunta a la siguiente instrucción del programa, o más exactamente al primer byte de la instrucción donde se almacena el código de operación (Operative Code = OpCode). Este código es el que se decodifica e indica que hacer y que operandos intervienen. Para luego de haber obtenido los operandos poder pasar a ejecutar la tarea. IR = Instruction Register o Registro de Instrucción: Es un registro dedicado de la CPU que almacena el OpCode de la instrucción traída en la búsqueda del presente ciclo. Es el valor cargado en IR el que debe decodificarse. Las instrucciones en memoria, para esta máquina, pueden tener uno o dos bytes. Si la instrucción es de un byte, ya se puede ejecutar porque el valor de IR define completamente lo que hay que hacer. Si la instrucción es de dos bytes, hay que leer el siguiente byte el cual aporta información adicional, requerida para la ejecución. Antes de la decodificación no se sabe si la instrucción es de uno o dos bytes. Recordemos que las operaciones que se pueden realizar son siempre entre el valor en el Acumulador y un operando almacenado en Memoria, lo cual implica que hay que saber la ubicación del mismo o sea su Dirección. Las tareas que debe realizar un procesador son: ➢ Captar instrucción: La CPU lee una instrucción de la memoria. ➢ Interpretar instrucción: La instrucción se decodifica para determinar qué acción es necesaria. ➢ Captar datos: La ejecución de una instrucción puede exigir leer datos de la memoria o de un módulo de E/S. ➢ Procesar datos: La ejecución de una instrucción puede exigir llevar a cabo alguna operación aritmética o lógica con los datos. Escribir datos: Los resultados de una ejecución pueden exigir escribir datos en la memoria o en un módulo de E/S. Para hacer esto, es obvio que la CPU necesita almacenar algunos datos temporalmente. Debe recordar 2.3.1 ciclo fetch-decode-execute Un ciclo de instrucción (también llamado ciclo de fetch-and-execute o ciclo de fetchdecode-execute en inglés) es el período que tarda la unidad central de proceso (CPU) en ejecutar una instrucción de lenguaje máquina. Comprende una secuencia de acciones determinada que debe llevar a cabo la CPU para ejecutar cada instrucción en un programa. Cada instrucción del juego de instrucciones de una CPU puede requerir diferente número de ciclos de instrucción para su ejecución. Un ciclo de instrucción está formado por uno o más ciclos máquina; Para que cualquier sistema de proceso de datos basado en microprocesador (por ejemplo un ordenador) o microcontrolador (por ejemplo un reproductor de MP3) realice una tarea (programa) primero debe buscar cada instrucción en la memoria principal y luego ejecutarla. Secuencia de acciones del ciclo de instrucción; Habitualmente son cuatro los eventos o pasos que se llevan a cabo en cada ciclo de instrucción (ciclo de fetch): Buscar la instrucción en la memoria principal Se vuelca el valor del contador de programa sobre el bus de direcciones. Entonces la CPU pasa la instrucción de la memoria principal a través del bus de datos al Registro de Datos de Memoria (MDR). A continuación el valor del MDR es colocado en el Registro de Instrucción Actual (CIR), un circuito que guarda la instrucción temporalmente de manera que pueda ser decodificada y ejecutada. El decodificador de instrucción interpreta e implementa la instrucción. El registro de instrucción (IR) mantiene la instrucción en curso mientras el contador de programa (PC, program counter) guarda la dirección de memoria de la siguiente instrucción a ser ejecutada. Recogida de datos desde la memoria principal También se lee la dirección efectiva de la memoria principal si la instrucción tiene una dirección indirecta, y se recogen los datos requeridos de la memoria principal para ser procesados y colocados en los registros de datos. Ejecutar la instrucción A partir del registro de instrucción, los datos que forman la instrucción son decodificados por la unidad de control. Ésta interpreta la información como una secuencia de señales de control que son enviadas a las unidades funcionales relevantes de la CPU para realizar la operación requerida por la instrucción. Figura 9. Ciclo fetch-decode-execute En este ciclo las fases(o sub ciclos): búsqueda y ejecución (cada fase tiene etapas o actividades) FASE FETCH ✓ Cargar la siguiente instrucción ✓ Incrementar el secuenciador ✓ Interpretar la Instrucción FASE EXECUTE ▪ ▪ ▪ ▪ Cargar los operandos Ejecutar la operación Guardar el resultado Verificar si hay solicitudes de interrupción 2.3.2. Segmentación de instrucciones La segmentación de instrucciones es similar al uso de una cadena de montaje en una fábrica de manufacturación. En las cadenas de montaje, el producto pasa a través de varias etapas de producción antes de tener el producto terminado. Cada etapa o segmento de la cadena está especializada en un área específica de la línea de producción y lleva a cabo siempre la misma actividad. Esta tecnología es aplicada en el diseño de procesadores eficientes. A estos procesadores se les conoce como pipeline processors. Un pipeline processor está compuesto por una lista de segmentos lineales y secuenciales en donde cada segmento lleva a cabo una tarea o un grupo de tareas computacionales. Puede ser representado gráficamente en dos dimensiones, en donde en el eje vertical encontramos los segmentos que componen el pipeline y en el segmento horizontal representamos el tiempo. (En la figura se muestran la segmentación de instrucciones del pipeline). Figura 10.- segmentación de instrucciones Hay tres aspectos importantes que deben ser considerados en pipeline. Lo primero que debemos observar es que el trabajo es dividido en piezas que más o menos ajustan dentro de los segmentos que componen el pipeline. Segundo, para que el pipeline trabaje de forma eficiente es necesario que las particiones de trabajo tomen aproximadamente la misma cantidad de tiempo. De así, el segmento que requiera más tiempo (T) hará que el pipeline se retrase y cada segmento requerirá T unidades de tiempo para completar su trabajo. Esto quiere decir que los segmentos rápidos estarán mucho tiempo ociosos. Tercero, para que el pipeline funcione adecuadamente, deben ocurrir pocas excepciones o hazards (riesgos) que puedan causar retardos o errores en el pipeline. En caso de ocurrir errores, la instrucción tiene que ser cargada nuevamente en el pipeline y se debe reiniciar la misma instrucción que ocasionó la excepción. Como una primera aproximación, consideremos una subdivisión del procesamiento de una instrucción en dos etapas o segmentos: ➢ Captación de la instrucción ➢ Ejecución de la instrucción 2.3.3.- Conjunto de instrucciones: Características y Funciones Un conjunto de instrucciones o repertorio de instrucciones, juego de instrucciones o ISA (del inglés Instruction Set Architecture, Arquitectura del Conjunto de Instrucciones) es una especificación que detalla las instrucciones que una CPU de un ordenador puede entender y ejecutar, o el conjunto de todos los comandos implementados por un diseño particular de una CPU. El término describe los aspectos del procesador generalmente visibles a un programador, incluyendo los tipos de datos nativos, las instrucciones, los registros, la arquitectura de memoria y las interrupciones, entre otros aspectos. Existe principalmente de 3 tipos: CISC (Complex Instruction Set Computer), RISC (Reduced Instruction Set Computer) y SISC (Simple Instruction Set Computing). La arquitectura del conjunto de instrucciones (ISA) se emplea a veces para distinguir este conjunto de características de la micro arquitectura, que son los elementos y técnicas que se emplean para implementar el conjunto de instrucciones. Entre estos elementos se encuentran las microinstrucciones y los sistemas de caché Procesadores con diferentes diseños internos pueden compartir un conjunto de instrucciones; por ejemplo, el Intel Pentium y AMD Athlon implementan versiones casi idénticas del conjunto de instrucciones x86, aunque tienen diseños diferentes. Cualquier conjunto de instrucciones se puede implementar de varias maneras. Todas las maneras de implementar un conjunto de instrucciones dan el mismo modelo programado, y todas pueden hacer funcionar los mismos ejecutables binarios. Las varias maneras de implementar un conjunto de instrucciones dan diversas compensaciones entre el coste, el funcionamiento, el consumo de energía, el tamaño, el etc. La función de una computadora es la ejecución de programas. Los programas se encuentran localizados en memoria y consisten de instrucciones. La CPU es quien se encarga de ejecutar dichas instrucciones a través de un ciclo denominado ciclo instrucciones. Las instrucciones consisten de secuencias de 1 y 0 (binarias) llamadas código máquina y no son legibles para las personas. Por ello se emplean lenguajes como el ensamblador (bajo nivel) o lenguajes de programación como pascal (alto nivel). Las instrucciones son ejecutadas por la CPU a grandes velocidades. Desde una visión muy simple, el llevar a cabo las instrucciones consiste de dos etapas: • Leer (fetch) Memoria • B) Ejecutar (execute) instrucción • El programa se ejecuta a través de una iteración constante de estos dos etapas instrucción de 2.3.4.- Modos de direccionamiento y formatos Los llamados modos de direccionamiento son las diferentes maneras de especificar en informática un operando dentro de una instrucción en lenguaje ensamblador. Un modo de direccionamiento especifica la forma de calcular la dirección de memoria efectiva de un operando mediante el uso de la información contenida en registros y / o constantes, contenida dentro de una instrucción de la máquina o en otra parte. Diferentes arquitecturas de computadores varían mucho en cuanto al número de modos de direccionamiento que ofrecen desde el hardware. Eliminar los modos de direccionamiento más complejos podría presentar una serie de beneficios, aunque podría requerir de instrucciones adicionales, e incluso de otro registro. Se ha comprobado que el diseño de CPUs segmentadas es mucho más fácil si los únicos modos de direccionamiento que proporcionan son simples. La mayoría de las máquinas RISC disponen de apenas cinco modos de direccionamiento simple, mientras que otras máquinas CISC tales como el DEC VAX tienen más de una docena de modos de direccionamiento, algunos de ellos demasiado complejos. El mainframe IBM System/360 disponía únicamente de tres modos de direccionamiento; algunos más fueron añadidos posteriormente para el System/390. Cuando existen solo unos cuantos modos, estos van codificados directamente dentro de la propia instrucción (Un ejemplo lo podemos encontrar en el IBM/390, y en la mayoría de los RISC). Sin embargo, cuando hay demasiados modos, a menudo suele reservarse un campo específico en la propia instrucción, para especificar dicho modo de direccionamiento. El DEC VAX permitía múltiples operandos en memoria en la mayoría de sus instrucciones, y reservaba los primeros bits de cada operando para indicar el modo de direccionamiento de ese operando en particular. Especificación de modos de direccionamiento y formatos Un modo de direccionamiento especifica la forma de calcular la dirección de memoria efectiva de un operando mediante el uso de la información contenida en registros y / o constantes, contenida dentro de una instrucción de la máquina o en otra parte. • Direccionamiento Implícito: En este modo de direccionamiento no es necesario poner ninguna dirección de forma explícita, ya que en el propio código de operación se conoce la dirección del (de los) operando(s) al (a los) que se desea acceder o con el (los) que se quiere operar. • Direccionamiento Inmediato: En este modo el operando es especificado en la instrucción misma. En otras palabras, una instrucción de modo inmediato tiene un campo de operando en vez de un campo de dirección. El campo del operando contiene el operando actual que se debe utilizar en conjunto con la operación especificada en la instrucción. Las instrucciones de modo inmediato son útiles para inicializar los registros en un valor constante. Cuando el campo de dirección especifica un registro del procesador, la instrucción se dice que está en el modo de registro. • Direccionamiento Directo: El campo de operando en la instrucción contiene la dirección en memoria donde se encuentra el operando. En este modo la dirección efectiva es igual a la parte de dirección de la instrucción. El operando reside en la memoria y su dirección es dada directamente por el campo de dirección de la instrucción. En una instrucción de tipo ramificación el campo de dirección especifica la dirección de la rama actual. • Direccionamiento Indirecto: El campo de operando contiene una dirección de memoria, en la que se encuentra la dirección efectiva del operando. • Direccionamiento Absoluto: El campo de operando contiene una dirección en memoria, en la que se encuentra la instrucción. • Direccionamiento Relativo: El registro referenciado implícitamente es el contador de programa. El campo de direcciones se trata como un número en complemento a 2, y representa un desplazamiento relativo al PC. • Direccionamiento con registro base: En este direccionamiento el registro referenciado contiene una dirección de memoria y el campo de dirección contiene un desplazamiento desde dicha dirección. • Direccionamiento indexado: El campo de direcciones referencia una dirección de memoria principal, y el registro referenciado contiene un desplazamiento positivo desde esa dirección. En el indexado se considera que el campo de direcciones es una dirección de memoria. • Direccionamiento autoincrementa: En este método, la dirección del operando se encuentra en un registro y éste es incrementado después de acceder al operando, en el tamaño del mismo • Direccionamiento autodecrementa: En este modo para obtener la dirección del operando hay que decremento un registro en el tamaño del operando; el nuevo contenido del registro después de efectuar esa operación es la dirección del operando. Contar con diferentes formatos de instrucciones, implica contar con diferentes formas de obtener los operandos de las instrucciones. Por lo general a estas múltiples formas se les conoce como modos de direccionamiento. Los modos de direccionamiento en MIPS son: Direccionamiento por registro, donde los operandos son registros. Los datos a operar están contenidos en 2 registros de 32 bits y el resultado será colocado en otro registro, del mismo tamaño. ❖ Ejemplos de instrucciones que usan este modo de direccionamiento: add, sub, slt, etc. Direccionamiento base o desplazamiento, donde uno de los operandos está en una localidad de memoria cuya dirección es la suma de un registro y una constante que forma parte de la misma instrucción. ❖ Ejemplos de instrucciones que usan este modo de direccionamiento: lw, sw, etc. Direccionamiento inmediato, donde uno de los operandos es una constante que está en la misma instrucción. ❖ Ejemplos de instrucciones que usan este modo de direccionamiento: addi, slti, etc. Direccionamiento relativo al PC, donde se forma una dirección sumando una constante, que está en la instrucción, con el registro PC (Program Counter). El resultado de la suma corresponde a la dirección destino si un brinco condicional se va a realizar. ❖ Ejemplos de instrucciones que usan este modo de direccionamiento: beq y bne. Direccionamiento pseudo directo, donde la dirección destino de un salto corresponde a la concatenación de 26 bits que están en la misma instrucción con los bits más significativos del PC. ❖ Ejemplos de instrucciones que usan este modo de direccionamiento: j y jal. Es importante mencionar que estamos estudiando una arquitectura con direcciones de 32 bits, sin embargo, MIPS, como muchas otras arquitecturas, tiene una extensión que maneja direcciones de 64 bits. Esto como una respuesta a la necesidad de manejar programas cada vez más grandes. 2.4.- Casos de estudios de CPU reales A. I-8086 Los modos de direccionamiento del 8086 (Crawford & Gelsinger, 1987) son muy irregulares. Los registros del procesador, se usan para contener los datos con que se está trabajando puesto que el acceso a los registros es mucho más rápido que los accesos a memoria. Se pueden realizar operaciones aritméticas y lógicas, comparaciones, entre otras. Hay un campo para un registro (reg), que especifica uno de los operandos, y otros dos campos (mod y r/m) para el otro. Los modos del 8086 son indirectos por registro, indexados o directos por registro. Registros Propósito General: • Registro AX: El registro AX es el registro acumulador, es utilizado para operaciones que implican entrada/salida, y multiplicación y división (estas dos últimas en conjunto con el registro DX) • Registro BX: El registro BX es el registro base, y es el único registro de propósito general que puede ser un índice para direccionamiento indexado • Registro CX: El registro CX es conocido como el registro contador. Puede contener un valor para controlar el número de veces que un ciclo se repite. • Registro DX: El registro DX es el registro de datos. Registros Índice: • Registro SI: El registro índice fuente de 16 bits es requerido por algunas operaciones con cadenas de caracteres. • Registro DI: El registro índice destino también es requerido por algunas operaciones con cadenas de caracteres. Registros Apuntadores: • Registro SP: Apuntador de pila de 16 bits proporciona un valor de desplazamiento que se refiere a la palabra actual que está siendo procesada en la pila. • Registro BP: El apuntador base de 16 bits facilita la referencia de parámetros dentro de la pila. Figura 11: Arquitectura de los Registros B. Motorola 68000 En el Motorola 68000 el mismo direccionamiento lleva implícito el tipo de registro sobre el que trabaja (direcciones o datos). Está basado en dos bancos de 8 registros de 32 bits. Un banco es de datos (Dn) y el otro de punteros (An). Además contiene un contador de programa de 32 bits y un registro de estado de 16 bits. Los registros de datos (D0 a D7) se pueden usar como registros de 32 bits (.l), 16 bits (.w) y 8 bits (.b). Cualquiera de ellos puede usarse como acumulador, índice o puntero. Acepta los siguientes modos de direccionamiento: ✓ ✓ ✓ ✓ ✓ ✓ ✓ Implícito (o inherente). Inmediato. Absoluto. Directo a registro. Indirecto. Relativo a PC con desplazamiento. Relativo a PC con índice y desplazamiento. C. 80386 Para este microprocesador existe un modo nuevo que requiere un byte adicional denominado SIB (escala, índice, base) que se añade al byte de operandos y cuyo formato es el siguiente: Ese byte adicional especifica un factor de escala y dos registros (base e índice). El 80386 tiene registros de 32 bits en las siguientes categorías: Registros de propósito general. Registros de segmento. Puntero de instrucciones Indicadores. Registros de control (nuevos en el 80386). Registros de direcciones de sistema. Registros de depuración (debug) (nuevos en el 80386). Registros de test (nuevos en el 80386). D. Procesador I3 Línea de microprocesadores Intel, gama baja. 3 era generación 2010. Características: • • • • • Procesador de 2 núcleos 4 hilos de procesamiento en paralelo Tarjeta gráfica integrada Controlador de memoria Controlador PCI Express 2.0 integrado Conclusión En este trabajo se presentó un panorama general de la organización de la unidad central de procesamiento de una computadora. Muchas variaciones de las organizaciones aquí presentadas se encuentran en las máquinas disponibles en el comercio. La elección de una organización específica implica tener que equilibrar velocidad de ejecución y costo de implante. También se ve afectada por otros factores, tales como la tecnología que se emplee, la flexibilidad de modificación, o el deseo de proporcionar algunas capacidades especiales en el conjunto de instrucciones de la computadora. Se presentaron dos enfoques en lo relativo al implante de la unidad de control de una CPU: control fijo y control micro programado. El control micro programado proporciona considerable flexibilidad en el implante de conjuntos de instrucciones. También facilita la adición de nuevas instrucciones a máquinas ya existentes. Cuando se presentó por primera vez el control micro programado, resultaba mucho más lento que el control fijo, debido a la baja velocidad del almacenamiento ROM. Sin embargo, los avances en la tecnología ROM han reducido las diferencias de velocidad. Como resultado, ahora el uso del control micro programado es mucho más frecuente debido a su flexibilidad. Bibliografía ❖ Estructura y diseño de Computadores David A. Patterson, John L. Hennessy Ed. Reverté S.A. 2000 Capítulo 5: Trata el tema desde la perspectiva del diseño del camino de datos y control. Aborda la realización de un esquema simple y de uno multicilo para ir profundizando en temas de microprogramación y del tratamiento de excepciones por la unidad de control, sobre la realización de la unidad de control mediante circuitería. Analiza las unidades de control combinatorias, las de máquinas de estados finitos de control y los secuenciadores. ❖ Fundamentos de los Computadores Pedro de Miguel Anasagasti Ed. Paraninfo. 1999 Capítulo 7: Enfoca el tema desde las operaciones elementales. Aborda el diseño de la unidad de control desde las perspectivas cableada y microprogramada. Finalmente, trata el tratamiento de las interrupciones y cepos por parte de la unidad de control y el arranque del computador ❖ Estructura de Computadores José Mª Angulo Usategui Ed. Paraninfo. 1996 Capítulo 5: Analiza las operaciones elementales y las señales de control de las máquinas por el autor diseñadas: MS y MS+. ❖ Arquitectura de Computadores J. Antonio de Frutos, Rafael Rico Ed. Universidad de Alcalá. 1995 Capítulo 4: Desarrolla el tema de la unidad de control del computador. Partiendo de las operaciones elementales y por medio de un computador elemental desarrollado por los autores se llega al concepto de cronogramas. ❖ Arquitectura de Computadores. Un Enfoque cuantitativo John L. Hennessy y David A. Patterson Ed. Mc Graw-Hill. 1993 ❖ ECKHOUSE, Richard, L. Robert Morris. Sistemas de Minicomputadoras. Organización, Programación y Aplicaciones (PDP-11). 1982. Editorial Dossat, S.A. Madrid. España. ❖ GORDON, Davis. Management Information Systems: Conceptual, Foundations, Structure, and Development. 1974. McGraw Hill Inc. United States of America. ❖ HAMACHER V. Carl, Zvonko G. Vranesic, Safwat G. Zaky. Computer Organization. 1987. McGraw Hill Inc. United States of America. ❖ HERNÁNDEZ CABALLERO, S. Enciclopedia Temática de Informática. Tomo 1. 1990. Maveco de Ediciones S.A. España. ❖ Abel, P. (1996). Lenguaje Ensamblador y Programación para IBM PC y Compatibles. Prearson Educación. ❖ http://www.itescam.edu.mx/portal/asignatura.php?clave_asig=SCD1003&carrera=ISIC-2010-224&id_d=157. ❖ http://www.itescam.edu.mx/principal/sylabus/fpdb/recursos/r89165.PDF ❖ http://www.itescam.edu.mx/principal/sylabus/fpdb/recursos/r89167.PDF ❖ http://www.itescam.edu.mx/principal/sylabus/fpdb/recursos/r89166.PDF ❖ https://es.scribd.com/doc/109271102/ciclo-f ❖ http://hpc.aut.uah.es/~nacho/AII/tema3.v4.6.pdf ❖ https://es.scribd.com/doc/30420235/Ciclo-Fetch