Download GUIA 24: REPERTORIO DE INSTRUCCIONES
Document related concepts
no text concepts found
Transcript
ARQUITECTURA DEL COMPUTADOR UNIMET Prof. Sandro Costantini REPERTORIO DE INSTRUCCIONES GUIA 24: REPERTORIO DE INSTRUCCIONES INSTRUCCIONES Las instrucciones maquinas son las acciones elementales que puede ejecutar un computador. Una acción compleja deberá codificarse como una secuencia de instrucciones máquina en lo que se denomina un programa. La arquitectura de un procesador entendida como el conjunto de recursos operativos disponibles por un programador a nivel de lenguaje maquina queda definida por el repertorio de instrucciones ISA (Instruction Set Architecture). En general, una instrucción básica que el computador realiza sobre unos datos ubicados en la memoria o en los registros de la maquina y a los que accede utilizando un modo de direccionamiento. Un repertorio de instrucciones no sólo define las operaciones que el computador puede realizar (sumas, restas, etc.) sino que también incluye descripciones del modelo de programación, es decir registros accesibles por el programador, modos de direccionamiento, tipos de operados, tamaño de los buses etc. Desde el punto de vista del diseñador el repertorio de instrucciones da las especificaciones funcionales de la Unidad Central de Proceso (CPU). El objetivo de los diseñadores de computadores es encontrar un repertorio que haga fácil la construcción del hardware y del compilador al tiempo que se maximiza el rendimiento y se minimiza el coste. Por consiguiente, la arquitectura ISA de un procesador viene determinada por los siguientes factores. • • • • Tipo de instrucciones a realizar Tipos de representación de los datos Modos de direccionamiento que son mecanismos utilizados para especificar un operando o la ubicación de un operando. Formatos de las Instrucciones que indican como se codifica y distribuye la información en la instrucción TIPOS DE INSTRUCCIONES La selección del juego de instrucciones de un computador es uno de los puntos críticos de diseño. Las Instrucciones más frecuentes son: • Movimiento de datos • Modificación de secuencia • Aritméticas • Comparación • Lógicas • Desplazamiento • De entrada/salida FORMATO DE LAS INSTRUCCIONES El formato de una instrucción máquina define la disposición y el reparto de sus bits entre los componentes de la instrucción. El formato de una instrucción debe incluir el código e, implícita o explícitamente, cero o mas operandos. Los operandos son datos que están en alguno de los registros internos de la CPU, en la memoria principal o en algún controlador de entrada/salida. A cada operando se accede mediante uno de los distintos modos de direccionamiento que veremos posteriormente. A la hora de diseñar un juego de instrucciones, se deben tener en cuenta ciertas consideraciones sobre dos cuestiones básicas: la longitud de la instrucción y el reparto de los bits que la componen. Un formato debe contener la siguiente información: • Operación que realiza la instrucción • Dirección de los operados • Dirección resultado GUIA 24 © 2007 Sandro Costantini 1 ARQUITECTURA DEL COMPUTADOR UNIMET Prof. Sandro Costantini REPERTORIO DE INSTRUCCIONES • • Dirección siguiente instrucción Modo de representación de operados LONGITUD DE LAS INSTRUCCIONES Hay un claro compromiso entre el deseo de un rico y variado repertorio de instrucciones, y la necesidad de ahorrar espacio. Los programadores quieren muchos códigos de operación distintos (requieren muchos bits en el campo de código de operación) para disponer de operaciones que se ajusten lo más posible a sus necesidades, y así escribir programas más cortos. De igual manera, cuanto más modos de direccionamiento estén disponibles, más flexibilidad tendrán para manejar estructuras de datos complejas, como tablas o matrices. Por otro lado, puesto que cada vez se dispone de mayor cantidad de memoria, se requieren muchos bits para hacer referencia a un gran espacio de direccionamiento. Pero claro, una instrucción que ofrezca todo esto puede ocupar posiblemente el doble de bits que otra similar que no ofrezca tanta flexibilidad. Está claro que una instrucción larga ocupa más espacio en memoria que una corta, se tarda más tiempo en llevarla de memoria a la CPU, y se tarda más tiempo en decodificarla. Se debe tener en cuenta que el ancho del bus de datos sea múltiplo de la longitud de un carácter, para evitar desaprovechar el espacio de almacenamiento. Y esta restricción afecta a la longitud de las instrucciones, que deben ocupar un número entero de palabras, o en una palabra debe caber un número entero de instrucciones. Por esto los tamaños de las instrucciones suelen ser múltiplos de 8. Un diseño con caracteres de 9 bits, instrucciones de 12 y palabras de 31 bits sería una catástrofe. REPARTO DE LOS BITS Aquí el compromiso está en el reparto de los bits disponibles entre el número de códigos de operación y la versatilidad de los operandos. Esta versatilidad genera las siguientes preguntas: ¿cuántos operandos hay en una instrucción? ¿de cuantos modos de direccionamiento se dispone? ¿dónde están los operandos, en registro o en memoria? ¿Cuántos registros hay? Las informaciones relativas a los factores mencionados anteriormente se codifican en cada una de las instrucciones siguiendo un formato preestablecido. El formato determinará la longitud en bits de las instrucciones y los campos que codifican el valor de los factores citados. Los campos típicos de una instrucción son: • • Código de operación Campo de dirección El Código de operación indica la operación a realizar por la instrucción. Es un campo con tamaño fijo o variable. Por ejemplo si el campo tiene 8 bits esto indica que el repertorio tendrá 28 operaciones diferentes. El código de operación puede contener más información que la de la operación a ejecutar. Por ejemplo, los modos de direccionamiento pueden ir incluidos en este código, o tener un campo independiente. Como no todas las instrucciones se utilizan con la misma frecuencia, en ocasiones se tienen códigos con menos bits para las instrucciones más utilizadas, de esta manera se optimiza espacio. El campo de dirección especifica la dirección de un dato, resultado o instrucción a la que se bifurca. Lógicamente existirán tanto campos dirección como operados tenga la instrucción. Igual que ocurría con el código de operación puede incluir implícitamente los modos de direccionamiento utilizados (si el modo de dirección se incluye en el código de operación no se incluye aquí y viceversa) En algunas ocasiones se utilizan extensiones de código. Como la longitud de la instrucción es fija, si el tamaño del campo de código de operación se extiende, tendremos instrucciones con menor numero de operados. Con esto en un computador podemos tener varios formatos de instrucción. GUIA 24 © 2007 Sandro Costantini 2 ARQUITECTURA DEL COMPUTADOR UNIMET Prof. Sandro Costantini REPERTORIO DE INSTRUCCIONES En general una instrucción se compone de los siguientes campos del programa. • • • • Código de operación (CO) Operandos fuentes (OP1,OP2,...) Operando destino (Opd) Instrucción siguiente (IS) CO OP1 OP2 ....... OPd IS El código de operación determina la operación que se realiza sobre los operandos 1,2,... El resultado se deja en el Operando Destino. Lo normal es que el numero de operandos fuentes de un repertorio no pase de 2. La dirección de la instrucción siguiente IS queda implícita en todas las instrucciones (se trata de la instrucción siguiente del programa) salvo en las instrucciones de ruptura condicional o incondicional de secuencia. INSTRUCCIONES CON 3 OPERANDOS: CO OP1(fuente1) OP2(fuente2) OP3(destino) Constan de un campo de código de operación y 3 operandos que corresponden a las direcciones de las dos entradas y la salida de la operación. REG B REG A Presenta la máxima flexibilidad pero ocupa muchos bits si los operandos están en memoria. ULA REGISTRO DE INSTRUCCION Ejemplo ADD B, C, A : A ← B+C ACUMULADOR (A, B, C son direcciones de memoria) INSTRUCCIONES CON 2 OPERANDOS: CO OP1(fuente1) OP2(fuente2) Como la de 3 operandos, solo que en una de las direcciones se almacena también el resultado. Con esto se reduce el tamaño de la instrucción pero se pierde uno de los operandos. Ejemplo: ADD B, C : B ← B+C REG B REG A ULA REGISTRO DE INSTRUCCION ACUMULADOR GUIA 24 © 2007 Sandro Costantini 3 ARQUITECTURA DEL COMPUTADOR UNIMET Prof. Sandro Costantini REPERTORIO DE INSTRUCCIONES INSTRUCCIONES CON 1 OPERANDO: CO OP1(fuente1) Supone que fuente1 y destino es un registro predeterminado (acumulador). Se pierde un operando fuente. Ejemplo: ADD B : REG B REG A ULA Acumulador ← [Acumulador] + B REGISTRO DE INSTRUCCION ACUMULADOR INSTRUCCIONES CON 0 OPERANDOS: CO Se trata de computadores que trabajan sobre una pila Ejemplo: ADD : Tope de pila ← [ Tope de pila] + [Tope de pila -1] MODOS DE DIRECCIONAMIENTO Son procedimientos que permiten determinar un operando o la ubicación de un operando o una instrucción. Generalmente lo que se especifica es la dirección del operando. Se define dirección efectiva como la dirección en la que se encuentra el objeto, siendo un objeto cualquier elemento direccionable es decir, una instrucción, un operando o un resultado. Los objetos pueden residir en la propia instrucción, en un registro o en la memoria principal. Los modos de direccionamiento existen por diversos motivos. Porque ahorran espacio de memoria. Por ejemplo. Si un bus de direcciones tiene 64 bits, para direccionar un elemento de memoria necesitamos instrucciones de más de 64 bits, puesto que una instrucción debe incluir mas información aparte de la dirección del operando . Si implementamos un modo de direccionamiento que solo utilice 32 bits conseguimos instrucciones más pequeñas. Cuánto más pequeñas sean las instrucciones, menos memoria se gasta. Los modos de direccionamiento suelen utilizar menos bits que los necesarios para direccionar directamente la memoria. Además, su uso simplifica el manejo de las estructuras de datos complejas, dan flexibilidad a los programadores de lenguaje máquina y facilitan el diseño de compiladores. De las diferentes clasificaciones que existen nosotros vamos a usar la siguiente: • • • • GUIA 24 Inmediato Directo Indirecto Indexado © 2007 Sandro Costantini 4 UNIMET ARQUITECTURA DEL COMPUTADOR Prof. Sandro Costantini REPERTORIO DE INSTRUCCIONES DIRECCIONAMIENTO INMEDIATO La forma más simple de indicar un operando es incluyéndolo en la propia instrucción. Ya CO OPERANDO que las instrucciones no son modificables, este es el modo que se utiliza en operaciones con constantes. Si la constante es un valor numérico, se almacena en complemento a dos. La ventaja del direccionamiento inmediato es que no se requieren referencias adicionales a memoria para obtener el operando, ahorrando por lo tanto espacio y tiempo. El inconveniente es que el espacio reservado para este operando suele estar restringido y suele ser menor que el tamaño de la palabra, por lo que en algunos procesadores solamente se utiliza para constantes de valores pequeños. DIRECCIONAMIENTO DIRECTO Otra forma muy simple de hacer referencia a un operando es indicando su dirección en memoria principal, y solamente requiere una referencia adicional a memoria para obtener un operando. Es el modo de direccionamiento común para las variables globales de los programas. La instrucción siempre accesará a la misma localidad de memoria exactamente. Si bien el valor contenido en ella puede cambiar, la dirección no puede alterarse. MEMORIA CO A A operando operando DIRECCIONAMIENTO A REGISTRO Similar al direccionamiento directo, pero en este caso, el campo de dirección se refiere a uno de los registros generales del procesador en lugar de una posición de memoria. Las ventajas que tiene son que solo necesita 3 0 4 bits para indicar uno de los registros REGISTROS generales, y que no requiere referencias R CO adicionales a memoria. El inconveniente es que no se suele disponer de muchos registros, aunque con el advenimiento de las maquinas RISC, la tendencia es a ir incrementando su operando R número. operando Se utiliza para guardar valores temporales en la evaluación de expresiones, o para mantener en registros algunas variables que se referencian muy a menudo. DIRECCIONAMIENTO INDIRECTO En este modo se hace referencia a una palabra de memoria principal en la que se encuentra la dirección del operando. Con una “indirección” se requieren dos accesos adicionales a memoria para obtener el operando. Se utiliza cuando la dirección de las variables no se conoce en el tiempo de compilación, sino que es durante la ejecución del programa cuando se calcula la dirección del operando y se guarda ésta en memoria (o en un registro como se ve en el siguiente modo). GUIA 24 MEMORIA CO © 2007 Sandro Costantini A A operando 5 UNIMET ARQUITECTURA DEL COMPUTADOR Prof. Sandro Costantini REPERTORIO DE INSTRUCCIONES DIRECCIONAMIENTO INDIRECTO POR REGISTRO En este método, el operando hace referencia a un registro general en el que se encuentra la dirección del dato. Cuando una dirección se usa de esta manera, se llama apuntador. Una gran ventaja del direccionamiento indirecto por registro es que puede hacer referencias a la memoria sin pagar el precio de tener una dirección de memoria completa en la instrucción. MEMORIA CO R operando operando REGISTROS R operando DIRECCIONAMIENTO INDEXADO En este modo para formar la dirección del dato se utilizan un registro más un desplazamiento que viene explícitamente en el campo de operando. Dirección del operando es igual al contenido del registro + una constante. MEMORIA CO R 5 + operando operando REGISTROS R GUIA 24 operando © 2007 Sandro Costantini 6 ARQUITECTURA DEL COMPUTADOR UNIMET Prof. Sandro Costantini REPERTORIO DE INSTRUCCIONES EJEMPLO DE DISEÑO DE FORMATO DE INSTRUCCION. Diseñar el formato de las instrucciones de un computador con 8 registros de propósito general que permita codificar en una instrucción de 32 bits lo siguiente: • 12 instrucciones de 3 operados 2 operados que permitan direccionamiento directo e indirecto de memoria 1 operando que permita direccionamiento a registro e indirecto por registro • 150 instrucciones de 2 operados 1 operando que permita direccionamiento directo e indirecto de memoria 1 operando que permita direccionamiento a registro e indirecto por registro • 30 instrucciones de 0 operados NOTA: El campo dirección de los operados con direccionamiento directo e indirecto de memoria será de 11 bits. Solución: Los operados que permiten direccionamiento directo e indirecto de memoria requieren: • 1 bit para especificar el modo de direccionamiento ( m=0 directo, m=1 indirecto) • 11 bits para especificar la dirección Los operados que permiten direccionamiento de registro e indirecto por registro requieren: • 1 bit para especificar el modo de direccionamiento ( m=0 a registro, m=1 indirecto por registro) • 3 bits para especificar el numero de registro (ya que tenemos 8 registros) Para las 12 instrucciones de tres operados necesitamos: • 4 bits para especificar el tipo de operaciones de la 0( 0000) al 11 (1011) • 12 bits para especificar el primer y segundo operando respectivamente • 4 bits para especificar el tercer operando Para las 150 instrucciones de dos operados necesitamos: • 8 bits para especificar el tipo de operando del 0 ( 00000000) al 149 (1010101) • 12 bits para especificar el primer operando • 4 bits para especificar el tercer operando Para las 30 instrucciones sin operados necesitamos: • 5 bits para especificar el tipo de operación: del 0(00000) al 29 (11101) Instrucción de 3 operandos 4 1 11 1 11 tipo m1 dir1 m2 dir2 CODIGO OPERACION OPERANDO 1 Instrucción sin operandos 1 3 m3 reg OPERANDO 2 4 8 5 1111 11111111 tipo CODIGO OPERACION 15 NO USADO Nomenclatura Instrucción de 2 operandos 4 8 1111 tipo 4 CODIGO OPERACION NO USADO GUIA 24 1 11 m1 dir1 1 3 m2 reg mk: modo de direccionamiento del operando k dirk: dirección del operando k reg: número de registro tipo: tipo de instrucción a ejecutar OPERANDO 1 © 2007 Sandro Costantini 7 ARQUITECTURA DEL COMPUTADOR UNIMET Prof. Sandro Costantini REPERTORIO DE INSTRUCCIONES EJEMPLO DE EXPANSION DEL CODIGO DE OPERACION Supongamos a instrucción de 16 bits con código de operación de 4 bits y 3 operados de 4 bits cada uno como se muestra en la figura: 15 14 13 12 11 10 9 CO DIR1 8 7 6 5 4 3 DIR2 2 1 0 DIR3 Un código de operación de 4 bits solo provee 16 instrucciones, así que probablemente sea muy limitante. Consideremos el caso en que uno de los códigos de operación por ejemplo el 1111, se utilice para designar instrucciones con un código de operación de 8 bits. Así que tendremos solamente 15 instrucciones de 3 campos de dirección, pero podemos disponer un set adicional de instrucciones con código de operación de 8 bits con 2 campos de dirección. Uno o mas de este código de operación de 8 bits pueden utilizarse para designar instrucciones con un código de operación de 12 bits y un campo de dirección. Supongamos que utilizamos los códigos de operación 11111110 y 11111111. Finalmente uno o mas de estos códigos de operación de 12 bits puede utilizarse para designar instrucciones con código de operación de 16 bits sin campo de dirección. Supongamos que utilizamos el 111111111111. Resumiendo tendremos un total de 76 instrucciones diferentes de la siguiente forma: • 15 instrucciones de 3 direcciones: CO bits 12-15; OP1 bits 8-11; OP2 bits 4-7; OP3 bits 0-3 15 14 13 12 11 10 9 8 7 CO • DIR1 DIR2 CO 0 Los códigos de operación van desde el 0000 hasta el 1110 DIR3 6 5 4 DIR1 3 2 1 0 Los códigos de operación van desde el 1111 0000 hasta el 1111 1101 DIR2 31 instrucciones de 1 direcciones: CO bits 4-15; OP1 bits 0-3 15 14 13 12 11 10 9 8 7 1 1 1 1 1 1 1 6 5 4 CO • 3 2 1 14 instrucciones de 2 direcciones: CO bits 8-15; OP1 bits 4-7; OP2 bits 0-3 15 14 13 12 11 10 9 8 7 1 1 1 1 • 6 5 4 3 2 1 0 Los códigos de operación van desde el 1111 1110 0000 hasta el 1111 1111 1110 DIR1 16 instrucciones de 0 direcciones: CO bits 0-15 15 14 13 12 11 10 9 8 7 6 5 4 1 1 1 1 1 1 1 1 1 1 1 1 3 2 1 0 Los códigos de operación van desde el 1111 1111 1111 0000 hasta el 1111 1111 1111 1111 CO NOTA: Si se hubiese escogido solo una combinación del código de 8 bits (por ejemplo 11111111) el resultado sería diferente: ¿Cuántas instrucciones en total resultarían? GUIA 24 © 2007 Sandro Costantini 8 UNIMET ARQUITECTURA DEL COMPUTADOR Prof. Sandro Costantini REPERTORIO DE INSTRUCCIONES Resumiendo podemos representar el proceso descrito en la siguiente tabla: 0000 0001 DIR 1 DIR 1 DIR 2 DIR 2 DIR 3 DIR 3 . . . . . . . . . . . . 1 1 1 0 DIR 1 1111 0000 1111 0001 DIR 2 DIR 2 DIR 2 DIR 3 DIR 3 DIR 3 . . . . . . . . . 1 1 1 1 1 1 0 1 DIR 2 1111 1110 0000 1111 1110 0000 DIR 3 DIR 3 DIR 3 . . . . . . 15 instrucciones de 3 operados (CO de 4 bits) 14 instrucciones de 2 operados (CO de 8 bits) 31 instrucciones de 1 operados (CO de 12 bits) 1 1 1 1 1 1 1 1 1 1 1 0 DIR 3 1111 1111 1111 0000 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 16 instrucciones de . 0 operados . . (CO de 16 bits) 1111 1111 1111 1111 GUIA 24 © 2007 Sandro Costantini 9