Trabajo Modos de Direccionamiento y Formato

Introducción Las instrucciones máquina son las acciones elementales que puede ejecutar un computador. Una acción complej

Views 46 Downloads 1 File size 576KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Introducción Las instrucciones máquina 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. Estos programas son desarrollado por programadores que por lo general emplean lenguajes ensambladores ´que luego son transformados por un proceso a lenguaje maquina con el fin de que desempeñen una tare en específico dentro del computador. En general una instrucción codifica una operación básica que el computador realiza sobre uno datos ubicados en memoria o en los registro de la máquina y a los que accede utilizando un modo de direccionamiento.

Modos de Direccionamiento y Formato

Modos de Direccionamiento:

Un modo de direccionamiento especifica la forma de calcular la dirección de memoria efectiva de un operando mediante el uso de la información contenida en registros y / o constantes, contenida dentro de una instrucción de la máquina o en otra parte.

Direccionamiento inmediato: Es el modo de direccionamiento en el que el operando esta en realidad presente en la propia instrucción. La ventaja del direccionamiento inmediato es que una vez captada la instrucción no se requiere una referencia a memoria para obtener el operando ahorrándose pues un ciclo de memoria o de cache en el ciclo de instrucción. La desventaja es que el tamaño del numero está restringido a la longitud del campo de direcciones que, en la mayoría de los repertorios de instrucciones, es pequeño comparado con la longitud de la palabra. Operando = A

Direccionamiento Directo: Es el direccionamiento en el que el campo de direcciones contiene la dirección efectiva del operando. Solo requiere de una referencia a memoria, y su limitación es que proporciona un espacio de direcciones restringido. EA= A

Direccionamiento indirecto: El problema con el direccionamiento directo, es que la longitud del campo de direcciones es normalmente menor que la longitud de la palabra, limitando de esta manera el rango de direcciones. Es entonces cuando interviene el direccionamiento indirecto, cuyo proceso consiste en hacer que el campo de direcciones referencie la dirección de una palabra de memoria que contenga la dirección completa del operando. La desventaja de este direccionamiento es que es que la ejecución de la instrucción requiere dos referencias a memoria para captar el operando: una para captar su dirección y otra para captar su valor.

EA= (A)

------------> El paréntesis se interpreta como

Direccionamiento de Registros: El direccionamiento de registros es similar al directo. La única diferencia es que el campo de direcciones referencia un registro en lugar de una dirección de memoria principal. EA= R Las ventajas del direccionamiento de registro son: 1) Solo es necesario un campo pequeño de direcciones en la instrucción. 2) No se requieren referencias a memoria. El tiempo de acceso a un registro de la CPU es mucho menor que para la memoria principal. La desventaja es que el espacio de direcciones está muy limitado.

Direccionamiento indirecto con registro:

El campo de operando de la instrucción contiene un identificador de registro en el que se encuentra la dirección efectiva del operando. El campo de direcciones referencia una posición de una palabra completa (un registro completo en este caso) que contenga la dirección efectiva del operando. Además el direccionamiento indirecto con registro emplea una referencia menos a menoría que el direccionamiento indirecto. EA= (R)

Direccionamiento con desplazamiento: Combina las posibilidades del direccionamiento directo y el direccionamiento indirecto con registro. El registro con desplazamiento requiere que las instrucciones tengan dos campos de direcciones, el valor= A, se utiliza directamente. El otro campo de direcciones se refiere a un registro cuyo contenido se suma a A para generar la dirección efectiva. EA= A + (R). Tres de los direccionamientos con desplazamientos más comunes son: •

Direccionamiento relativo: El registro referenciado implícitamente es el contador de programa. El campo de direcciones se trata como un número en complemento a 2, y representa un desplazamiento relativo al PC.



Direccionamiento con registro –base: En este direccionamiento el registro referenciado contiene una dirección de memoria y el campo de dirección contiene un desplazamiento desde dicha dirección



Direccionamiento indexado: El campo de direcciones referencia una dirección de memoria principal, y el registro referenciado contiene un desplazamiento positivo desde esa dirección. En el indexado se considera que el campo de direcciones es una dirección de memoria, generalmente contiene más bits que un campo de direcciones de una instrucción comparable que emplee direccionamiento con registro base.

Direccionamiento de pila: Se utiliza cuando el operando está en memoria y en la cabecera de la pila. Este direccionamiento se basa en las estructuras denominadas Pila (tipo LIFO), las cuales están marcados por el fondo de la pila y el puntero de pila (*SP), El puntero de pila apunta a la última posición ocupada. Así, como puntero de direccionamiento usaremos el SP. El desplazamiento más el valor del SP nos dará la dirección del objeto al que queramos hacer referencia. En ocasiones, si no existe C. de desplazamiento solo se trabajara con la cima de la pila. Este tipo de direccionamiento nos aporta flexibilidad pero por el contrario, es mucho más complejo que otros tipos estudiados más arriba.

Modos de direccionamiento del Pentium El mecanismo de traducción de direcciones del Pentium produce una dirección, denominada dirección virtual o efectiva, que es un desplazamiento dentro de un segmento. La suma de la dirección de comienzo del segmento y la dirección efectiva produce una dirección lineal. Si se está empleando paginación, esta dirección lineal debe pasar por un mecanismo de traducción de páginas para producir una dirección física. El Pentium está equipado con diversos modos de direccionamientos, ideados para permitir la ejecución eficiente de lenguajes de alto nivel. La figura indica el hardware involucrado. El segmento objeto de la referencia se determina mediante el registro de segmento. Hay seis registros de segmento; cuál de ellos es usado para una referencia concreta depende del contexto de ejecución y de la instrucción. Cada registro de segmento retiene la dirección de comienzo del correspondiente segmento. Asociado con cada registro de segmento visible para el usuario, hay un registro descriptor de segmento (no visible al programador), que registra los derechos de acceso para el segmento, así como la dirección

de comienzo y el limite (longitud) del segmento. Además, hay dos registros que pueden emplearse para construir una dirección: el registro base y el registro índice.

Modo inmediato: el operando se incluye en la instrucción. El operando puede ser un byte, una palabra o una palabra doble de datos. Modo de operando en registro: el operando está situado en un registro. Para instrucciones de tipo general, tales como transferencias de datos, aritméticas, y lógicas, el operando puede ser uno de los registros generales de 32 bits (EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP), uno de los registros generales de 16 bits (AX, BX, CX, DX, SI, DI, SP, BP), o uno de los registros generales de ocho bits (AH, BH, CH, DH, AL, BL, CL, DL). Para operaciones en coma flotante, los operandos de 64 bits se forman utilizando dos registros de 32 bits como una pareja. Hay también algunas instrucciones que hacen referencia a los registros de segmento (CS, DS, ES, SS, FS, GS). Modo desplazamiento: el desplazamiento del operando (la dirección efectiva en la figura) está incluido, formando parte de la instrucción, como desplazamiento de 8, 16, o 32 bits. Con segmentación, todas las direcciones dadas en instrucciones hacen referencia a desplazamiento dentro de segmentos.

El modo de direccionamiento con desplazamiento se puede encontrar en pocas maquinas ya que, implica instrucciones largas. En el caso del Pentium, el valor de desplazamiento puede ser tan largo como 32 bits, haciendo que la instrucción tenga seis bytes. El direccionamiento con desplazamiento puede ser útil para referenciar variables globales. Modo base con desplazamiento: la instrucción incluye un desplazamiento que hay que sumar a un registro base, que puede ser cualquiera de los registros de uso general. Ejemplo de uso de este modo es: •

Utilización para acceder a un campo de registro. El registro base apunta al comienzo del registro, mientras que el desplazamiento indica la posición del campo.

Modo desplazamiento con índice : la instrucción incluye un desplazamiento a sumar a un registro, llamado en este caso registro índice. El registro índice puede ser cualquiera de los registros de uso general excepto el ESP, que normalmente se emplea para procesamiento con la pila. Para calcular la dirección efectiva, el contenido del registro índice se multiplica por un factor de escala 1, 2, 4 u 8, y se suma después de un desplazamiento. Este modo método es muy conveniente para indexar matrices. Un factor de escala dos puede usarse para una matriz de enteros de 16 bits. Un factor de escala cuatro para enteros de 32 bits o para números en coma flotante. Finalmente, un factor de ocho puede emplearse para una matriz de números en coma flotante de doble precisión. Modo base con índice y desplazamiento: suma los contenidos de los registros base e índice, y un desplazamiento, para formar la dirección efectiva. De nuevo, el registro base puede ser cualquier registro de uso general, y el registro índice puede ser cualquier registro de uso general excepto el ESP. Como ejemplo, este modo de direccionamiento podría emplearse para acceder a una matriz local en un marco de pila. Modo base con índice escalado y desplazamiento: suma el contenido de registro índice multiplicado por un factor de escala, con el contenido del registro base, y el desplazamiento. Esto es útil cuando una matriz esta almacenada en una marco de pila; en este caso, los elementos de la matriz serian de 2, 4, u 8 bytes de longitud. Este modo permite también la indexación eficiente de una matriz bidimensional cuando los elementos de la misma tiene longitudes de 2, 4, u 8 bytes. Direccionamiento relativo: puede emplearse en instrucciones de transferencia del control (control de flujo). Se suma un desplazamiento al valor del contador de programa, que apunta a la instrucción siguiente. En este caso, el desplazamiento se trata como un byte, una palabra o una palabra doble numérica con signo, cuyo valor bien incrementa o decrementa la dirección contenida en el contador de programa.

Tabla de modos de direccionamiento del pentium

Modos de direccionamiento del powerpc Como la mayoría de las maquinas RISC, y en contrastes con el Pentium y la mayoría de los CISC, el powerpc emplea un conjunto de modos de direccionamiento sencillo y relativamente evidente. Direccionamiento de carga/memorización: el powerpc proporciona dos modos de direccionamiento alternativos para instrucciones de carga/memorización. En el direccionamiento indirecto, la instrucción incluye un desplazamiento de 16 bits que se suma a un registro base, que puede ser alguno de los registros de uso general. Además, la instrucción puede especificar que la nueva dirección efectiva calculada se devuelva al registro base, actualizando su contenido actual. La opción de actualización es útil para el indexado progresivo de matrices en bucles. La otra técnica de direccionamiento para las instrucciones de carga/memorización es el direccionamiento indexado indirecto: en este caso, la instrucción referencia un registro base y otro índice, pudiendo ambos ser cualquiera de los registros de uso general. La dirección efectiva es la suma de los contenidos de estos dos registros. De nuevo, la opción de actualización hace que el registro base se actualice con la nueva dirección efectiva.

Direccionamiento de bifurcaciones. Se dispone de tres modos de direccionamiento para bifurcaciones. Si se emplea direccionamiento absoluto con instrucciones de salto incondicional, la dirección efectiva de la siguiente instrucción se obtiene a partir de un valor inmediato de 24 bits contenido en la instrucción. El valor de 24 bits se extiende hasta 32 bits añadiendo dos ceros a su extremo menos significativo (esto es posible ya que las instrucciones están cada 32 bits) y extendiendo (repitiendo) el signo. Para las instrucciones de salto condicional, la dirección efectiva de la siguiente instrucción se deduce de un valor de inmediato de 16 bits incluido en la instrucción. Este valor se extiende a un valor de 32 bits añadiendo dos ceros a su extremo menos significativo y extendiendo el signo. Con direccionamiento relativo, el valor inmediato de 24 bits (instrucciones de salto incondicional) o de 14 bits (instrucciones de salto condicional) se extiende como en los casos anteriores. El valor resultante se suma entonces al contador de programa a fin de determinar una posición relativa a la instrucción actual. El otro modo de direccionamiento de bifurcaciones condicionales es el direccionamiento indirecto. Este modo obtiene la dirección efectiva de la siguiente instrucción bien del registro de enlace o bien del registro de cuenta. En este caso, el registro de cuenta se usa para retener la dirección de la instrucción de bifurcación. Este registro puede también emplearse para mantener un contador para bucles.

Formato de instrucciones El formato de instrucciones es un conjunto de especificaciones que indican como debe ser interpretado el patrón de bits de una instrucción de máquina para logra su ejecución dentro del computador. El formato de la instrucción nos indica cual es el código de operación y cuales los operandos que la instrucción específica, tanto explícita como implícitamente.

Longitud de la Instrucción: En algunas máquinas todas las instrucciones tienen la misma longitud; en otras hay instrucciones con distintas longitudes. La longitud de las instrucciones puede ser menor, igual o mayor que el tamaño de la palabra. Exigir que todas las instrucciones posean la misma longitud hace más sencillo su decodificación pero puede desperdiciarse espacio. En el momento que se diseña una nueva computadora se deben escoger los formatos de las instrucciones y para ello se deben tomar en cuenta varios factores. Por un lado, si la nueva computadora llega a tener un éxito comercial, el conjunto de instrucciones podría sobrevivir 20 años o más. En este caso, la capacidad para añadir nuevas instrucciones y aprovechar otras oportunidades que surjan durante el tiempo de vida del diseño de ese computador tiene gran importancia. Además, la eficiencia de un conjunto de instrucciones depende en gran medida de la tecnología con la que se va a implementar. Con el pasar del tiempo, esta tecnología puede cambiar enormemente y hacer que ciertas decisiones que se tomaron al momento del diseño, no parezcan luego que fueron las mejores. Un criterio de diseño importante es el relativo al tamaño de las instrucciones. Un programa conformado por n instrucciones de 16 bits ocupa menos espacio de memoria que n instrucciones de 32 bits. Si se minimiza mucho el tamaño de las instrucciones puede hacer que el proceso de decodificación y sobreposición de instrucciones sea más complicado. Un motivo para disminuir el tamaño de las instrucciones es el ancho de banda de la memoria, es decir, el número de bits que la memoria puede suplir por segundo. La velocidad de los procesadores ha aumentado más rapidamente que la velocidad de las memorias, por lo tanto las memorias se transforman en cuellos de botellas en el sistema. El hecho de que las instrucciones sean más cortas implica un procesador más rápido. Dado que los computadores modernos pueden ejecutar varias instrucciones en un ciclo de reloj, es imperativo traer varias instrucciones en cada ciclo de reloj, por lo tanto, el tamaño de la instrucción es importante.

Asignación de los bits

Hemos visto algunos de los factores en la decisión de la longitud del formato de instrucción. Un aspecto igualmente difícil es como asignar los bits en dicho formato. Los compromisos a la hora de decidir son en este caso complejos. Para una longitud de instrucción dada, existe claramente un compromiso entre el número de codop. Esto reduce, para un formato de instrucción de una longitud dada, el número de bits disponibles para direccionamiento. Hay refinamiento interesante al respecto, consiste en el uso de codops de longitud variable. En esta aproximación, existe una longitud mínima de codop pero, para algunos de ellos, se pueden especificar operaciones adicionales utilizando más bits de la instrucción. Los siguientes factores, relacionados entre sí, afectan a la definición del uso dado a los bits de direccionamiento:

• Numero de modos de direccionamiento: • Numero de operandos: • Registros frente a memoria • Numero de conjuntos de registros • Rango de direcciones • Granularidad de direcciones • PDP8 • PDP10 • Ortogonalidad • Complitud • Direccionamiento directo

FALTA definir eso…

Instrucciones de longitud variable FALTA

Formatos de instrucciones del Pentium y power pc

➢ Formatos de instrucciones del Pentium:

Las instrucciones se componen entre 0 y 4 prefijos de instrucciones opcionales un codop de 1 o 2 bits 1 especificación de dirección opcional, que consta del bits mod r/m y de l bits de índice de escala un desplazamiento opcional, y un campo inmediato opcional.

Bits de prefijo:

➢ Prefijo de instrucciones: Posee el prefijo lock o algunos de los prefijos de repetición. El prefijo lock se emplea exclusivamente para asegurar el uso exclusivo de la memoria compartida en entornos multiprocesador. Los prefijos de repetición indica que se repita una operación en una cadena, lo que permite al procesador procesar cadenas mucho más rápido que un software habitual. ➢ Segmento explicito : especifica de forma explicita que registro de segmento debería utilizar una instrucción, prevaleciendo sobre la selección de registro de segmento implícito ➢ Tamaño de dirección: El procesador puede direccionar memoria utilizando direcciones de 16 o 32 bits. El tamaño de dirección define el tamaño del desplazamiento de direcciones generalmente durante el calculo de la dirección efectiva. ➢ Tamaño de operadores: De igual manera que las instrucciones tiene un tamaño implícito de memoria un operador de operandod e 16 a 32 bits. El rpefijo operando tiene un tamaño de 32 o 16 bits. La propia instrucción incluye los siguientes campos: ➢ Codop:el codop: incluye bits que indican si el operando es de 1 bits o de tamaño completo (16 ao 32 bits ) si el campo del dato debe o no extenderse con el signo ➢ Mod r/m: aporta información de direccionamiento, este bits indica si un operando esta en un registro o en memoria; si esta en memoria, los campos del bits especifica el modo de direccionamiento a utilizar ➢ Sib: este bits consta de 3 campos. El campo “ss” especifica el factor de escala para el indexado de escalado, el campo de “indice” especifica el campo del indice, el campo “base” especifica el registro base.

➢ Inmediato: proporcioan el valor de un operando de 8, 16 o 32 bits.

Conclusión