Arquitectura I - Organización Básica de Computadora - GRAN PDF
Document Details
Uploaded by Deleted User
FaCEN - UNCA
2014
Tags
Related
- Lab 1: Introduction to the Arduino Microcomputer PDF
- Chap-05-Basic_Computer_Org_and_Design.pdf
- Computer Organization PDF
- Computer Architecture Lecture 1 PDF
- SEE Final Question Bank - Computer Organization and Architecture PDF
- Computer Organization and Architecture Lecture Notes Fall 2024 - Mansoura University PDF
Summary
This document is a course, specifically the third unit, introducing the basic organization of a computer. It details different aspects like instruction codes, registers, input-output, and addressing modes.
Full Transcript
Unidad III - ORGANIZACIÓN BÁSICA DE UNA COMPUTADORA Cátedra Arquitectura del Procesador I FACEN - UNCa 26 de junio de 2014 Índice 1. Códigos de Instrucción...
Unidad III - ORGANIZACIÓN BÁSICA DE UNA COMPUTADORA Cátedra Arquitectura del Procesador I FACEN - UNCa 26 de junio de 2014 Índice 1. Códigos de Instrucción 2 2. Registros de la computadora básica 6 3. Instrucciones de computadora 9 4. Ciclo de Instrucción 12 5. Instrucciones de referencia a memoria 13 6. Entrada-Salida e interrupción 15 7. Formatos de las instrucciones 22 8. Modos de direccionamiento 28 9. Tipos de interrupciones 34 10.RISC 36 Índice de tablas 1. Registros de la computadora básica............... 8 2. Instrucciones de la computadora básica............ 11 1 ÍNDICE DE FIGURAS 2 Índice de figuras 1. Organización de programa almacenado............. 5 2. Ejemplo de direccionamiento directo e indirecto........ 7 3. Registros de la computadora básica y memoria........ 8 4. Formatos de instrucción de la computadora básica...... 9 5. Ciclo de Instrucción....................... 13 6. Instrucciones de referencia a memoria............. 14 7. Configuración de entrada-salida................. 16 8. Instrucciones de entrada-salida................. 17 9. Ejemplo del ciclo de interrupción................ 20 10. Formato de instrucciones con campo de modo......... 29 11. Ejemplo numérico para modos de direccionamiento...... 33 12. Lista de direcciones efectivas y operandos del ejemplo numérico 34 1. Códigos de Instrucción En esta unidad estudiaremos una computadora básica y se verá cómo puede especificarse su operación con enunciados de transferencia de registros. La organización de la computadora se define mediante sus registros internos, la estructura de temporización y control, y el conjunto de instrucciones que utiliza. Después se verá, en detalle, el diseño de la computadora. Aunque la computadora básica que se presenta es muy pequeña en comparación con las computadoras comerciales, tiene la ventaja de ser lo suficientemente simple para mostrar el proceso de diseño sin demasiadas complicaciones. La organización interna de un sistema digital está definida por la se- cuencia de microoperaciones que ejecuta sobre los datos almacenados en sus registros. La computadora digital de propósito general puede ejecutar varias microoperaciones y, además, puede recibir instrucciones acerca de la secuen- cia especı́fica de operaciones que debe realizar. El usuario de una compu- tadora puede controlar el proceso mediante un programa. Un programa es un conjunto de instrucciones que especifican las operaciones, operandos y la secuencia mediante la cual tiene que ocurrir el procesamiento. La tarea de procesamiento de datos puede alterarse al especificar un nuevo programa con instrucciones diferentes o especificando las mismas instrucciones con otros datos. Una instrucción de computadora es un código binario que especifica 1 CÓDIGOS DE INSTRUCCIÓN 3 una secuencia de microoperaciones para la computadora. Los códigos de instrucciones y los datos se almacenan en la memoria. La computadora lee cada instrucción de la memoria y la coloca en un registro de control. En- tonces el control interpreta el código binario de la instrucción y procede a ejecutarlo mediante una secuencia de microoperaciones. Cada computado- ra tiene un conjunto de instrucciones único. La capacidad de almacenar y ejecutar instrucciones, el concepto de programa almacenado, es la propiedad más importante de una computadora de uso general. Un código de instrucción es un grupo de bits que instruye a la compu- tadora sobre cómo ejecutar una operación especı́fica. Por lo general, se divide en partes y cada una tiene una interpretación propia. La parte más básica de un código de instrucción es su parte de operación. El código de operación de una instrucción es un grupo de bits que define operaciones, como sumar, restar, multiplicar, desplazar y complementar. El número de bits requerido para el código de operación de una instrucción depende de la cantidad total de operaciones disponibles en la computadora. El código de operación debe estar formado de por lo menos n bits para un conjunto dado de 2n (o menor) operaciones diferentes. Como ejemplo, consideremos una computadora con 64 operaciones diferentes, una de las cuales es la operación sumar (ADD). El código de operación consta de seis bits, (¿por qué?) con una configuración de bits 110010 asignada a la operación ADD. Cuando este código de ope- ración se decodifica en la unidad de control, la computadora emite señales de control para leer un operando de la memoria y sumar el operando a un registro del procesador. En este punto, debemos reconocer la relación entre una operación de computadora y una microoperación. Una operación es parte de una instruc- ción almacenada en la memoria de la computadora. Es un código binario que le dice a la computadora que ejecute una operación especı́fica: La unidad de control recibe la instrucción de la memoria e interpreta los bits de código de la operación. Después emite una secuencia de señales de control para iniciar microoperaciones en los registros internos de la computadora. Para cada código de operación, el control envı́a una secuencia de microoperaciones necesarias para la implantación del hardware de la operación especificada Por esta razón, a veces un código de operación se denomina macrooperación porque especifica un conjunto de microoperaciones. La parte operativa de un código de instrucción especifica la operación, que se va a realizar. Esta operación debe ejecutarse sobre algunos datos almacenados en los registros del procesador o en la memoria. Por lo tanto un código dé instrucción debe especificar no sólo la operación, sino tam- bién los registros o las palabras de la memoria donde se van a encontrar los operandos, al igual que el registro o la palabra de memoria donde se va a almacenar el resultado. Pueden especificarse palabras de memoria en 1 CÓDIGOS DE INSTRUCCIÓN 4 los códigos de instrucción mediante sus direcciones. Pueden especificarse re- gistros del procesador al asignar a la instrucción otro código binario de k bits que especifique uno de 2k registros. Existen muchas variaciones para “componer” el código binario de instrucciones, y cada computadora tiene su propio formato de código de instrucciones particular. Los diseñadores de computadoras formulan los formatos de código de instrucciones y especifican la arquitectura de la computadora. En esta unidda se eligió un código de instrucción particular para explicar la organización y el diseño básico de las computadoras digitales. Organización de un programa almacenado La manera más simple de organizar una computadora es tener un registro de procesador y un formato de código de instrucción con dos partes. La primera parte especifica la operación que se va a ejecutar y la segunda especifica una dirección. La dirección de memoria le dice al control dónde encontrar un operando en la memoria. Este operando se lee en la memoria y se utiliza como los datos que se van operar o junto con los datos almacenados en el registro del procesador. La Figura 1 muestra este tipo de organización. Las instrucciones están almacenadas en una sección de la memoria y los datos en otro. Para una unidad de memoria con 4096 palabras necesitamos 12 bits para especificar una dirección, dado que 212 = 4096. Si almacenamos cada código de ins- trucción en una palabra de memoria de 16 bits, tenemos disponibles cuatro bits para el código de operación para especificar una de 16 operaciones po- sibles y 12 bits para especificar la dirección de un operando. El control lee una instrucción de 16 bits de la parte de programa de la memoria. Utiliza la parte de dirección de 12 bits de la instrucción para leer un operando de 16 bits de la porción de datos de la memoria. Después ejecuta la operación especificada por el código de operación. Las computadoras que tienen un registro de procesador único por lo general lo nombran acumulador y lo etiquetan AC. La operación se ejecuta con el operando de la memoria y el contenido del AC. Si una operación de un código de instrucción no necesita un operando de la memoria, puede usarse el resto de los bits de la instrucción para otros propósitos. Por ejemplo, las operaciones como borrar (limpiar) AC, complementar AC e, incrementar AC operan sobre los datos almacenados en el registro AC. No necesitan un operando de la memoria. Para estos tipos de operaciones, no se necesita la segunda parte del código de instrucción (del bit 0 al 11) para especificar una dirección de memoria y puede utilizarse para especificar otras operaciones para la computadora. Direccionamiento indirecto En ocasiones es conveniente utilizar los bits de direccionamiento de un códi- go de instrucción no como dirección sino como el operando real. Cuando la 1 CÓDIGOS DE INSTRUCCIÓN 5 Figura 1: Organización de programa almacenado segunda parte de un código de instrucción especifica un operando, se dice que la instrucción tiene un operando inmediato. Cuando la segunda parte especifica la dirección de un operando se dice que la instrucción tiene un direccionamiento directo. Esto contrasta con una tercera posibilidad llama- da direccionamiento indirecto, en el cual los bits de la segunda parte de la instrucción representan la dirección de una palabra de memoria, en la cual se encuentra la dirección del operando. Se puede utilizar un bit del códi- go de instrucción para diferenciar entre un direccionamiento directo y uno indirecto. Como ejemplo de esta configuración, consideremos el formato de códi- go de instrucción que se muestra en la figura 2(a). Está formado de un código de operación de 3 bits, una dirección de 12 bits, y un bit de mo- do de direccionamiento indirecto representado por I. El bit de modo es 0 para un direccionamiento directo y 1 para un direccionamiento indirecto. Una instrucción de direccionamiento directo se muestra en la figura 2(b). Está colocada en la dirección 22 en la memoria. El bit I es 0, por lo que la instrucción se reconoce como una instrucción de direccionamiento directo. El código de operación especifica una instrucción de Suma ADD, y la parte de dirección es el equivalente binario de 457. El control encuentra la opera- 2 REGISTROS DE LA COMPUTADORA BÁSICA 6 ción en la memoria en la dirección 457 y la suma al contenido del AC. La instrucción en la dirección 35 que se muestra en la figura 2(c) tiene un bit de modo I = 1. Por lo tanto, se reconoce como una instrucción de direccio- namiento indirecto. La parte de dirección es el equivalente binario de 300. El control va a la dirección 300 para encontrar la dirección del operando. La dirección del operando en este caso es 1350. El operando encontrado en la dirección 1350 se suma después al contenido de AC. La instrucción de direc- cionamiento indirecto necesita dos referencias a la memoria para buscar un operando. La primera referencia se necesita para leer la dirección del operan- do; la segunda es, para el operando mismo. Definimos la dirección efectiva como la dirección del operando en una instrucción del tipo de computación o la dirección objetivo en una instrucción de tipo transferencia del programa. Por lo tanto, la dirección efectiva en la instrucción de la figura 2(b) es 457 y en la instrucción de la figura 2(c) es 1350. En la computadora que se presenta en esta unidad se utilizan los modos de direccionamiento directo e indirecto. La palabra de memoria que contiene la dirección de un operando en una instrucción de direccionamiento indirecto se utiliza como un puntero a un arreglo de datos. El puntero puede colocarse en un registro del procesador y no en la memoria; como se hace en las computadoras comerciales. 2. Registros de la computadora básica Por lo general, las instrucciones de computadora se almacenan en posi- ciones de memoria consecutivas y se ejecutan de manera secuencial, una a la vez. El control lee una instrucción de una dirección especı́fica de la memoria y la ejecuta. Después continúa leyendo la siguiente instrucción en secuencia y la ejecuta y ası́ sucesivamente. Este tipo de secuencia de instrucciones necesita un contador para calcular la dirección de la siguiente instrucción después de que se termina la ejecución de la instrucción presente. También es necesario proporcionar un registro en la unidad de control para almacenar el código de instrucción después de que se lee de la memoria. La computado- ra necesita los registros del procesador para manipular datos y un registro para contener una dirección de memoria. Estas necesidades dictan la con- figuración del registro que se muestra en la figura 3. También se listan los registros en la tabla 1 junto con una breve descripción de su función y de la cantidad de bits que contienen. La unidad de memoria tiene una capacidad de 4096 palabras y cada pa- labra contiene 16 bits. Se necesitan doce bits de una palabra de instrucción para especificar la dirección de un operando. Esto deja tres bits para la parte de operación de la instrucción y un bit para especificar un direccionamiento directo o un indirecto. El registro de datos (DR) contiene el operando que 2 REGISTROS DE LA COMPUTADORA BÁSICA 7 Figura 2: Ejemplo de direccionamiento directo e indirecto se lee de la memoria. El registro acumulador (AC) es un registro de proce- samiento de propósito general. La instrucción que se lee de la memoria se coloca en el registro de instrucción (IR). Se utiliza el registro temporal (TR) para contener los datos temporales durante el procesamiento. El registro de direccionamiento (AR) de la memoria tiene 12 bits porque éste es el ancho de una dirección de memoria en esta computadora básica. El contador de programa (PC) también tiene 12 bits y contiene la dirección de la siguien- te instrucción que se va a leer de la memoria después de que se ejecute la instrucción presente. El PC recorre una secuencia de conteo y hace que la computadora lea instrucciones secuenciales almacenadas previamente en la memoria. Las palabras de instrucción se leen y se ejecutan en secuencia, a menos que se encuentre una instrucción de transferencia del programa, 2 REGISTROS DE LA COMPUTADORA BÁSICA 8 Tabla 1: Registros de la computadora básica Sı́mbolo de re- Cantidad de Nombre del registro Función gistro bits DR 16 Registro de datos Contiene operando de la memoria AR 12 Registro de dirección Contiene una dirección de memoria AC 16 Acumulador Registro de procesador IR 16 Registro de instrucción Contiene el código de instrucción PC 12 Contador de programa Contiene la dirección de instrucción TR 16 Registro temporal Contiene datos temporales INPR 8 Registro de entrada Contiene caracter de entrada OUTR 8 Registro de salida Contiene caracter de salida también llamada instrucción de control de programa o instrucción de trans- ferencia de control. Una instrucción de transferencia del programa solicita una transferencia a una instrucción no consecutiva en el programa. La parte, de dirección de una instrucción de transferencia del programa se transfiere al PC para convertirse en la direccı́ón de la siguiente instrucción. Para leer una instrucción, se toma el contenido del PC como la dirección para la memoria y se inicia un ciclo de lectura de memoria. Después el PC se incrementa en uno, para que contenga la dirección de la siguiente instrucción en secuencia. Se usan dos registros para entrada y salida. El registro de entrada (INPR) recibe un carácter de 8 bits de un dispositivo de entrada. El registro de salida (OUTR) contiene un carácter de 8 bits para un dispositivo de salida. Figura 3: Registros de la computadora básica y memoria 3 INSTRUCCIONES DE COMPUTADORA 9 3. Instrucciones de computadora La computadora básica tiene tres formatos de códigos de instrucción, según se muestra en la figura 4. Cada formato tiene 16 bits. La parte del código de operación de la instrucción contiene tres bits y el significado de los 13 bits restantes depende del código de operación que se encuentre. Una instrucción de referencia a memoria utiliza 12 bits para especificar una di- rección y 1 bit para especificar el modo de direccionamiento I. I es igual a 0 para una dirección directa y a 1 para una dirección indirecta (recuerden lo visto en la figura 2) Las instrucciones de referencia a registros se recono- cen mediante el código de operación 111 con un 0 en el bit de la extrema izquierda (bit 15) de la instrucción. Una instrucción de referencia al regis- tro especifica una operación o una prueba del registro AC. No se necesita un operando de la memoria, por lo tanto los otros 12 bits se utilizan para especificar la operación o prueba que se va a ejecutar. De igual forma, una instrucción de entrada-salida no necesita una referencia a memoria y se re- conoce por el código de operación 111 con 1 en el bit de la extrema izquierda de la instrucción. Los 12 bits restantes se utilizan para especificar el tipo de operación de entrada-salida o la prueba ejecutada. Figura 4: Formatos de instrucción de la computadora básica El tipo de instrucción se reconoce mediante el control de computadora de los cuatro bits en las posiciones de la 12 a la 15 de la instrucción. Si los tres bits del código de operación en las posiciones de la 12 a la 14 no son iguales a 111, la instrucción es del tipo de referencia a memoria y el bit de la posición 15 se toma como el modo de direccionamiento I. Si el código de operación de 3 bits es igual a 111, el control revisa el bit en la posición 15. Si este bit es 0, la instrucción es del tipo de referencia a registro. Si el bit es 1, 3 INSTRUCCIONES DE COMPUTADORA 10 la referencia es del tipo de entrada-salida. Observa que el bit de la posición 15 del código de instrucción está representado mediante el, sı́mbolo I, pero no se utiliza como un bit de modo cuando el código de operación es igual a 111. Sólo se utilizan tres bits de la instrucción para el código de operación. Puede parecer que la computadora está limitada a un máximo de ocho opera- ciones distintas. Sin embargo, como las instrucciones con referencia a registro y de entrada-salida utilizan los 12 bits restantes como parte del código de operación, la cantidad total de instrucciones puede exceder de ocho. De he- cho, el número total de instrucciones escogidas para la computadora basica es igual a 25. Las instrucciones para la computadora se listan en la tabla 2. La repre- sentación simbólica es una palabra de tres letras y significa una abreviatura destinada a los programadores y los usuarios. El código hexadecimal es igual al número hexadecimal del código binario utilizado para la instrucción. Al usar el equivalente hexadecimal reducimos los 16 bits de un código de ins- trucción a cuatro dı́gitos, donde cada dı́gito hexadecimal es equivalente a cuatro bits. Una instrucción con referencia a memoria tiene una parte de dirección de 12 bits. La parte de direccionamiento está representada por tres x y tiene validez para los tres dı́gitos hexadecimales que corresponden a la dirección de 12 bits. El último bit de la instrucción está representado por el sı́mbolo I. Cuando I = 0, los últimos cuatro bits de una instrucción tienen un dı́gito hexadecimal equivalente de 0 a 6, dado que el último bit es 0. Cuando I = 1, el dı́gito hexadecimal equivalente de los últimos cuatro bits de la instrucción varı́a de 8 a E, porque el último bit es 1. Las instrucciones con referencia a registro utilizan 16 bits para especifi- car una operación. Los cuatro bits de la extrema izquierda son siempre 0111, lo cual es el equivalente al hexadecimal 7. Los otros dı́gitos hexadecimales proporcionan el equivalente binario de los 12 bits restantes. Las instruc- ciones de entrada-salida también utilizan todos los 16 bits para especificar una operación. Los últimos cuatro bits son siempre 1111, el equivalente al hexadecimal F. Versatilidad del conjunto de instrucciones Antes de investigar las operaciones que ejecutan las instrucciones, analice- mos el tipo de instrucciones que, deben incluirse en una computadora. Una computadora, debe tener un conjunto de instrucciones para que el usuario pueda construir programas de lenguaje de computadora con el fin de evaluar cualquier función que se sepa que puede computarse. Se dice que el conjun- to de instrucciones está completo si la computadora incluye la suficiente cantidad dad de instrucciones en cada una de las siguientes categorı́as: 1. Instrucciones aritméticas, lógicas y de corrimiento. 3 INSTRUCCIONES DE COMPUTADORA 11 Tabla 2: Instrucciones de la computadora básica Código hexadecimal Sı́mbolo I=0 I=1 Descripción AND 0xxx 8xxx Aplicar la función AND de la pala- bra de memoria AC ADD 1xxx 9xxx Sumar la palabra de memoria a AC LDA 2xxx Axxx Cargar la palabra de memoria a AC STA 3xxx Bxxx Almacenar el contenido de AC en la memoria BUN 4xxx Cxxx Brincar (saltar) en forma incondi- cional BSA 5xxx Dxxx Brincar (saltar) y guardar la direc- ción de retorno ISZ 6xxx Exxx Incrementar y brincar (saltar) si hay un cero CLA 7800 Borrar AC CLE 7400 Borrar E CMA 7200 Complementar AC CME 7100 Complementar E CIR 7080 Circular a la derecha AC y E CIL 7040 Circular a la izquierda AC y E INC 7020 Incrementar AC SPA 7010 Brincar (saltar) la siguiente instruc- ción si AC es positivo SNA 7008 Brincar (saltar) la siguiente instruc- ción si AC es negativo SZA 7004 Brincar (saltar) la siguiente instruc- ción si AC es cero SZE 7002 Brincar (saltar) la siguiente instruc- ción si E es cero HLT 7001 Detener la computadora INP F800 Introducir un caracter en AC OUT F400 Sacar un caracter desde AC SKI F200 Brincar si hay bandera de entrada SKO F100 Brincar si hay bandera de salida ION F080 Interrupción encendida IOF F040 Interrupción apagada 2. Instrucciones para mover información hacia y desde la memoria y los registros del procesador. 3. Instrucciones de control del programa, junto con instrucciones que verifiquen las condiciones de estado. 4. Instrucciones de entrada y salida. Las instrucciones aritméticas, lógicas y de corrimiento proporcionan capa- cidad computacional para procesar el tipo de datos que el usuario puede emplear. La mayor parte de la información binaria en una computadora digital está almacenada en la memoria, pero todos los cálculos se realizan en los registros del procesador. Por lo tanto, el usuario podrá mover la in- formación entre estas dos unidades. La posibilidad de tornar decisiones es un importante aspecto de las computadoras digitales. Por ejemplo, pueden compararse dos números y, si el primero es mayor que el segundo, puede ser necesario proceder en forma diferente de si el segundo es mayor que el pri- mero. Las instrucciones de control de programa, tales como las instrucciones de transferencia del programa, se utilizan para cambiar la secuencia en la cual se ejecuta el programa. Las instrucciones de entrada y salida se necesi- tan para la comunicación entre la computadora y el usuario. Los programas y los datos deben transferirse a la memoria y los resultados de los cálculos 4 CICLO DE INSTRUCCIÓN 12 deben transferirse de vuelta al usuario. Las instrucciones listadas en la tabla 2 constituyen un conjunto mı́nimo que proporciona todas las posibilidades ya mencionadas. Hay una instrucción aritmética, ADD, y dos instruccio- nes relacionadas, complementar AC (CMA), e incrementar AC (INC). Con estas tres instrucciones podemos sumar y restar números binarios cuando existen números negativos en representación del complemento a 2 con signo. Las instrucciones para circular, CIR y CIL, pueden usarse para corrimientos aritméticos, al igual que para cualquier otro tipo de corrimiento deseado. La multiplicación y la división pueden ejecutarse usando la suma, la res- ta y el corrimiento. Existen tres operaciones lógicas: AND, complementar AC (CMA) y borrar o limpiar AC (CLA). Las operaciones AND y com- plementar proporcionan una operación NAND. Puede demostrarse que con la operación NAND es posible efectuar todas las otras operaciones lógicas con dos variables. Mover información de la memoria a AC se consigue con la instrucción cargar AC (LDA). Pasar información de AC a la memoria se hace con la instrucción de almacenar AC (STA). Las instrucciones de transferencia BUN, BSA e ISZ, junto con las cuatro instrucciones de salto, proporcionan posibilidades para transferir el control del programa y la ve- rificación de las condiciones de estado. Las instrucciones de entrada (INP) Y salida (OUT) hacen que se transfiera información entre la computado- ra y los dispositivos externos. Aunque el (Conjunto de instrucciones para la computadora básica está completo, no es eficiente porque con frecuen- cia las operaciones utilizadas no se ejecutan con rapidez. Un conjunto de instrucciones eficiente incluirá instrucciones como restar, multiplicar, OR y OR exclusiva. Estas operaciones deben programarse en la computadora básica. Al usar una cantidad limitada de instrucciones es posible mostrar el diseño lógico de la computadora, en detalle. Un conjunto de ı́nstrucciones más completo hubiera hecho el diseño demasiado complejo. De esta manera es posible mostrar los principios básicos de la organización y diseño de la computadora sin llegar a detalles complejos en exceso. 4. Ciclo de Instrucción Un programa residente en la unidad de memoria de la computadora está formado por una secuencia de instrucciones. Al principio, el contador de programa (PC) está cargado con la dirección de la primera instrucción, y a medida que se ejecuten las instrucciones del programa su valor se actualiza con las sucesivas direcciones de las instrucciones. El programa se ejecuta en la computadora recorriendo un ciclo para cada instrucción. A su vez, cada ciclo de instrucción se divide en una secuencia de subciclos o fases. En la computadora básica cada ciclo de instrucción consiste en las siguientes fases: 1. Buscar una instrucción de la memoria. 5 INSTRUCCIONES DE REFERENCIA A MEMORIA 13 2. Decodificar la instrucción. 3. Leer la dirección efectiva de la memoria si la instrucción tiene una dirección indirecta. Búsqueda de operandos en la memoria. 4. Ejecutar la instrucción. Cuando se termina el paso 4, el control regresa al paso 1 para buscar de- codificar y ejecutar la siguiente instrucción. Este proceso continúa en forma indefinida a menos que se encuentre una instrucción HALT (alto). Gráfica- mente lo hemos presentado, con la figura 5. Figura 5: Ciclo de Instrucción 5. Instrucciones de referencia a memoria Para especificar las microoperaciones que se requieren para la ejecución de cada instrucción, es necesario que la función que se pretende ejecutar se defina con precisión. Al revisar la tabla 2, en la cual se listan las instruc- ciones, encontramos que algunas tienen una descripción ambigua. Esto se debe a que, por lo general la explicación de una instrucción con palabras es extensa y no hay espacio disponible en la tabla para su explicación. Ahora mostraremos que la función de las instrucciones de referencia a memoria puede definirse en forma precisa mediante la notación de transferencia a registros. La figura 6 lista las siete instrucciones de referencia a memoria. La salida decodificada Di para i = 0, 1, 2, 3, 4, 5 y 6 del decodificador de 5 INSTRUCCIONES DE REFERENCIA A MEMORIA 14 operación que pertenece a cada instrucción se incluye en la lista. La direc- ción efectiva de la instrucción está en el registro de direccionamiento AR y se colocó ahı́ durante la señal de temporización T2 cuando I = 0 o durante la señal de temporización T3 cuando I = 1. La ejecución de las instrucciones de referencia a memoria comienza con la señal de temporización T4. La des- cripción simbólica de cada instrucción se especifica en la lista en términos de notación de transferencia de registros. La ejecución real de la instrucción en el canal del sistema de bus requerirá una secuencia de microoperaciones. Esto es porque los datos almacenados en la memoria no pueden procesarse en forma directa. Los datos deben pasarse de la memoria a un registro donde pueden ser operados sobre circuitos lógicos. Ahora explicamos la operación de dos de las instrucciones de la lista y se explican las funciones de control y microoperaciones necesarias para su ejecución. Figura 6: Instrucciones de referencia a memoria Ejecución de la instrucción AND a AC Esta es una instrucción que ejecuta la operación lógica AND sobre pares de bits en AC y la palabra de memoria especificada mediante la dirección efectiva. El resultado de la operación se transfiere a AC. Las microoperaciones que ejecuta esta instrucción son: D0 T4 : DR M [AR] D0 T5 : AC AC ∧ DR, SC 0 La función de control para esta instrucción utiliza el decodificador de opera- ción D0 porque la salida del decodificador está activa cuando la instrucción tiene una operación AND cuyo valor de código binario es 000. Se necesitan dos señales de temporización para ejecutar la instrucción. La transición de reloj asociada con la señal de temporización T4 transfiere el operando de la memoria dentro de DR. La transición de reloj asociada con la siguiente 6 ENTRADA-SALIDA E INTERRUPCIÓN 15 señal de temporización transfiere a AC el resultado de la operación lógica AND entre el contenido de DR y AC. La misma transición de reloj pasa SC a 0, al transferir el control a la señal de temporización T0 para comenzar un nuevo ciclo de instrucción. Ejecución de la instrucción ADD a AC Esta instrucción suma el contenido de la palabra de memoria especificada por la dirección efectiva al valor de AC. La suma se transfiere dentro de AC y el acarreo de salida Csal se transfiere al flip-flop E (extensión del acumulador). Las microoperaciones para ejecutar la instrucción son : D1 T4 : DR M [AR] D1 T5 : AC AC + DR, E Csal SC 0 Se usan otra vez las mismas dos señales de temporización, T4 y T5 , pero con el decodificador de operación D1 en lugar de D0 , el cual se utilizó para la instrucción AND. Después de que se busca la instrucción en la memoria y se decodifica, sólo estará activa una salida del decodificador de operación y esa, salida determina la secuencia de microoperaciones que sigue el control durante la ejecución de la instrucción de referencia a memoria. 6. Entrada-Salida e interrupción Una computadora no puede tener un propósito útil a menos que se comunique con un ambiente externo. Las instrucciones y los datos almace- nados en la memoria deben provenir de algún dispositivo de entrada. Los resultados computacionales debén transmitirse al usuario mediante algún dispositivo de salida. Las computadoras comerciales incluyen muchos tipos de dispositivos de entrada y salida. Para mostrar la mayor parte de los re- querimientos básicos para comunicación de entrada y salida, utilizaremos como ejemplo una unidad terminal con un teclado e impresora. Configuracı́ón de entrada-salida La terminal envı́a y recibe información serial. Cada cantidad de información tiene ocho bits de un código alfanumérico. La información serial del teclado se cambió dentro del registro de entrada INPR. La información serial para la impresora se almacena en el registro de salida OUTR. Estos dos registros comunican en forma serial con una interfaz de comunicación y con el AC en paralelo. La configuración de entrada-salida se muestra en la figura 7. La interfaz que transmite recibe información serial del teclado y la transmite a INPR. La interfaz que recibe acepta información de OUTR y la envı́a en forma serial a la impresora. El registro de entrada INPR consta de ocho bits y contiene información de entrada alfanumérica. La bandera de entrada de 1 bit FGI es un flip- 6 ENTRADA-SALIDA E INTERRUPCIÓN 16 Figura 7: Configuración de entrada-salida flop de control. El bit de la bandera se activa en 1 cuando hay disponible información nueva en el dispositivo de entrada y se desactiva a 0 cuando la computadora acepta la información. La bandera es necesaria para sin- cronizar la diferencia de la velocidad de temporización entre el dispositivo de entrada y la computadora. El proceso de transferencia de información es como sigue. Al principio, la bandera de entrada FGI se desactiva a 0. Cuando se oprime una tecla en el teclado, se ejecuta un corrimiento sobre un código alfanumérico de 8 bits dentro de INPR y la bandera de entrada FGI se inicia en 1. Mientras la bandera está en uno, no puede cambiarse la información en INPR al oprimir otra tecla. La computadora comprueba el bit de la bandera; si es 1, la información de INPR se transfiere en paralelo dentro de AC y FGI se reinicia a 0. Una vez que se desactiva la bandera, puede introducirse información nueva dentro de INPR al oprimir otra tecla. El registro de salida OUTR funciona en forma similar pero la dirección del flujo de información está invertida. Al principio la bandera de salida FGO se activa en 1. La computadora comprueba el bit de la bandera; si es 1, la 6 ENTRADA-SALIDA E INTERRUPCIÓN 17 información de AC se transfiere en paralelo a OUTR y FGO se desactiva a 0. El dispositivo de salida acepta la información codificada, imprime el caracter correspondiente, y cuando se termina la operación activa FGO en 1. La computadora no carga un nuevo caracter en OUTR cuando FGO es 0 porque esta condición indica que el dispositivo de salida se encuentra en el proceso de imprimir el caracter. Instrucciones entrada-salida Se necesitan instrucciones de entrada y salida, para transferir información hacia y desde el registro AC, para comprobar los bits de bandera, y para con- trolar la opción de interrupción. Las instrucciones de entrada-salida tienen un código de operación 1111 (Recuerda la figura 4) que reconoce el control cuando D7 = 1 e I = 1. Los bits restantes de la instrucción especifican la operación particular. Las funciones de control y las microoperaciones para las instrucciones de entrada-salida se listan en la figura 8. Estas instrucciones se ejecutan con la transición de reloj asociada con la señal de temporización T3. Cada función de control necesita una relación booleana D7 IT3 que se representa por conveniencia con el sı́mbolo p. La función de control se dife- rencia por uno de los bits en IR(6-11). Al asignar el sı́mbolo Bi al bit i de IR, todas las funciones de control pueden representarse mediante pBi para i = 6 a 11. El contador secuencial SC se borra a 0 cuando p = D7 IT3 = 1. Figura 8: Instrucciones de entrada-salida La instrucción INP transfiere la información de entrada de INPR a los ocho bits de orden menor de AC y también desactiva la bandera de entrada a 0. La instrucción OUT transfiere los ocho bits menos significativos de AC al registro de salida de OUTR y desactiva la bandera de salida a 0. Las siguientes dos instrucciones de la figura 8 comprueban el estado de las banderas y producen un salto de la siguiente instrucción si la bandera es 1. La instrucción que se salta por lo general será una instrucción de transferencia o brinco para retornar y comprobar una vez más la bandera. La instrucción de 6 ENTRADA-SALIDA E INTERRUPCIÓN 18 transferencia no se salta si la bandera es 0. Si la bandera es 1, la instrucción de transferencia se salta y se ejecuta una instrucción de entrada o salida. Las últimas dos instrucciones activan y desactivan un flip-flop de habilitación de interrupción IEN que se relaciona con la operación de interrupción. Interrupción del programa El proceso, de comunicación que se acaba de describir se refiere a una trans- ferencia de control programada. La computadora comprueba continuamente el bit de bandera, y cuando lo encuentra activo en uno, inicia una transfe- rencia de información. La diferencia de la velocidad del flujo de información de la computadora y el del dispositivo de entrada-salida hace ineficiente es- te tipo de transferencia. Para apreciar por qué es ineficiente, pensemos en una computadora que puede recorrer un ciclo de instrucción en un micro- segundo. Consideremos que el dispositivo de entrada-salida puede transferir información a una velocidad máxima de 10 caracteres por segundo. Esto es equivalente a un caracter cada 100000 microsegundos. Se ejecutan dos instrucciones cuando la computadora comprueba el bit de bandera y decide no transferir la información. Esto significa que a una velocidad máxima la computadora comprobará la bandera 50000 veces entre cada transferencia. La computadora gasta tiempo en comprobar la bandera en lugar de hacer otra tarea de procesamiento útil. Una alternativa, al procedimiento controlado que se programa es per- mitir que el dispositivo externo informe a la computadora cuando está listo para la transferencia. Mientras tanto, la computadora puede ocuparse con otras tareas. Este tipo de transferencia utiliza la opción de interrupción. Mientras la computadora corre un programa, no comprueba las banderas. Sin embargo, cuando se activa una bandera, la computadora interrumpe momentáneamente su procedimiento con el programa actual y se le informa que se ha activado una bandera. La computadora deja momentáneamente lo que está haciendo para ocuparse de la transferencia de entrada o salida. Después regresa al programa actual a continuar lo que estaba haciendo antes de la interrupción. El flip-flop de habilitación de interrupción IEN puede habilitarse o des- habilitarse con dos instrucciones. Cuando IEN se borra a 0 (con la instruc- ción IOF), las banderas no pueden interrumpir a la computadora. Cuando IEN se activa en 1 (con la instrucción ION), la computadora puede ser inte- rrumpida. Estas dos instrucciones le proporcionan al programador la opción de decidir si utiliza o no la opción de interrupción. La manera en que la computadora maneja la interrupción se explica a continuación. Se incluye un flip-flop de interrupción R en la computadora. Cuando R = 0, la computadora ejecuta un ciclo de instrucción. Durante la fase de ejecución de la instrucción, el control comprueba el estado de IEN. Si es 0, indica que el programador no desea usar la interrupción, por lo que el 6 ENTRADA-SALIDA E INTERRUPCIÓN 19 control continúa con el siguiente ciclo de instrucción. Si IEN es 1, el control comprueba los bits de bandera. Si ambas banderas son 0, significa que tanto el registro de entrada como de salida no están listos para una transferencia de información. En este caso el control continúa con el siguiente ciclo de instrucción. Si alguna bandera está en 1 mientras IEN = 1, el flip-flop R se inicia en 1. Al final de la fase de ejecución, el control comprueba el valor de R y si es igual a 1, va a un ciclo de interrupción en lugar de un ciclo de instrucción. El ciclo de interrupción es una implementación de hardware de una transferencia de programa y salva la dirección de retorno de la siguiente instrucción. La dirección de retorno disponible en el PC se almacena en una localidad especı́fica donde pueda encontrarse después, cuando el programa retorne a la instrucción en la cual fue interrumpido. Esta localidad puede ser un registro de procesador, una pila de memoria, o una posición de memoria especı́fica. Aquı́ escogemos la localidad de memoria en la dirección 0 como el lugar para almacenar la dirección de retorno. Después el control inserta en la localidad 1 el valor de PC y deshabilita IEN y R para que no puedan ocurrir más interrupciones hasta que se haya atendido la solicitud de interrupción de la bandera. Un ejemplo que muestra lo que sucede durante el ciclo de interrupción aparece en la figura 9. Supongamos que ocurre una interrupción y R se inicia en 1 mientras el control está ejecutando la instrucción en la dirección 255. En este momento, la dirección de retorno 256 está en PC. El programador ha colocado previamente un programa de servicio de entrada-salida en la memoria comenzando en la dirección 1120, y una instrucción BUN 1120 en la dirección 1. Esto se muestra en la figura 9(a). Cuando el control alcanza la señal de temporización T0 Y encuentra que R = 1, procede con el ciclo de interrupción. El contenido del PC(256) se almacena en la localidad de memoria 0, PC se inicia en 1, y R se reinicia a en 0. Al comienzo del siguiente ciclo de instrucción, la instrucción que se lee de la memoria está en la dirección 1 porque éste es el contenido de PC. La instrucción de brinco (salto) en la dirección 1 hace que el programa se transfiera al programa de servicio de entrada-salida en la dirección 1120. Este programa comprueba las banderas, determina cuál bandera está en uno y después transfiere la información de entrada o salida requerida. Una vez que hace esto, se ejecuta la instrucción ION para activar IEN en 1 (para habilitar interrupciones posteriores), y el programa regresa a la posición en la cual fue interrumpido. Esto se muestra en la figura 9(b). La instrucción que regresa a la computadora al lugar original en el pro- grama principal es una instrucción de brinco (salto) indirecto, con el campo de dirección igual a 0. Esta instrucción se coloca al final del programa de ser- vicio de entrada-salida. Después de que esta instrucción se lee de la memoria 6 ENTRADA-SALIDA E INTERRUPCIÓN 20 Figura 9: Ejemplo del ciclo de interrupción durante la fase de búsqueda, el control va a la fase indirecta (porque I = 1) para leer la dirección efectiva. La dirección efectiva está en la posición 0 y es la dirección de retorno que se almacenó ahı́ durante el ciclo de interrupción previo. La ejecución de la instrucción BUN indirecta da como resultado la colocación dentro de PC de la dirección de retorno en la localidad 0. Es decir, quedará PC = 256 que es la dirección de la instrucción del programa en el punto exacto donde debe retomar la ejecución. Interrupción del programa El tiempo de ejecución de programas de entrada y salida se forma sobre todo del tiempo que necesita la computadora para esperar al dispositivo externo para que active su bandera. El ciclo de espera que comprueba la bande- ra mantiene ocupada la computadora con una tarea que emplea una gran cantidad de tiempo. Este tiempo de espera puede eliminarse si se utiliza la opción de interrupción para notificar a la computadora cuándo está activada una bandera. La ventaja de utilizar la interrupción es que la transferencia de información se inicia cuando hay una solicitud de un dispositivo externo. Mientras tanto, la computadora puede ocuparse en ejecutar otras tareas úti- les. Es obvio que, si no reside otro programa en la memoria, la computadora no tiene nada qué hacer, ası́ que bien puede comprobar las banderas. La opción de interrupción es útil en un ambiente de multiprogramación cuando residen dos o más programas en la memoria al mismo tiempo. Sólo puede ejecutarse un programa en un momento dado, aunque dos 6 ENTRADA-SALIDA E INTERRUPCIÓN 21 o más programas pueden residir en la memoria. Por lo general los otros programas esperan datos de entrada o salida. La función de la opción de interrupción es cuidar la transferencia de datos de uno o más programas mientras otro programa se ejecuta en ese momento. El programa que corre debe incluir una instrucción ION para atender la interrupción. Si no se usa la opción de interrupción, el programa debe incluir una instrucción IOF para apagarla. (El interruptor de encendido de la computadora podrı́a también apagar la interrupción.) La opción de interrupción permite que el programa principal avance hasta que el dispositivo de entrada o salida active su bandera como lista. Cuando una bandera está activada en 1, la computadora completa la eje- cución de la instrucción en proceso y después reconoce la interrupción. El resultado de esta acción es que la dirección de retorno se almacena en la localidad 0. Después se ejecuta la instrucción de la localidad 1; esto inicia una rutina de servicio para la transferencia de entrada o salida. La rutina de servicio puede almacenarse en cualquier parte de la memoria siempre que una transferencia al comienzo de la rutina se almacene en la localidad 1. La rutina de servicio debe tener instrucciones para ejecutar las siguientes tareas 1. Salvar (guardar) el contenido de los registros del procesador. 2. Comprobar cuál bandera está activada. 3. Dar servicio al dispositivo cuya bandera está activada. 4. Recuperar el contenido de los registros del procesador. 5. Habilitar la opción de interrupción. 6. Regresar al programa principal. El contenido de los registros del procesador antes de la interrupción y des- pués del retorno al programa principal debe ser el mismo; de otra maneras el programa principal puede ejecutarse con error. Como la rutina de servicio puede utilizar estos registros, es necesario “salvar” su contenido al principio de la rutina y “recuperarlo” al final. La secuencia mediante la cual se com- prueban las banderas dicta la prioridad asignada a cada dispositivo. Aunque pueden activarse dos o más banderas al mismo tiempo, los dispositivos son atendidos uno a la vez. Se atiende primero el dispositivo cuya prioridad es mayor y después al que tiene una prioridad menor. La aparición de una interrupción inhabilita la opción de más interrup- ciones. La rutina de servicio debe habilitar la interrupción antes del retorno al programa principal. Esto habilitará interrupciones posteriores mientras la computadora ejecuta el programa principal. La opción de interrupción no debe habilitarse hasta que se carga la dirección de retorno en el contador de programa. 7 FORMATOS DE LAS INSTRUCCIONES 22 7. Formatos de las instrucciones En las secciones anteriores se presentó el formato de instrucción de la computadora básica (figura 4). En este apartado se presenta un formato de instrucción más general aplicable a otros diseños de CPUs. Normalmente las estructuras fı́sica y lógica de la computadora se describen en los manuales de referencia que se proporcionan con el sistema. Tales manuales explican la construcción interna de la CPU, incluyendo los registros de procesador dis- ponibles y sus posibilidades lógicas. También listan todas las instrucciones que se implantan con hardware, especifican su formato en código binario y proporcionan una definición precisa de cada instrucción. Por lo general, una computadora tendrá varios formatos de códigos de instrucciones. Una fun- ción de la unidad de control dentro de la CPU es interpretar cada código de instrucción y proporcionar las funciones de control necesarias para procesar la instrucción. Normalmente, el formato de una instrucción se muestra en una caja rectangular que simboliza los bits de la instrucción conforme aparecen en la palabra de memoria o en un registro de control. Los bits de la instrucción se dividen en grupos llamados campos. Los campos más comunes que se encuentran en los formatos de instrucciones son: 1. Un campo de código de operación, que especifica la operación que se va a ejecutar. 2. Un campo de dirección que representa una dirección de memoria o un registro de procesador. 3. Un campo de modo que especifica la manera en que se determina el operando o la dirección efectiva. En ocasiones se emplean otros campos especiales bajo ciertas circunstancias, por ejemplo un campo que proporciona el número de corrimientos en una instrucción de tipo corrimiento. El campo de código de operación de una instrucción es un grupo de bits que define varias operaciones de procesador, como sumar, restar, com- plementar y corrimiento. Las operaciones más comunes disponibles en ins- trucciones de computadora se han listado y analizado antes. Los bits que definen el campo de modo de una instrucción especifican diversas alterna- tivas para escoger los operandos de la dirección dada. Los diferentes modos de direccionamiento que se han formulado para las computadoras digitales se presentan en el apartado 8. En esta sección, presentamos el campo de dirección de un formato de instrucción y consideramos el efecto de incluir múltiples campos de dirección en una instrucción. 7 FORMATOS DE LAS INSTRUCCIONES 23 Las operaciones especificadas mediante instrucciones de computadora se ejecutan sobre algunos datos almacenados en la memoria o en registros de procesador. Los operandos que residen en la memoria se especifican mediante sus direcciones de memoria. Los operandos que residen en un registro de procesador se especifican con una dirección de registro. Una dirección de registro es un número binario de k bits que define uno de 2k registros en Ia CPU. Por lo tanto, una CPU con 16 registros de procesador del R0 al R15 tendrá un campo de dirección de registro de 4 bits. Por ejemplo, el número binario 0101, representará el registro R5. Las computadoras pueden tener instrucciones de diferentes tamaños que contengan una cantidad variable de direcciones. La cantidad de campos de direcciones en el formato de instrucción de una computadora depende de la organización interna de sus registros. La mayorı́a de las computadoras caen en uno de tres tipos de organización de CPU: 1. Organización de acumulador único. 2. Organización de registro general. 3. Organización de pila. Un ejemplo de una organización de tipo acumulador es la computadora bási- ca presentada en los apartados anteriores. Todas las instrucciones se ejecutan con un registro de acumulador relacionado. El formato de instrucción en este tipo de computadora utiliza un campo de dirección. Por ejemplo, la instruc- ción que especifica una suma aritmética se define mediante una instrucción del lenguaje ensamblador como: ADD X donde X es la dirección del operando. La instrucción ADD en este caso da como resultado la operación AC ← AC+M [X]. AC es el registro acumulador y M[X] representa la palabra de memoria que se localiza en la dirección X. Un ejemplo de un tipo de organización de registro general cuenta con un conjunto de registros para realizar las operaciones. El formato de instrucción en este tipo de computadora necesita tres campos de dirección de registro. Por lo tanto, la instrucción para una suma aritmética puede escribirse en lenguaje ensamblador como: ADD R1, R2, R3 para representar la operación R1 ← R2 + R3. La cantidad de campos de dirección en la instrucción puede reducirse de tres a dos si el registro destino es igual a uno de los registros fuente. Por lo tanto, la instrucción: 7 FORMATOS DE LAS INSTRUCCIONES 24 ADD R1, R2 representarı́a la operación R1 ← R1 + R2. Sólo necesitan especificarse las direcciones de registro para R1 y R2 en esta instrucción. Las computadoras con múltiples registros de procesador utilizan la ins- trucción de mover con un código nemónico MOV para representar una ins- trucción de transferencia. Por lo tanto, la instrucción: MOV R1,R2 representa la transferencia R1 ← R2 (o R2 ← R1 dependiendo de la compu- tadora en particular). Entonces, las instrucciones de tipo de transferencia necesitan dos campos de dirección para especificar la fuente y el destino. Las computadoras de tipo de registro general emplean dos o tres cam- pos de dirección en su formato de instrucciones. Cada campo de dirección puede especificar un registro de procesador o una palabra de memoria. Una instrucción representada mediante: ADD R1, X especificarı́a la operación R1 ← R1 + M [X]. Posee dos campos de dirección uno para el registro R1 y el otro para la dirección de memoria X. Las computadoras con organización de pila envı́an instrucciones PUSH y POP las cuales requerirı́an, un campo de dirección. Por lo tanto la ins- trucción: PUSH X escribirá la palabra de la dirección X en la parte superior de la pila. El puntero de pila se actualiza en forma automática. Las instrucciones de tipo operación no necesitan un campo de dirección en las computadoras orga- nizadas con pilas. Esto se debe a que la operación se ejecuta sobre los dos datos que están en la parte superior de la pila. La instrucción: ADD en una computadora con pila consta de un solo código de operación sin campo de dirección. Esta operación lee (pop) los dos números superiores de la pila, los suma y escribe (push) la suma dentro de la pila. No es necesario especificar operandos con un campo de dirección porque es implı́cito que todos están en la pila. 7 FORMATOS DE LAS INSTRUCCIONES 25 La mayorı́a de las computadoras cae en uno de estos tres tipos de or- ganización que se acaban de describir. Algunas computadoras combinan ca- racterı́sticas de más de una estructura organizacional. Por ejemplo, el mi- croprocesaor Intel 8080 tiene siete registros de CPU, uno de los cuales es un registro acumulador. Como consecuencia, el procesador tiene alguna de las caracterı́sticas de un tipo de registro general y algunas de las de un tipo acumulador. Todas las instrucciones aritméticas y lógicas, al igual que las instrucciones de carga y almacenamiento, utilizan el registro acumulador por lo que estas instrucciones sólo tienen un campo de dirección. Por otra parte, las instrucciones que transfieren datos entre los siete registros del procesa- dor tienen un formato que contiene dos campos de dirección de registros. Además, el procesador Intel 8080 tiene un puntero de pila e instrucciones push y pop desde una pila de memoria. Sin embargo, el procesador no tiene instrucciones de tipo de direccionamiento cero, las cuales son caracterı́sticas de una CPU organizada con pila. Para dar una ejemplo de la influencia de la cantidad de direcciones sobre los programas de computadora, evaluaremos el siguiente enunciado aritmético: x = (A + B) ∗ (C + D) utilizando cero, uno, dos o tres instrucciones de direccionamiento. Emplea- remos los sı́mbolos ADD, SUB, MUL y DIV para las cuatro operaciones aritméticas; MOV para la operación de tipo transferencia: y LOAD y STO- RE para transferencias hacia y desde la memoria y el registro AC. Conside- raremos que los operandos en las direcciones de memória A, B, C y D y el resultado deben almacenarse en la memoria en la dirección X. Instrucciones de tres direcciones Las computadoras con formato de instrucción de tres direcciones pueden utilizar cada campo de dirección para especificar un registro de procesadoro un operando de memoria. En seguida, se muestra el programa en lenguaje ensamblador que evalúa X = (A + B) ∗ (C + D), junto con comentarios que explican la operación de transferencia de registros de cada instrucción. ADD R1, A, B R1 ← M [A] + M [B] ADD R2, C, D R2 ← M [C] + M [D] MUL X, R1, R2 M [X] ← R1 ∗ R2 Se considera que la computadora tiene dos registros de procesador, R1 y R2. El sı́mbolo M[A] representa el operando en la dirección de memoria que se simboliza mediante A. La ventaja del formato de tres direcciones es que produce a la brevedad programas cuando evalúa expresiones aritméticas. La desventaja es que las 7 FORMATOS DE LAS INSTRUCCIONES 26 instrucciones de código binario requieren demasiados bits para especificar tres direcciones: Un ejemplo de una computadora comercial que utiliza ins- trucciones de tres direcciones es la Cyber 170. Los formatos de instrucciones en la computadora Cyber están limitados a tres campos de dirección de re- gistro o a dos campos de dirección de registro y a un campo de dirección de memoria. Instrucciones de dos direcciones Las instrucciones de dos direcciones son las más comunes en las computado- ras comerciales. En ellas, también cada campo de dirección puede especificar un registro de procesador o una palabra de memoria. El programa para eva- luar X = (A + B) * (C + D) es como sigue: MOV R1, A R1 ← M [A] ADD R1, B R1 ← R1 + M [B] MOV R2, C R2 ← M [C] ADD R2, D R2 ← R2 + M [D] MUL R1,R2 R1 ← R1 ∗ R2 MOV X, R1 M [X] ← R1 La instrucción MOV mueve o transfiere el operando hacia y desde la memoria y los registros del procesador. El primer sı́mbolo listado en una instrucción se considera fuente y destino, adonde se transfiere el resultado de la operación. Instrucciones de una dirección Las instrucciones de una dirección utilizan un registro acumulador (AC) implı́cito para toda la manipulación de datos. Para la multiplicación y di- visión se necesita un segundo registro. Sin embargo, en este ejemplo no lo tomaremos en cuenta y consideraremos que AC contiene el resultado de to- das las operaciones. El programa para evaluar X = (A + B) * (C + D) es: LOAD A AC ← M [A] ADD B AC ← AC + M [B] STORE T M [T ] ← AC LOAD C AC ← M [C] ADD D AC ← AC + M [D] MUL T AC ← AC ∗ M [T ] STORE X M [X] ← AC Todas las operaciones se realizan entre el registro AC y un operando de memoria. T es la dirección de una localidad de memoria temporal necesaria para almacenar el resultado intermedio. Instrucciones de cero direcciones. Una computadora organizada con pila no utiliza un campo de dirección para 7 FORMATOS DE LAS INSTRUCCIONES 27 las instrucciones ADD y MUL. Sin embargo, las instrucciones PUSH y POP necesitan un campo de dirección para especificar el operando que comunica con la pila. El siguiente programa muestra cómo se escribirá X = (A + B) *(C + D) para una computadora organizada con pila. (TOP significa la parte superior de la pila.) PUSH A T OP ← A PUSH B T OP ← B ADD T OP ← (A + B) PUSH C T OP ← C PUSH T OP ← D ADD T OP ← (C + D) MUL T OP ← (C + D) ∗ (A + B) POP X M [X] ← T OP Para evaluar expresiones aritméticas en una computadora con pila, esnece- sario convertir la expresión a notación polaca inversa. El nombre “dirección cero” se da este tipo de computadora por la ausencia de un campo de direc- ción en las instrucciones computacionales. Instrucciones RlSC Las ventajas de una arquitectura de computadora con conjunto de instruc- ciones reducido (RISC) se explica en la sección 10. El conjunto de instruc- ciones de un procesador RISC tı́pico está limitado a usar las instrucciones cargar y almacenar cuando hay comunicación entre la memoria y la CPU. Todas las otras instrucciones se ejecutan dentro de los registros de la CPU sin transferirse a la memoria. Un programa para una CPU tipo RISC consta de instrucciones LOAD y STORE que tienen una memoria y una dirección de registro, e instrucciones de tipo computacional que poseen tres direc- ciones donde todas especifican registros de procesador. El siguiente es un programa para evaluar X = (A + B) * (C + D). LOAD R1, A R1 ← M [A] LOAD R2, B R2 ← M [B] LOAD R3, C R3 ← M [C] LOAD R4, D R4 ← M [D] ADD R1, R1, R2 R1 ← R1 + R2 ADD R3, R3, R4 R3 ← R3 + R4 MUL R1, R1, R3 R1 ← R1 ∗ R3 STORE X, R1 M [X] ← R1 Las instrucciones de carga transfieren los operandos de la memoria a re- gistros de la CPU. Las operaciones de sumar y multiplicar se ejecutan con datos en los registros sin acceder a la memoria. El resultado de los cálculos se guarda después en la memoria con una instrucción de almacenar. 8 MODOS DE DIRECCIONAMIENTO 28 8. Modos de direccionamiento El campo de operación de una instrucción especifica la operación que se va a ejecutar. Esta operación debe realizarse sobre algunos datos alma- cenados en registros de computadora o en palabras de memoria. La manera en que eligen los operandos durante la ejecución del programa depende del modo de direccionamiento de la instrucción. El modo de direccionamiento especifica una regla para interpretar o modificar el campo de dirección de la instrucción antes de que se haga la referencia real al operando. Las compu- tadoras utilizan técnicas de modo de direccionamiento para acomodar una o las dos siguientes consideraciones: 1. Proporcionar al usuario versatilidad deja programación al ofrecer faci- lidades como apuntadores a memoria, contadores para control de ciclo, indexación de datos y reubicación de programas. 2. Reducir la cantidad de bits en el campo de direccionamiento de la instrucción. La disponibilidad de los modos de direccionamiento proporciona al progra- mador con experiencia en lenguaje ensamblador la flexibilidad para escribir programas más eficientes en relación con la cantidad de instrucciones y el tiempo de ejecución. Para comprender los diferentes modos de direccionamiento que se pre- sentarán en esta sección, es imperativo entender el ciclo de operación básico de la computadora, que vimos en la sección 4. La unidad de control de una computadora está diseñada para recorrer un ciclo de instrucciones, que se divide en tres fases principales: 1. Búsqueda de la instrucción de la memoria. 2. Decodificar la instrucción. (Calcular la dirección efectiva y buscar los operandos en la memoria) 3. Ejecutar la instrucción. Hay un registro en la computadora llamado contador de programa o PC, que lleva un registro de las instrucciones del programa almacenado en la memoria. PC contiene la dirección de la siguiente instrucción que se va a ejecutar y se incrementa cada vez que se recupera una instrucción de la memoria. La decodificación realizada en el paso 2 determina la operación que se va a ejecutar, el modo de direccionamiento de la instrucción y la posición de los operandos. Después la computadora ejecuta la instrucción y regresa al paso 1 para hacer la búsqueda de la siguiente instrucción en secuencia. 8 MODOS DE DIRECCIONAMIENTO 29 En algunas computadoras el modo de direccionamiento de la instrucción se especifica con un código binario distinto, como se hace con el código de operación. Otras computadoras utilizan, un código binario único, que repre- senta la operación y el modo de la instrucción. Pueden definirse instrucciones con diversos modos de direccionamiento y en ocasiones, se combinan dos o más modos de direccionamiento en una instrucción. Un ejemplo de un formato de instrucción con un campo de modo de direccionamiento distinto se muestra en la figura 10. El código de operación especifica la operación que se va a ejecutar. El campo de modo se utiliza para ubicar los operandos necesarios para la operación. Puede haber o no un campo de direccionamiento en la instrucción. Si hay uno, puede, representar una dirección de memoria o un registro de procesador. Además, como se analizó en la sección anterior, la instrucción puede tener más de un campo de dirección, y cada campo de dirección puede estar asociado con su propio modo de direccionamiento particular. Aunque la mayorı́a de los modos de Figura 10: Formato de instrucciones con campo de modo direccionamiento modifican el campo de dirección de la instrucción, hay dos modos que no necesitan el campo de dirección. Son los modos implı́cito e inmediato. Modo implı́cito: En este modo se especifican los operandos en for- ma implı́cita en la definición de la instrucción. Por ejemplo, la instrucción “complementar-acumulador” es una instrucción de modo implı́cito porque el operando en el registro de acumulador está implı́cito en la definición de la instrucción. De hecho todas las instrucciones de referencia a registro que utilizan un acumulador son instrucciones de modo implı́cito. Las instrucciones de dirección cero en una computadora organizada con pila son instrucciones de modo implı́cito porque está implı́cito que los ope- randos están en la parte superior de la pila. Modo inmediato: En este modo se especifica el operando en la ins- trucción misma. En otras palabras, una instrucción de modo inmediato tie- ne un campo de operando, en lugar de un campo de dirección. Un campo de operando contiene el operando real que se va a usar junto con la ope- ración especificada en la instrucción. Las instrucciones de modo inmediato son útiles para inicializar registros en un valor constante. Se mencionó antes que el campo de dirección de una instrucción puede especificar una palabra de memoria o un registro de procesador. Cuando 8 MODOS DE DIRECCIONAMIENTO 30 el campo de dirección especifica un registro de procesador se dice que la instrucción está en modo de registro. Modo de registro: En este modo, los operandos están en registros que residen dentro de la CPU. Se selecciona el registro particular de un campo de registro en la instrucción. Un campo de k bits puede especificar cualquiera de 2k registros. Modo indirecto por registro: En este modo la instrucción especifica un registro en la CPU cuyo contenido proporciona la dirección del operando en la memoria. En otras palabras, el registro seleccionado contiene la di- rección del operando en lugar del operando mismo. Antes de utilizar una instrucción de modo indirecto por registro, el programador debe asegurarse de que la dirección de memoria del operando está colocada en el registro del procesador con una instrucción previa. Entonces una referencia al re- gistro es equivalente a especificar una dirección de memoria. La ventaja de una instrucción de modo de registro indirecto es que el campo de dirección de la instrucción utiliza menos bits para seleccionar un registro de los que necesitarı́a para especificar una dirección de memoria en forma directa. Modo de autoincremento o autodecremento: Este es similar al modo de registro indirecto, excepto en que el registro se incrementa o decre- menta después (o antes) de que su valor se utilice para acceder la memoria. Cuando la dirección almacenada en el registro hace referencia a una tabla de datos en la memoria, es necesario incrementar o, decrementar el registro después de cada acceso a la tabla. Esto puede lograrse al usar la instruc- ción de incrementar o decrementar. Sin embargo, como este es un requisito común, algunas computadoras incorporan un modo especial que incrementa o decrementa en forma automática el contenido del registro después de cada acceso de datos. La unidad de control en la CPU utiliza el campo de dirección para obte- ner el operando de la memoria. En ocasiones el valor que se proporciona en el campo de dirección es la dirección del operando, pero en ocasiones es sólo una dirección desde la cual se calcula la dirección del operando. Para poder diferenciar los distintos modos de direccionamiento es necesario distinguir entre la parte de dirección de la instrucción y la dirección efectiva utilizada por el control cuando ejecuta la instrucción. La dirección efectiva se define como la dirección de memoria obtenida del cálculo, fijado mediante el modo de direccionamiento proporcionado. La dirección efectiva es la dirección del operando en una instrucción de tipo computacional. Es la dirección en que el control se transfiere en respuesta a una instrucción de tipo brinco o salto. Ya hemos definido dos modos de direccionamiento que se ilustran en la figura 2. Se resumen aquı́ para que sirvan de referencia. 8 MODOS DE DIRECCIONAMIENTO 31 Modo de direccionamiento directo: En este modo la dirección efec- tiva es igual a la parte de dirección de la instrucción. El operando reside en memoria y su dirección la proporciona en forma directa el campo de dirección de la instrucción. En una instrucción de tipo brinco el campo de dirección especifica la dirección de transferencia de control del programa real. Modo de direccionamiento indirecto: En este modo, el campo de dirección de la instrucción proporciona la dirección en que se almacena la dirección efectiva en la memoria. El control recupera la instrucción de la memoria y utiliza su parte de dirección para acceder a la memoria una vez más con el fin de leer la dirección efectiva. El modo de direccionamiento indirecto también se explica en la figura 2. Unos cuantos modos de direccionamiento requieren que el campo de dirección de la instrucción se sume al contenido de un registro especı́fico en la CPU. En estos modos la dirección efectiva se obtiene del cálculo siguiente: dirección efectiva = parte de dirección de la instrucción + el contenido de registro de CPU El registro de CPU utilizado en el cálculo puede ser el contador de programa, un registro ı́ndice o un registro base. En cualquier caso tenemos un modo de direccionamiento diferente que se utiliza para una aplicación distinta. Modo de direccionamiento relativo: En este modo el contenido del contador de programa se suma a la parte de dirección de la instrucción para obtener la dirección efectiva. La parte de dirección de la instrucción por lo general es un número con signo (en representación de complemento a 2) el cual puede ser: positivo o negativo. Cuando se suma este número al conte- nido del contador de programa, el resultado produce una dirección efectiva cuya posición en la memoria es relativa a la dirección de la siguiente instruc- ción. Para hacer más claro con un ejemplo, consideremos que el contador de programa contiene el número 825 y que la parte de dirección de la ins- trucción contiene el número 24. La instrucción en la posición 825 se lee de la memoria durante la fase de recuperación y el contador de programa se incrementa en uno a 826. El cálculo de dirección efectiva para el modo de dirección relativa es 826 + 24 = 850. Esto es 24 posiciones de memoria ade- lante de la dirección de la siguiente instrucción. Con frecuencia se utiliza el direccionamiento relativo con instrucciones de tipo brinco, cuando la direc- ción del brinco (salto) está en el área que rodea la palabra de la instrucción misma. Esto da como resultado un campo de dirección más pequeño en el formato de la instrucción porque la dirección relativa puede especificarse con una cantidad de bits menor en comparación con la cantidad de bits que se necesitan para representar la dirección de memoria completa. 8 MODOS DE DIRECCIONAMIENTO 32 Modo de direccionamiento indexado: En este modo el contenido de un registro ı́ndice se suma a la parte de dirección de la instrucción para obtener la dirección efectiva. El registro ı́ndice es un registro de CPU espe- cial que contiene un valor ı́ndice. Un campo de dirección de la instrucción define la dirección inicial del arreglo de datos en la memoria. Cada ope- rando del arreglo se almacena en la memoria en relación con la dirección inicial. La distancia entre la dirección inicial y la dirección del operando es el valor del ı́ndice almacenado en el registro de ı́ndice. Cualquier operando en el arreglo puede accesarse con la misma instrucción siempre y cuando el registro ı́ndice contenga el valor de ı́ndice correcto. El registro ı́ndice puede incrementarse para facilitar el acceso a operandos consecutivos. Nótese que si una instrucción de tipo ı́ndice no incluye un campo de dirección en su formato, la instrucción se convierte al modo de operación de indirecto por registro. Algunas computadoras dedican un registro de CPU para que funcione exclusivamente como un registro ı́ndice. De manera implı́cita este registro participa cuando se utiliza una instrucción de modo ı́ndice. En las compu- tadoras con muchos registros de procesador, cualquiera de los registros de la CPU pueden contener el número de ı́ndice. En tal caso, el registro debe estar especificado en forma explı́cita en un campo de registro dentro del formato de instrucción. Modo de direccionamiento de registro base: En este modo, el con- tenido de un registro base se suma a la parte de dirección de la instrucción para obtener la dirección efectiva. Esto es similar al modo de direccionamien- to indexado, excepto en que el registro se denomina ahora registro base, en lugar de registro ı́ndice. La diferencia entre los dos modos está en la manera que se usan más que en la manera en que se calculan. Se considera que un registro ı́ndice contiene un número de ı́ndice que se relaciona con la parte de dirección de la instrucción. Se considera que un registro base contiene una dirección base y que el campo de dirección de la instrucción propor- ciona un desplazamiento en relación con esta dirección base. El modo de direccionamiento de registro base se utiliza en las computadoras para faci- litar la localización de los programas en memoria. Cuando se mueven datos y programas de un segmento de memoria a otro, como se requiere en los sistemas de multiprogramación, los valores de dirección de las instruccio- nes deben reflejar este cambio de posición. Con un registro base los valores de desplazamiento de las instrucciones no tienen que cambiar. Sólo el valor del registro base requiere una actualización para reflejar el comienzo de un nuevo segmento de memoria. Ejemplo numérico Para mostrar las diferencias entre los diferentes modos, veremos el ejemplo de los modos de direccionamiento sobre las ins- trucciones que se definen en la figura 11. La instrucción de dos palabras 8 MODOS DE DIRECCIONAMIENTO 33 en la dirección 200 y 201 es una instrucción, “cargar a AC” con un campo de dirección igual a 500. La primera palabra, de la instrucción especifica el código de operación y modo, y la segunda palabra especifica la parte de la dirección. PC tiene el valor 200 para recuperar esta instrucción. El contenido del registro de procesador R1 es 400, y el contenido de un registro ı́ndice XR es 100. AC recibe el operando después de que se ejecuta la instrucción. La figura 11 lista unas cuantas direcciones pertinentes y muestra el contenido de la memoria en cada una de ellas. Figura 11: Ejemplo numérico para modos de direccionamiento El campo de modo de la instrucción puede especificar uno de varios mo- dos. Para cada modo posible calculamos la dirección efectiva y el operando que debe cargarse dentro de AC. En el modo de direccionamiento directo la dirección efectiva es la parte de la dirección 500 de la instrucción y el operando que se va a cargar dentro de AC es 800. En el modo inmediato la segunda palabra, de la instrucción se toma como el operando más que como dirección, por lo que se carga 500 dentro de AC. (En este caso la dirección efectiva es 201.) En el modo indirecto se almacena la dirección efectiva de la memoria en la dirección 500. Por lo tanto, la dirección efectiva es 800 y el operando es 300. En el modo relativo, la dirección efectiva es 500 + 202 = 9 TIPOS DE INTERRUPCIONES 34 702 y el operando es 325. (Nótese que el valor en PC, después de la fase de recuperación y durante la fase de ejecución es 202.) En el modo de ı́ndice la dirección efectiva es XR + 500 = 100 + 500 = 600 y el operando es 900. En el modo de registro el operando está en R1 y se carga 400 dentro de AC. (En este caso no hay una dirección efectiva.) En el modo indirecto de registro la dirección efectiva es 400, igual al contenido de R1 y el operando cargado en AC es 700. El modo de autoincremento es igual que el modo indirecto de registro, excepto en que R1, se incrementa a 401 después de la ejecución de la instrucción. El modo de autodecremento decrementa R1 a 399 antes de la ejecución de la instrucción. El operando que se carga en AC es ahora 450. La figura 12 lista los valores de la dirección efectiva y el operando cargado en AC para los nueve modos de direccionamiento. Figura 12: Lista de direcciones efectivas y operandos del ejemplo numérico 9. Tipos de interrupciones Existen tres tipos principales de interrupciones que producen una de- tención en la ejecución normal de un programa. Se clasifican de la manera siguiente: 1. Interrupciones externas 2. Interrupciones internas 3. Interrupciones de programa Las interrupciones externas provienen de dispositivos de entrada y salida (E/S), de un dispositivo de temporización, de un circuito que monitorea la 9 TIPOS DE INTERRUPCIONES 35 fuente de alimentación o de cualquier otra fuente externa. Algunos ejemplos de lo que produce interrupciones externas son dispositivos de E/S que soli- citan transferencia de datos, dispositivos de E/S que terminan transferencia de datos, tiempo transcurrido de un evento o una falla de energı́a. Puede ocurrir una interrupción por tiempo transcurrido de un programa que esté en un ciclo que no termina y que, por lo tanto, excede su tiempo asignado. Una interrupción por falla de energı́a puede tener como su rutina de servicio a un programa que transfiere el estado completo de la CPU a una memoria no volátil en los pocos segundos anteriores a una falla de energı́a. Las in- terrupciones internas surgen debido a la utilización ilegal o errónea de una instrucción o datos. Las interrupciones internas también se llaman trampas. Algunos ejemplos de las interrupciones provocadas por condiciones de error internas son los sobreflujos de registro, intentar dividir en cero, un código de operación no válido, desbordamiento de pila, y violación de la protec- ción (falla de protección de memoria asignada a un proceso en ejecución). Por lo general, estas condiciones de error ocurren como resultado de una terminación prematura de la ejecución de una instrucción. El programa de servicio que procesa la interrupción interna determina la medida correctiva que se debe tomar. La diferencia entre las interrupciones interna y externa es que la interna se inicia por alguna condición excepcional causada por el programa mismo, más bien que por un evento externo. Las interrupciones internas son sı́ncronas con el programa en tanto que las externas no lo son. Si el programa se vuelve a ejecutar, las interrupciones internas ocurrirán en el mismo lugar cada vez. Las interrupciones externas dependen de condiciones independientes al programa que se ejecuta en ese momento. Las interrup- ciones internas y externas se inician a partir de señales que ocurren en la circuiterı́a de la CPU. Una interrupción de programa se inicia al ejecutar una instrucción. La interrupción de programa es una instrucción de solicitud especial que se comporta como una interrupción más que como una solicitud de subrutina. El programador puede utilizarla para iniciar un procedimiento de interrupción en cualquier punto que se desee del programa. La instruc- ción INT, que vimos en el ejemplo de programa ensamblador analizado en las unidades anteriores. El uso más común de la interrupción de programa se asocia con una instrucción de llamada de supervisor. Esta instrucción proporciona medios para cambiar el modo de usuario de CPU al modo su- pervisor. Sólo ciertas operaciones pueden asignarse al modo supervisor en la computadora, por ejemplo, un procedimiento de transferencia de entrada o salida complejo. Un programa escrito por un usuario debe correr en el modo usuario. Cuando se necesita una transferencia de entrada o salida, se solicita el modo supervisor mediante una instrucción de solicitud de supervisor. Esta instrucción produce una interrupción de programa que almacena el estado anterior de la CPU y trae una nueva PSW (palabra de estado de programa: contiene la información que caracteriza a la CPU, es decir el contenido de sus banderas de estado y de control) que pertenece al modo supervisor. El 10 RISC 36 programa que solicita debe pasar la información al sistema operativo con el fin de especificar la tarea particular solicitada. 10. Computadora de conjunto de instrucciones re- ducido (RISC) Un aspecto importante de la arquitectura de computadoras es el diseño de conjunto de instrucciones para el procesador. El conjunto de instruccio- nes elegido para una computadora particular determina la manera en que se construyen los programas de lenguaje de máquina. Las primeras compu- tadoras tenı́an conjuntos de instrucciones pequeños y simples, forzados sobre todo por la necesidad de minimizar la circuiterı́a utilizada para implantarlos. Conforme la circuiterı́a digital se hizo más barata con la aparición de los cir- cuitos integrados, las instrucciones de computadora tendieron a aumentar, tanto en cantidad como en complejidad. Muchas computadoras tienen con- juntos de instrucciones que incluyen más de 100 y, en ocasiones, más de 200 instrucciones. Las computadoras también emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento. La tendencia hacia la complejidad de la circuiterı́a de computadora la produjeron varios factores, como el mejoramiento de los modelos existentes para proporcionar más apli- caciones al cliente, la adición de instrucciones que facilitaban la traducción de programas en lenguaje de alto nivel a programas de lenguaje de máquina y la búsqueda para desarrollar máquinas que trasladaran funciones de im- plantaciones de programa a implantaciones de hardware. Una computadora con una gran cantidad de instrucciones se clasifica como una computado- ra con conjunto de instrucciones complejo, CISC (Complex Instruction Set Computer: Computadora con conjunto de instrucciones complejo). Al principio de los años ochenta, muchos diseñadores de computadora recomendaron que las máquinas utilizaran menos instrucciones con fórmulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU, sin tener que utilizar la memoria con tanta frecuencia. Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido, RISC (Reduced Instruction Set Computer: Computadora con con- junto de instrucciones reducido). En esta sección presentamos las principales caracterı́sticas de las arquitecturas CISC y RISC y después el conjunto de instrucciones y el formato de instrucciones de un procesador. Caracterı́sticas CISC El diseño de un conjunto de instrucciones para una computadora debe consi- derar no sólo fórmulas de lenguaje de máquina, sino también los requerimien- tos internos en la utilización de lenguajes de programación de alto nivel. La traducción de programas de alto nivel a programas de lenguaje de máquina se realiza mediante un programa compilador. Una razón para la tendencia a 10 RISC 37 proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilación y mejorar el desempeño general de la computadora. La tarea de un compilador es generar una secuencia de instrucciones de máquina para cada enunciado de lenguaje de alto nivel. La tarea se simplifica si existen instrucciones de máquina que integren los enunciados en forma directa. El propósito esencial de una arquitectura CISC es intentar proporcionar una única instrucción de máquina para cada enunciado que esté escrita en un lenguaje de alto nivel. Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370. Otra caracterı́stica de la arquitectura CISC es la incorporación de for- matos de instrucciones de tamaño variable. Las instrucciones que necesitan operandos de registro pueden tener sólo dos bytes de longitud, pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el código de la instrucción. Si la computadora tiene palabras de 32 bits (cuatro bytes), la primera instrucción ocupa la mitad de una palabra, en tanto la segunda instrucción necesita una palabra más un byte en la siguiente. Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificación que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes. Las instrucciones en un procesador CISC tı́pico proporcionan la mani- pulación directa de los operandos que residen en la memoria. Por ejemplo, una instrucción ADD puede especificar un operando en la memoria median- te un direccionamiento de ı́ndice y un segundo operando en la memoria por medio de un direccionamiento directo. Puede incluirse en la instrucción otra localidad de memoria para almacenar la suma. Esto requiere tres referencias de memoria durante la ejecución de la instrucción. Aunque los procesado- res CISC tienen instrucciones que sólo utilizan registros de procesador, la disponibilidad de otros modos de operaciones tiende a simplificar la compi- lación de lenguajes de alto nivel. Sin embargo, conforme se incorporan más instrucciones y modos de direccionamiento en una computadora, se necesita más circuiterı́a lógica para implantarlos y soportarlos, y esto puede producir que los cálculos se hagan lentos. En resumen, las principales caracterı́sticas de la arquitectura CISC son: 1. Una gran cantidad de instrucciones, por lo general de 100 a 250. 2. Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia. 3. Una gran cantidad de modos de direccionamiento, por lo general 5 a 20 modos diferentes. 4. Formatos de instrucciones de extensión variable. 10 RISC 38 5. Instrucciones que manipulen operandos en la memoria. Caracterı́sticas RISC El concepto de la arquitectura RISC significa un intento para reducir tiempo de ejecución al simplificar el conjunto de instrucciones de la computadora. Las principales caracterı́sticas de un procesador RISC son: 1. Relativamente pocas instrucciones. 2. Relativamente pocos modos de direccionamiento. 3. El acceso a memoria limitado a instrucciones de carga y almacena- miento. 4. Todas las operaciones realizadas dentro de los registros de la CPU. 5. Formatos de instrucciones decodificados con facilidad, de longitud fija. 6. Ejecución del ciclo de instrucción única. 7. Control por circuiterı́a en lugar de microprogramado. El pequeño conjunto de instrucciones de un procesador RISC tı́pico consiste principalmente en operaciones registro a registro; y sólo tiene las operacio- nes cargar (LOAD) y almacenar para accesar la memoria (STORE). Cada operando se introduce al procesador con una instrucción cargar. Todos los cálculos se hacen entre los datos almacenados en los registros del procesador. Los resultados se transfieren a la memoria mediante instrucciones almace- nar. Esta caracterı́stica de arquitectura simplifica el conjunto de instruccio- nes y estimula la optimización de la manipulación de registros. Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tie- nen registros de direccionamiento simple. Pueden incluirse otros modos de direccionamiento, como los operandos inmediatos y el modo relativo. Al usar un formato de instrucciones simple, la longitud de las instruccio- nes puede fijarse y alinearse en palabras contiguas. Un aspecto importante del formato de instrucción RISC es que resulta fácil de decodificar. Por lo tanto, el control puede acceder simultáneamente el código de operación y los campos de registro del código de la instrucción. Al simplificar las instruccio- nes y su formato, también puede hacerse más sencilla la lógica de control. Para operaciones más rápidas, es preferible un control de circuiterı́a sobre uno mı́croprogramado. En el capı́tulo 5 se presenta un ejemplo del control de circuiterı́a, junto con la unidad de control de la computadora básica. Una caracterı́stica de los procesadores RISC es su capacidad para ejecu- tar una instrucción por ciclo de reloj. Esto se logra al hacer simultáneamente 10 RISC 39 las fases de recuperación, decodificación y ejecución de dos o tres instruc- ciones, usando un procedimiento denominado paralelismo (Sobre el diseño de estos procesadores más eficientes y sobre cómo trabajan, ampliaremos en Arquitectura del Procesador II). Una instrucción cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma más tiempo que las operaciones de registro. En ocasiones se atribuyen a RISC un paralelismo eficiente y otras cuantas caracterı́sticas, aunque también pueden existir en arquitecturas no RISC. Otras caracterı́sticas que se le atribuyen a la arquitectura RISC son: 1. Una cantidad de registros en el procesador relativamente grande. 2. Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos. 3. Paralelismo de instrucciones eficiente. 4. Soporte de compilador para traducción eficiente de programas de len- guaje de alto nivel a programas de lenguaje de máquina. Es conveniente tener una gran cantidad de registros para almacenar los resul- tados intermedios y para optimizar las referencias de operandos. La ventaja del almacenamiento en registros, a diferencia del almacenamiento en me- moria, es que los registros pueden transferir información a otros registros mucho más rápido que la transferencia de información hacia y desde la me- moria. Por esa razón, se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia. Los estu- dios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instruccio- nes y los efectos de un archivo de registros grande. Debido a eso, a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento. En la siguiente sección se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas después de una solicitud de procedimiento.