Download Unidad III
Document related concepts
no text concepts found
Transcript
UNIVERSIDAD NACIONAL DE INGENIERIA RECINTO UNIVERSITARIO SIMON BOLIVAR Facultad de Electrotecnia y Computación Departamento de Arquitectura y Sistemas Folleto de Arquitectura de Máquinas Computadoras II Curso 2007 2007 Preparado por: Harriete Martínez Cano José Díaz Chow UNIDAD II III Managua, Septiembre 2007 INDICE DE CONTENIDO 3 DISEÑO DEL CONJUNTO DE INSTRUCCIONES 3.1 INSTRUCCIÓN Y CONJUNTO DE INSTRUCCIONES 1 1 3.1.1 CONJUNTO DE INSTRUCCIONES 1 3.1.2 INSTRUCCIÓN 1 3.1.3 CLASIFICACIÓN DE LAS INSTRUCCIONES 2 3.1.4 FILOSOFÍAS DE DISEÑO DEL CONJUNTO DE INSTRUCCIONES 3 3.2 FORMATO DE INSTRUCCIONES 4 3.3 CODIGO DE OPERACIÓN 4 3.3.1 CODIFICACIÓN DE BLOQUE FIJO 4 3.3.2 CODIFICACIÓN DE BLOQUE EXPANDIDO 5 3.3.3 CODIFICACIÓN HUFFMAN 6 3.4 CAMPOS DE DIRECCIONAMIENTO 9 3.5 MODOS DE DIRECCIONAMIENTO 10 3.5.1 MODO INMEDIATO 10 3.5.2 MODO DIRECTO, DE REGISTRO O DIRECTO DE REGISTRO 11 3.5.3 MODO ABSOLUTO O DIRECTO DE MEMORIA 11 3.5.4 MODO INDIRECTO DE REGISTRO 12 3.5.5 MODO INDIRECTO DE MEMORIA 12 3.5.6 MODO DE AUTOINCREMENTO 13 3.5.7 MODO DE AUTODECREMENTO 13 3.5.8 MODOS DESPLAZADOS 14 3.5.9 MODO DE INDICE O INDIZADO 14 3.5.10 MODO DE BASE - DESPLAZAMIENTO 15 3.5.11 MODO DE DESPLAZAMIENTO RELATIVO 15 3.6 CODIFICACIÓN DEL MD 16 A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I , C U R S O 2 0 0 7 . 3 DISEÑO DEL CONJUNTO DE INSTRUCCIONES 3.1 INSTRUCCIÓN Y CONJUNTO DE INSTRUCCIONES La principal especificación arquitectónica de una computadora o su procesador es quizás el conjunto de instrucciones, pues éste refleja los objetivos del proyecto: “necesitamos construir una máquina que sea capaz de ejecutar estas instrucciones... ”. Bien podría decirse que el repertorio de instrucciones es la “identidad” de la computadora, pues cada procesador diferente tiene un conjunto de instrucciones diferente. 3.1.1 Conjunto de Instrucciones Podemos decir que las instrucciones son comandos que indican al CPU qué operación ejecutar en cada momento. Se denomina conjunto o repertorio de instrucciones a todas las posibles instrucciones para un procesador específico. El diseño del conjunto de instrucciones es el punto de partida de toda arquitectura de computadoras. Es deseable que el conjunto de instrucciones del CPU cumpla con las siguientes características: Completitud El conjunto de instrucciones debe permitir ejecutar todas las operaciones de procesador. Ortogonalidad Debe permitir que todas las operaciones se realicen con todos los tipos de datos que aplican para la misma. Eficiencia Las instrucciones elegidas deben poder permitir todas las operaciones sin redundancias. El ser excesivo y repetitivo degrada la eficiencia. 3.1.2 Instrucción Denominamos instrucción a un tipo especial de dato que se emplea para ordenar al CPU que ejecute una de las operaciones que puede realizar. En términos generales, la instrucción debe tener información acerca del tipo de operación a realizar, con qué operandos, dónde poner el resultado (si la operación genera alguno) y alguna forma de obtener la próxima instrucción. En las máquinas del tipo Von Neumann, que son máquinas secuenciales, se supone que la próxima instrucción está contigua en la memoria. En este caso, la información de próxima instrucción es implícita. Este esquema de secuenciamiento requiere de un puntero o contador de programa que se incremente de forma automática para que siempre señale a la próxima instrucción a ejecutar. Para estos propósitos se emplea un registro del CPU denominado normalmente PC (Program Counter). Una instrucción debe, por tanto determinar: la Operación a ejecutar y los Operandos (tanto fuentes como destino) a emplear en la misma. El secuenciamiento implícito se puede cambiar mediante instrucciones de salto que permiten modificar el PC. Los Operandos pueden especificarse de forma explícita o implícita (cuando están sobreentendidos) en la instrucción. Por ejemplo, las instrucciones de salto no hacen referencia al PC pero está sobreentendido que éste es el destino de esas operaciones. Los operandos pueden residir en registros internos del procesador o en la memoria. Los operandos fuentes también se pueden especificar directamente en la instrucción. Las diferentes formas de obtener los operandos desde donde residan se denominan modos de direccionamiento. Los operandos que residen en memoria pueden especificarse mediante muchos diferentes modos de direccionamiento. José Díaz Chow / Harriete Martínez Cano © MMVI Página 1 A R Q U I T E C T U R A 3.1.3 D E M Á Q U I N A S C O M P U T A D O R A S I , C U R S O 2 0 0 7 . Clasificación de las Instrucciones Podemos clasificar las instrucciones en categorías o tipos de acuerdo a la operación que realizan. En la tabla a continuación se presenta un cuadro sinóptico con el detalle de esta clasificación. Tipo Propósito General Propósito Específico Privilegiadas Categoría Ejemplos Mover datos entre operandos ( puede ser R-R, R-M). * Cambios en los tamaños y extensión de Signo MOVE, LOAD, STORE Aritméticas Operaciones aritméticas. ADD, SUB, DIV, MULT, INC, DEC Lógicas y manejo de bits (bitwise) Operaciones lógicas, de comparación y corrimiento de bits. AND, OR RSHIFT, NOT De Comparación Operaciones que comparan los valores de los operandos. Sirven de base para las de saltos CMP Control de flujo de Programa Permite modificar la secuencia del programa para implementar sentencias de selección, ciclos y llamadas a subrutinas. JP, JR, BRN, CALL, RET E/S Permite el acceso a direcciones del espacio de E/S. (Más adelante se explicará que hay ordenadores que usan las de transferencia cuando el Mapa de E/S está Integrado a M) IN, OUT Tratamiento de Cadenas (Strings) Manipulación de cadenas COMSTR, CATSTR Polinomios y funciones científicas, Vectores y Matrices Para aplicaciones científicas. La instrucción implementada en Hardware acelera la ejecución. También se consideran datos especiales como Vectores, Listas y Matrices Solicitud de atención de los dispositivos de E/S y Tratamiento de condiciones anormales del procesador EVALUATEPOL, VADD Interrupciones y Excepciones De control del Sistema Página 2 Uso Transferencia Protección de Memoria, Detención del programa, reinicio o detención del ordenador, etc. INT, Trap HALT, NOP José Díaz Chow /Harriette Martínez Cano © MMVI A R Q U I T E C T U R A 3.1.4 D E M Á Q U I N A S C O M P U T A D O R A S I I , C U R S O 2 0 0 7 . Filosofías de Diseño del Conjunto de instrucciones Existen básicamente dos filosofías en torno al diseño del conjunto de instrucciones. Al inicio, el diseño de las computadoras estaba orientado a proveer al programador con el mayor posible conjunto de instrucciones con muchas formas de obtener los operandos (modos de direccionamiento), lo cual iba haciendo el hardware cada vez más complejo y mayor el recargo de trabajo para la decodificación y ejecución de las instrucciones. Un estudio reveló que era muy reducido el conjunto de éstas que en realidad se utilizaban y se propuso una nueva filosofía de diseño, basada en el conjunto de instrucciones reducido que realmente era utilizado con frecuencia y simplificar los modos para reducir la complejidad del hardware y mejorar el desempeño. Esta corriente filosófica se denominó RISC (Computadora de conjunto reducido de instrucciones) y a las máquinas con la tendencia de conjunto muy amplio, anteriores a ella se llamó CISC (Computadoras con conjunto complejo de instrucciones). A continuación se presenta un cuadro comparativo de estas dos tendencias. RISC CISC Pocos formatos de instrucciones y sencillos permiten decodificador rápido y control cableado. Muchos formatos muy complejos que normalmente requieren unidad de control microprogramada. Las operaciones de cálculo son registro-registro. Instrucciones específicas de carga y almacenamiento. Las operaciones permiten operandos en memoria. Usan la mínima cantidad de modos de direccionamiento. Buscan permitir la máxima cantidad de modos de direccionamiento. Programas largos pero sencillos. Programas cortos pero complejos. Más fácil de segmentar por su sencillez. Más difícil de segmentar y controlar. Mayor rapidez de ejecución. Ejecución más lenta (complejidad + UC µProg) José Díaz Chow / Harriete Martínez Cano © MMVI Página 3 A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I , C U R S O 2 0 0 7 . 3.2 FORMATO DE INSTRUCCIONES Una instrucción es un tipo de dato especial que se almacena en la misma memoria en que se almacenan los datos y de la misma forma, por tanto es una cadena de bits. Lo importante es que estos bits están organizados de cierta forma para almacenar la información que debe proveer la instrucción. Tal organización se denomina Formato de instrucción. Este define el tamaño de la instrucción y los campos de información de la misma. El formato de instrucción puede ser fijo o variable. En el primero, el tamaño de la instrucción es estático, por ejemplo, siempre de 32 bits. En el segundo el tamaño depende de la instrucción y puede ser de una palabra, dos o más. Por ejemplo, el Z80 tiene formatos de 1, 2 y 3 bytes. El formato de instrucción, por lo general se organiza en campos. Cada campo posee un tipo de información, algunas arquitecturas, sin embargo, tienen campos compuestos y otras mezclan información en un mismo campo. Ejemplos: MIPS siempre el mismo código para el tipo, los operandos aparte FAMILIA ix86, cada CO difiere de acuerdo a la cantidad de operandos El formato debe contener toda la información de la instrucción o la forma de obtenerla: - Operación a realizar Fuente(s): Dependen del tipo de operación (unaria, binaria. La transferencia se supone unaria) Destino: Dónde poner el resultado. A veces implícito ( ADD A, B ; B A + B ) Secuenciamiento: Necesidad de conocer cuál será la próxima instrucción. Por lo general está implícito (máquina secuencial) pero a veces se permite cambiar el flujo de programa afectando al PC con instrucciones específicas o direccionamiento explícito. Nominalmente, el Formato de instrucción, al cual llamaremos F, se compone de Dos partes: - Identificación de la operación: COP o CO: Código que identifica la operación. Direccionamiento: Operandos fuentes y destino. IDENTIFICACION DIRECCIONAMIENTO CO OP1 MD OP2 RES VALOR(ES) 3.3 CODIGO DE OPERACIÓN Es necesario codificar las instrucciones del conjunto de instrucciones a fin que la unidad de control pueda identificar de forma única cada instrucción y proceder de acuerdo a la especificación de la misma. La parte del formato de instrucción que mantiene esta información se denomina bloque de identificación y está conformado por lo general de un único campo llamado Campo de Código de Operación (CO o COP). 3.3.1 Codificación de bloque fijo ¿Cómo podemos proceder para asignar códigos a las instrucciones? es decir, ¿cómo podemos codificar el CO? Existen varias técnicas, la más simple consiste en asignar a cada instrucción una de las combinaciones posibles de un patrón binario. A esta Página 4 José Díaz Chow /Harriette Martínez Cano © MMVI A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I , C U R S O 2 0 0 7 . técnica se le conoce como Técnica de Bloque fijo. Para codificar n instrucciones se requieren log2(n) bits. Por ejemplo, para codificar 13 instrucciones 4 bits son requeridos. nota: n = n (I); n es la cardinalidad del conjunto I o conjunto de instrucciones. Ventajas: Muy fácil de entender Decodificado fácil de implementar Desventajas: Cuando el número de instrucciones no es cercano a la potencia (5 bits para 18) Tenemos desperdicio o a veces diseños muy costosos (al integrar el resto del Formato) 3.3.2 Codificación de bloque expandido Otra técnica empleada es la Técnica de bloque expandido. Esta se basa en el hecho que no todas las instrucciones usan todos los campos de direccionamiento. Se pueden identificar grupos de 3, 2, 1 y 0 operandos, entonces, se pueden emplear pocos bits para el CO de las instrucciones de más operandos y en el nuevo grupo usar los bits del operando que no ocupará el anterior para “expandir” el CO a más bits. Ejemplo: ¿Cuántos bits ( L o longitud) se requieren para el formato de instrucciones de una máquina hipotética, si se tienen que codificar 15 diferentes instrucciones cada una de 2 operandos, donde el operando fuente 1 asume como destino de la operación y cada operando requiere 6 bits para codificarse? L (F) = ? L (CO) = log2(15) = 4 bits L (F) = L (CO) + 2 * L (Op) = 4 + 2 * 6 = 16 bits n = 15 *Nótese que aquí la longitud de los operandos es constante, existen máquinas donde no ocurre lo mismo. Suponga, ahora que además de las 15 de 2 operandos requiero 30 de 1 operando. ¿Cuántos bits se requieren? L (CO) = log2(45) = 6 bits n = 15 + 30 = 45 En este nuevo escenario, la instrucción pasa a tener un total de 18 bits. Note que esto genera un problema interesante, pues si la resolución de la memoria es de un byte y no de palabras de 18 bits, el tamaño de instrucción deberá escalar a 3 * 8 = 24 bits, desperdiciando 6 bits en el formato. Esto no siempre es malo, en términos de rendimiento, pero puede ser un inconveniente en cuanto a ahorro de espacio en disco y memoria. Para evitar el desperdicio del ejemplo anterior, se podría usar la técnica de bloque expandido, así los 6 bits que libera el segundo operando en este nuevo grupo, se pueden emplear para “expandir” el CO. Es importante que queden algunas combinaciones libres del primer formato para poderlas usar como llave que nos indique que esa combinación es expandida. En esta caso queda la combinación 1111. Así el decodificador sabrá que cuando aparezca ésta encabezando el CO, éste será de 4 + 6 = 10 bits. CO 0000 … 1110 1111 OP1 xxxxxx … xxxxxx OP2 xxxxxx … xxxxxx 1111 … 1111 000000 … 111110 xxxxxx … xxxxxx José Díaz Chow / Harriete Martínez Cano © MMVI 15 inst. de 2 operandos 30 inst. de 1 operando Página 5 A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I , C U R S O 2 0 0 7 . Nótese que con este formato, no se requieren más bits para codificar las nuevas 30 instrucciones. * Asignación: Verifique cuántas instrucciones de 0 operandos podrían caber en el formato 3.3.3 Codificación Huffman La tercera técnica, se basa en la teoría estadística de la comunicación y está orientada a minimizar la longitud del CO de las instrucciones más frecuentes. Ésta de denomina Técnica de Codificación de Huffman. La técnica expandida asume que todas las instrucciones son usadas con la misma probabilidad, pero realmente en la práctica esto no es así, ya que en un programa de acumulador, el 40% de las instrucciones son LOAD y STORE, por ejemplo. La técnica de Huffman codifica el CO de las instrucciones usadas mas frecuente con menos bits y las usadas menos frecuentemente con más bits. Esto permite que el número promedio de bits necesarios para codificar un programa típico sea óptimo. Ejemplo: Supongamos que se desea codificar el conjunto de instrucción hipotético mostrado en la fig 2.6 Nemónicos de Instrucciones Contador de Frecuencia Relativo LOAD 1/4 STO 1/4 ADD 1/8 AND 1/8 NOT 1/16 RSHIFT 1/16 JUMP 1/16 HALT 1/16 Figura 2.6 Conjunto de Instrucciones con contador de frecuencia relativo. Los valores del contador de frecuencia relativa se obtienen inspeccionando la ocurrencia de cada Instrucción en un conjunto de programas representativos. En ésta técnica podemos especificar un algoritmo para crear los Códigos para cada CO de cada instrucción. Primero se ordenan las instrucciones en función de su frecuencia relativa o probabilidad de ocurrencia, de mayor a menor de izquierda a derecha. Segundo, se asigna a cada nemónico de Instrucción un nodo etiquetado con el contador de frecuencia relativa correspondiente (figura 2.7) LOAD STO ¼ ¼ ADD 1/8 AND 1/8 NOT 1/16 RSHIFT JUMP 1/16 1/16 HALT 1/16 Figura 2.7 Arreglo inicial de los mnemónicos de las instrucciones. Tercero: Asociar los nodos con el menor peso siempre, mediante la operación suma para genera nuevos nodos hasta que no queden posibles asociaciones. La figuras 2.8 a, b y c muestran este proceso. Cuarto: Las ramas derechas del árbol obtenido son etiquetadas con “0” y las izquierdas con “1” (Figura 2.8 c). Página 6 José Díaz Chow /Harriette Martínez Cano © MMVI A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I , C U R S O 2 0 0 7 . Quinto: Para encontrar el código de operación correspondiente de determinada instrucción se hace un camino desde la raíz hasta el nodo del mnemónico correspondiente. Por ejemplo el CO de la instrucción RSHIFT es 0010. En la figura 2.8 se puede apreciar todos los pasos y en la taba que le sigue se resumen los CO para todo el Conjunto de instrucciones del ejemplo. LOAD STO ADD AND NOT RSH JUMP 1/4 1/4 1/8 1/8 1/16 1/16 1/16 a) HALT 1/16 1/8 LOAD STO ADD AND NOT RSH JUMP 1/4 1/4 1/8 1/8 1/16 1/16 1/16 1/8 b) STO ADD AND NOT RSH JUMP 1/4 1/4 1/8 1/8 1/16 1/16 1/16 1 0 1 0 1 1/4 1/16 1/8 LOAD 1/2 HALT HALT 1/16 1 0 1/8 0 1/8 1 0 1/4 1 0 1/2 0 1 c) 1/2 Figura 2.8 Proceso as asociación de nodos en codificación Huffman MNemónico LOAD STO ADD NOT RSHIFT JUMP HALT CO 11 10 011 010 0010 0001 0000 Camino desde la Raíz. izquierda-izquierda izquierda-derecha der-izq-izq der—izq—der der—der—izq—der der—der—der—izq der—der—der—der Se puede apreciar que el procedimiento de Huffman codifica con menos bits las instrucciones mas frecuentes usadas y con más bits las menos usadas. El número promedio de bits necesarios por instrucción pueden ser calculados usando la formula: José Díaz Chow / Harriete Martínez Cano © MMVI Página 7 A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I , C U R S O 2 0 0 7 . L (CO)med = LA = Σ(i = 1, n) lifi donde l es la longitud del CO y f es la frecuencia relativa de la instrucción i. Para nuestro ejemplo, entonces: L (CO)med = 2(1/4 +1/4) + 3(1/8 +1/8) + 4(1/16 + 1/16 + 1/16 + 1/16) =1+¾+1 = 2.75 bits. Aplicando esta formula al esquema de codificación de bloque donde cada instrucción será codificada con tres bits: L (CO)med = 3(1/4 +1/4) + 3(1/8 + 1/8) +3(1/16 + 1/16 + 1/16 + 1/16) = 3/2 + ¾ + ¾ = 3 bits. El número óptimo de bits para la codificación de un conjunto de mensaje es: L (CO)opt = LO = - Σ(i = 1, n) fi log2( fi ) La diferencia entre la longitud promedio actual y la longitud optima sobre la longitud actual es llamada Redundancia. Ésta mide el grado de desperdicio en el uso de bits para codificar el mensaje y se calcula así: R = LA - LO LA LO = [2(1/4) log2(1/4) + 2(1/8)log2(1/8) + 4(1/16)log2(1/16)] LO = 2.75 bits. Página 8 José Díaz Chow /Harriette Martínez Cano © MMVI A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I , C U R S O 2 0 0 7 . Calculando el desperdicio se nota que en el esquema de Huffman la redundancia es igual a cero, sin embargo para el esquema de código de bloque hay una redundancia de 8.33%. R = (2.75 - 2.75) / 2.75 = 0 Técnica de Huffman R = (3 - 2.75) / 3 = 0.083 (8.33%) Técnica de Bloque. El esquema de Huffman lleva a cabo un resultado óptimo manteniendo la redundancia a un valor mínimo sin embargo cuando los códigos de operación son codificados, el proceso de decodificación toma más tiempo, ya que debe hacerse una búsqueda en el árbol de huffman. En cambio en el esquema de bloque el proceso de decodificación es más fácil, pero hay un porcentaje de redundancia. Aunque la codificación de código de bloque toma espacio de memoria extra es ampliamente usado por su sencillo procedimiento de decodificación. 3.4 CAMPOS DE DIRECCIONAMIENTO El bloque de direccionamiento en el Formato de Instrucción se compone de uno o varios campos de dirección. Estos campos de dirección, especifican cómo y dónde obtener los operandos y donde guardar el resultado. También se usan en instrucciones de saltos para definir la dirección de memoria de la próxima instrucción, que se usa para modificar el PC. Un campo de dirección se estructura de la forma: MD V Figura 2.9 Estructura del Campo de Dirección • MD: Modo de direccionamiento o forma de determinar la dirección efectiva del operando. • V (Valor): Dato que se emplea en el cálculo de la dirección efectiva del operando. Frecuentemente V indica un registro, una dirección de memoria u otro número. En los últimos casos, este valor puede ser bastante grande, tanto que no cabría en el formato de instrucciones, por lo cual se suelen emplear palabras adjuntas en la instrucción para dar cabida a estos valores. La figura abajo muestra una de estas variantes. Palabra de instrucción CO MD1 V1 Palabra complementaria de V MD2 V2 El cálculo de la dirección efectiva del operando se obtiene combinando los valores del MD y V con el estado del procesador. Esquemáticamente: José Díaz Chow / Harriete Martínez Cano © MMVI Página 9 A R Q U I T E C T U R A D E MD M Á Q U I N A S C O M P U T A D O R A S I , C U R S O 2 0 0 7 . V CALCULO DE LA DIRECCION EFECTIVA DIRECCION EFECTIVA DEL OPERANDO ESTADO DEL PROCESADOR Figura 2.11 Cálculo de la dirección efectiva de los operandos. 3.5 MODOS DE DIRECCIONAMIENTO El modo de direccionamiento es la forma o procedimiento que sigue el procesador para expresar dónde se encuentra un operando y cómo obtenerlo. Un operando puede ser residir en memoria o en un registro del procesador, pero los operandos fuentes además pueden explicitarse directamente en la instrucción. Para los operandos en registros, la dirección efectiva del operando es el índice o identificación del registro. Los operandos en memoria, se pueden obtener de diferentes modos. El objetivo final es obtener la dirección efectiva donde se almacena el operando en memoria. A continuación estudiaremos los modos de direccionamiento más comunes. 3.5.1 MODO INMEDIATO El valor del operando es especificado dentro de la misma instrucción. Realmente V es el valor mismo del operando. En este caso no es necesario calcular la dirección efectiva. MD Página 10 V = # ( operando ) Ventajas: Desventajas: Uso: Forma sencilla de obtención del operando. Sólo permite operandos fuente y valores constantes. Inicialización de variables y declaración de constantes. Ejemplo: MOVE R10, 9 ; R10 ← 9 José Díaz Chow /Harriette Martínez Cano © MMVI A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I , C U R S O 2 0 0 7 . 3.5.2 MODO DIRECTO, DE REGISTRO O DIRECTO DE REGISTRO El operando se encuentra en uno de los registros del procesador. En este caso el valor del operando es el contenido del registro. MD Modo de direccionamiento Directo o Directo de Registro r BANCO DE REGISTROS DEL PROCESADOR OPERANDO Ventajas: Rr Uso: Rapidez de acceso. El operando ya está dentro del procesador. Pocos bits para codificar los registros. Si se necesita estar intercambiando el valor constantemente con una variable en Memoria Almacenar datos que se utilizan con mucha frecuencia. Ejemplo: MOVE R10, R1 Desventajas: : R10 ← [R1] 3.5.3 MODO ABSOLUTO O DIRECTO DE MEMORIA La dirección efectiva del operando se especifica directamente en la instrucción. Regularmente se emplea algún convencionalismo para diferenciar este modo del inmediato. Nosotros emplearemos paréntesis. MD @ Modo de direccionamiento Absoluto o Directo de Memoria MEMORIA OPERANDO Ventajas: Uso: Permite acceder a cualquier dirección de memoria. No se requiere de cálculo adicional. Requiere muchos bits para direccionamiento. Requiere soporte en uso de estructuras de datos y programas portables. Saltos absolutos, Rutinas fijas (sistema), paso de parámetros, puertos de E/S. Ejemplo: MOV R10, (1800) Desventajas: José Díaz Chow / Harriete Martínez Cano © MMVI ; R10 ← [1800] Página 11 A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I , C U R S O 2 0 0 7 . 3.5.4 MODO INDIRECTO DE REGISTRO El registro r contiene la dirección efectiva del operando. MD Modo de direccionamiento Indirecto de Registro r BANCO DE REGISTROS DEL PROCESADOR MEMORIA Rr Dirección Efectiva OPERANDO Se pueden dar diferentes niveles de Indirección, según la arquitectura. Como ejercicio visualice el diagrama gráfico para doble indirección. Ventajas: Uso: Permite acceder a cualquier dirección de memoria usando pocos bits. Flexibiliza el uso punteros, vectores y estructuras. Requiere que se cargue la dirección al registro. Limita el uso de registros para operandos. Datos estructurados y paso de parámetros a subrutinas. Ejemplo: MOV R10, (R1) Desventajas: ; R10 M(R1) 3.5.5 MODO INDIRECTO DE MEMORIA El valor de V especifica la dirección de memoria en cuyo contenido está la dirección efectiva del operando. MD @ Modo de direccionamiento Indirecto de Memoria MEMORIA Dirección Efectiva OPERANDO Este modo no es muy frecuente, ni eficiente en la actualidad, sin embargo fue usado en antiguas máquinas para automatizar punteros y acceso a estructuras de datos. Ejemplo: Página 12 MOV R10, ((1800)) ; R10 M( M(1800)) José Díaz Chow /Harriette Martínez Cano © MMVI A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I , C U R S O 2 0 0 7 . 3.5.6 MODO DE AUTOINCREMENTO Este es un modo particularmente útil para trabajar con estructuras de datos estáticas. Está presente en arquitecturas antiguas como la PDP/11. Son variantes del modo indirecto de registro. En el autoincremento, la EA1 es el contenido del registro Rr. Una vez que se obtiene tal dirección el contenido del registro Rr se incrementa en una constante k, que por lo general es 1. MD r Modo de direccionamiento de Autoincremento BANCO DE REGISTROS DEL PROCESADOR MEMORIA Dirección Efectiva OPERANDO Rr Celda A Celda A + k Operando = M([ Rr ]) = [ Rr ] + k Rr Por lo general k es el valor de la palabra o el tamaño de los operandos. Ventajas: Desventajas: Acceso eficiente a elementos consecutivos en arreglos. Cuando k es variable. Ejemplo: ADD (R1)+, R0 ; R0 M( [R1] ) + R0, R1 ← [R1] + k 3.5.7 MODO DE AUTODECREMENTO Es muy similar al de autoincremento, con la variante que el contenido de Rr se decrementa en lugar de incrementarse y esta operación se hace antes de emplear la el contenido del registro en el cálculo de la dirección. Es decir que EA = [Rr] – k. MD r Modo de direccionamiento de Autodecremento BANCO DE REGISTROS DEL PROCESADOR OPERANDO Rr A Rr 1 MEMORIA Celda A - k Celda A = [ Rr ] - k EA: Effective Address, Dirección Efectiva. José Díaz Chow / Harriete Martínez Cano © MMVI Página 13 A R Q U I T E C T U R A Operando Ejemplo: D E M Á Q U I N A S C O M P U T A D O R A S I , C U R S O 2 0 0 7 . = M( [ Rr ] ) ADD -(R1), R0 : R1 ← [R1] - k , R0 ← M( [R1] ) + R0 Cabe mencionar que estos modos también tienen sus indirectos. Como tarea, visualice las operaciones que se deber realizar para recuperar un operando en indirecto de autoincremento. 3.5.8 MODOS DESPLAZADOS Existe una serie de modos muy flexibles que permiten realizar direccionamiento dinámico, lo cual es muy útil para recorrer estructuras de datos, como arreglos de números o de estructuras. Estos modos obtienen la dirección efectiva del operando calculándola mediante suma de registros y/o valores numéricos. Por ejemplo, la dirección puede obtenerse sumando dos o más registros, o un registro y un valor numérico. Existen casos complejos donde se incluye también escalación, en el cual uno de los valores es multiplicado por una constante que normalmente representa el tamaño del elemento del arreglo que se desea recorrer. En nuestro curso sólo enfocaremos algunos de ellos. Especial interés debe ponerse en el modo relativo, donde el desplazamiento es relativo al valor de un registro. El desplazamiento relativo más útil es el relativo al PC que se emplea en las instrucciones de salto. 3.5.9 MODO DE INDICE O INDIZADO En este modo, el campo V tiene dos partes: Una dirección base (o registro base) y un registro índice. Para calcular la dirección efectiva, se toma la dirección base y se le suma el contenido del registro índice. Puede darse también el modo indirecto de índice. Se propone al lector interpretar el funcionamiento del indirecto de índice. MD r @base BANCO DE REGISTROS DEL PROCESADOR Rr Indice Modo de direccionamiento de Indice MEMORIA + OPERANDO Operando = M( [ Rr ] + base ) Para que este modo sea eficiente se requiere tener facilidad de manipulación del registro de índice: Incrementar y decrementar el registro, así como multiplicar el índice por una constante arbitraria k. Página 14 Ventajas: Desventajas: Acceso eficiente a arreglos y estructuras en la memoria. Precisa cargar y actualizar el índice. El cálculo de la EA es más tardado pues se requiere de Σ . Ejemplo: MOV R0, 1800(R1) MOV R0, R5(R1) ; R0 ← M(1800 + [R1]) ; R0 ← M([R5] + [R1]) José Díaz Chow /Harriette Martínez Cano © MMVI A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I , C U R S O 2 0 0 7 . 3.5.10 MODO DE BASE - DESPLAZAMIENTO Este modo es similar al anterior, el direccionamiento requiere dos partes: Un registro base y un valor de desplazamiento. Para calcular la dirección efectiva, se toma la dirección contenida en el registro base y se le suma con el desplazamiento. El valor del desplazamiento puede ser negativo o positivo. La diferencia con el anterior es que éste último tiene se usa cuando tenemos desplazamientos constantes. MD r Modo de direccionamiento Base + Desplazamiento desplazamiento BANCO DE REGISTROS DEL PROCESADOR Dirección Base MEMORIA desplazamiento Rr Base + OPERANDO Operando = M( [ Rr ] + desplazamiento ) Ventajas: Acceso a estructuras de datos más eficiente. Cambiando el contenido de la base se puede acceder al mismo elemento en cada estructura. Permite desplazarse en un área de memoria cuyo punto de referencia es la dirección base. Permite desplazamientos fijos relativos a un punto móvil. Precisa cargar y actualizar la base. El cálculo de la EA es más tardado pues se requiere de Σ . Desventajas: Ejemplo: MOV R0, R1(10) ; R0 ← M([R1] +10) 3.5.11 MODO DE BASE + DESPLAZAMIENTO CON ESCALACION: Estos modos permiten involucrar varios registros y escalares en el cálculo de la dirección efectiva la cual se realiza nos oslo con suma sino además por multiplicación. Por ejemplo, el modo siguiente permite recorrer una estructura de datos de 8 bytes de tamaño con base en Rbase, usando Rindice para controlar el elemento a acceder: Rbase + Rindice * 8 3.5.12 MODO DE DESPLAZAMIENTO RELATIVO Este modo es una variante del anterior. La principal diferencia radica en que el valor calculado no es la dirección de un operando sino el resultado de la operación. El modo relativo normalmente tiene por registro base al PC, permitiendo implementar los saltos, es decir, las instrucciones de control de flujo de programa, al modificar el secuenciamiento automático de la máquina. El registro base es implícito cuando se trata del PC. Algunas arquitecturas permiten tener desplazamientos relativos muy complejos, permitiendo además de una constante, un registro sumados al valor del PC. MD desplazamiento Modo de direccionamiento Relativo ( al PC ) MEMORIA (Area de programa) + próxima instrucción realmente desplazamiento (negativo ) instrucción actual próxima instrucción originalmente PC José Díaz Chow / Harriete Martínez Cano © MMVI Página 15 A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I , C U R S O 2 0 0 7 . PC = [PC ] + desplazamiento Ventajas: Nota: Permite implementar ciclos fácilmente. Se debe saber el formato del número negativo. Por lo general se implementa en complemento a 2. 3.6 CODIFICACIÓN DEL MD La codificación del MD es similar a la del CO. Se prefiere emplear la técnica de bloque fijo por cuanto es más fácil de decodificar y los modos de direccionamiento suelen ser muy pocos. Es importante anotar aquí el uso del bit de indirecto, una técnica que se emplea mucho. Consiste en diferenciar los modos directos de su correspondiente indirecto sólo en un bit (el LSB) Si este bit es 1 el modo en cuestión es indirecto. Por ejemplo, supongamos que se define la combinación 000 para el modo Directo de Registro, entonces la combinación 001 deberá corresponder al modo Indirecto de Registros. Esta técnica simplifica mucho los decodificadores de la Unidad de Control. Veamos ahora un ejemplo de Codificación. Supongamos que hipotéticamente la instrucción: ADD (R0), R1 tiene el CO 0010. El primer operando se obtiene indirectamente del registro R0 y el segundo, que es a la vez destino se obtiene directamente de R1. Si el código de MD directo de registro es 000, el formato de la instrucción se vería así: CO MD1 V1 MD2 V2 Formato de la instrucción CO MD 1 V1 MD 2 V2 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1 Indirecto en 0 = modo directo CO de ADD Modo de Registro Bit de indirecto en 1 > Modo indirecto 000 = 0 -> R0 001 = 1 -> R1 Contenido de la Instrucción Finalmente, para concluir nuestra discusión acerca del formato de la Instrucción. Anotaremos que los modos de direccionamiento dependen de la estructura y organización del procesador. Recordemos que existen tres diferentes: Máquina de registros, de Pila y de Acumulador. Las primeras enfatizan en el uso de instrucciones de 2 y 3 direcciones. Las segundas poseen básicamente sólo instrucciones de 1 y 0 direcciones y la de acumulador máximamente de 1. Página 16 José Díaz Chow /Harriette Martínez Cano © MMVI