Sei sulla pagina 1di 15

PROCESADOR MIPS.

MIPS (Microprocessor without interlocked pipelines stages o microprocesador sin enclavamiento de estado de tuberas), hacen referencia a la gama de microprocesadores desarrollados por MIPS Technologies, de arquitectura RISC y registro tipo propsito general de clasificacin registro-registro, en los que la mayora de las instrucciones no acceden a la memoria (salvo las instrucciones de carga/descarga) y las instrucciones de los procesadores presentan dos operandos, el fuente y el resultado. ORGANIZACIN MIPS

FORMATOS DE INSTRUCCIONES. El conjunto de instrucciones permite realizar instrucciones de carga y almacenamiento desde y hacia memoria, tiene capacidad de desarrollar programas que resuelven problemas aritmticos y lgicos, y ofrece la posibilidad de controlar el flujo de la ejecucin del programa mediante instrucciones de comparacin y salto. En este ltimo caso dispone de instrucciones de salto, tanto condicional como incondicional y se clasificara en: Instrucciones Aritmticas, Instrucciones Lgicas e Instrucciones de salto incondicional. MIPS posee tres formatos de instrucciones denominados R, I y J. A).- Formato R para operaciones.

El formato de tipo R lo utilizan las instrucciones del procesador que necesitan codificar tres registros. Por ejemplo, este formato es utilizado por algunas instrucciones aritmticolgicas, que precisan dos operandos contenidos en dos registros (registros fuente), realizan la operacin en la ALU y guardan el resultado de la operacin en otro registro (registro destino). Op 6 Rs 5 Rt 5 Rd 5 Shamnt 5 Funct 6

6 bits

5 bits

5 bits

5 bits

5 bits

6 bits

Op: operacin de la instruccin. Indica el tipo de operacin que se trata. Rs: primer registro del operando fuente. Rt: segundo registro del operando fuente. Rd: registro del operando destino; obtiene el resultado de la operacin. Shamnt: cantidad de desplazamiento Funct : funcin; este campo selecciona la variante de la operacin del campo Op. Tres registros, dos para especificar las fuentes de datos y el lugar para almacenar el resultado. Instrucciones de corrimiento utilizan el campo Shamnt (Shift Amount). Especifica el nmero de posiciones de bits que se desplazara uno de los operandos. Un campo para expandir el cdigo de operacin. B).- Formato I para inmediatas, transferencias y bifurcaciones. Este tipo de instrucciones son fundamentales puesto que se trata de las instrucciones para la carga-almacenamiento de los datos, y la ALU nicamente puede operar con los datos una vez que han sido cargados en los registros. Esto nos lleva a cargar en los registros aquellas posiciones de memoria con las que deseemos operar. Op 6 Rs 5 Rt 5 Inmediato 16

6 bits

5 bits

5 bits

16 bits

Se emplean 16 bits, para programar un valor constante. Basta un registro de operando y otro para depositar el resultado. Las operaciones lgicas se extienden los 16 bits a 32 con ceros en la parte ms significativa. Las operaciones aritmticas se extienden con signo. C).- Formato J para saltos. Las instrucciones de tipo J, se utilizan para realizar operaciones de salto incondicional dentro de un programa. Este formato codifica en la instruccin un campo destino. Que se utiliza para obtener la direccin donde se requiere saltar. Op 6 Direccin 26

6 bits

26 bits

Posee un campo de 26 bits que se emplea para generar la direccin efectiva de salto. TIPO DE INSTRUCCIONES. El conjunto de instrucciones que ser especificado permite realizar operaciones de carga y almacenamiento desde y hacia memoria, tendr la capacidad de desarrollar programas que resuelven problemas aritmticos y lgicos, y ofrecer la posibilidad de controlar el flujo de la ejecucin del programa mediante instrucciones de comparacin y salto. En este ltimo caso se dispone de instrucciones de salto tanto condicional como incondicional. Clasificacin de las instrucciones: Instrucciones aritmticas. Instrucciones lgicas. Instrucciones de carga y almacenamiento. Instrucciones de comparacin. Instrucciones de salto condicional. Instrucciones de salto incondicional. A).- Instrucciones Aritmticas.

Sintaxis add rd, rs, rt

Op. Lgica rd

rs + rt

addi rt, rs, inm

rt

rs + inm

sub rd, rs, rt

rd

rs - rt

mul rs, rt

HI LO

rs * rt

div rs, rt

LO HI

Cociente(rs / rt) Resto(rs / rt)

Descripcin Suma el contenido de los registros rs y rt, almacenando el resultado en el registro rd. Suma el contenido del registro rs y el dato inmediato inm con signo extendido, almacenando el resultado en el registro rt. Resta el contenido del registro rs del de rt, almacenando el resultado en el registro rd. Multiplica el contenido de los registros rs y rt de 32 bits. Se obtiene un resultado de 64 bits. De estos 64 bits, los 32 bits de mayor peso se almacenan en el registro HI y los 32 bits de menor peso en el registro LO. Divide el registro rs entre el registro rt. El cociente de la operacin es almacenado en el registro LO. El resto de la operacin se almacena en el registro HI. Cerciorarse de que rt = 0

B).- Instrucciones Lgicas. Este tipo de instrucciones es til a la hora de operar sobre posiciones de bits. En programas donde se requieren realizar mascaras sobre registros (puesta a 1 o 0 de un bit) de determinados bits de un registro se recurre a este tipo de instrucciones. Sintaxis and rd, rs, rt nor rd, rs, rt xor rd, rs, rt or rd, rs, rt Op. Lgica rd rs AND rt rd rs NOR rt rd rs XOR rt rd rs OR rt Descripcin Realiza la operacin lgica indicada, bit a bit entre el contenido del registro rs y rt, almacenando el resultado en el registro rd.

Sintaxis andi rt, rs, inm nori rt, rs, inm xori rt, rs, inm

rt rt rt

Op. Lgica rs AND inm rs OR inm rs XOR inm

sll rd, rt, desp srl rd, rt, desp

rd rd

rt<< desp rt>> desp

Descripcin Realiza la operacin lgica indicada, bit a bit entre el contenido del registro rs y el dato inmediato inm extendido con 16 ceros, almacenando el resultado en el registro rt. Desplazan a izquierdas (sll) o a derechas (srl) el registro rt el nmero de veces especificado por desp. Conforme se desplaza se va rellenando a ceros. El resultado es almacenado en el registro rd.

C).- Instrucciones de Carga y Almacenamiento. La operacin de carga en un registro se efecta cuando se transmite un dato desde memoria hacia un registro del banco de registros. La operacin de almacenamiento en memoria toma el camino inverso al anterior; el dato es transferido desde un registro hacia la memoria de datos del procesador.

BANCO DE REGISTRO

ALMACENAMIENTO MEMORIA CARGA

F).- Instrucciones de Salto Incondicional. Las instrucciones de salto incondicional permiten que el programador pueda realizar rupturas de secuencias del programa, sin que para ello se tenga que cumplir ninguna condicin. De esta forma el programador, desde cualquier lnea del programa, puede realizar un salto a cualquier otra lnea del programa. Las instrucciones de salto

incondicional codifican en la propia instruccin la etiqueta donde se requiere saltar, donde se recogen a dems dos instrucciones especiales; la jal y la jr que se utilizan para realizar llamadas a procedimientos (jal) y para retornar desde una subrutina al programa principal (jr). Formato j etiqueta Operacin PC etiqueta Descripcin Actualiza el PC con el valor de la direccin de memoria a la que hace referencia etiqueta. El contador de programa actualizado se guarda en el registro $31. Y se almacena en el PC el valor de la direccin de memoria a la que hace referencia etiqueta. Carga en el contador de programa el contenido del registro rs.

jal etiqueta

$31 PC

PC + 4 etiqueta

jr rs

PC

rs

(Carot, Molero Prieto, & Hassan Mohamed, 1997, pg. 289)

TIPOS DE OPERANDOS. Todas las instrucciones para realizar operaciones lgicas comparten tres caractersticas fundamentales: Operaciones de 3 direcciones. La primera direccin ser donde se almacene el resultado y las otras dos los operandos. Operandos y resultados han de estar en registros. Por tanto antes de realizar cualquier operacin, si alguno de los datos estn en memoria ser necesario cargarlo en un registro. Un operando puede ser una constante de 16 bits. En estos casos se realiza la operacin entre dicha constante y un registro para almacenar el resultado en otro registro. La expresin en C: int a, b, c;

c = a + b; Se traduce en ensamblador (suponiendo la asignacin de registros: a->s0, b->s1 y c->s2) como: add $s2, $s0, $s1 En este ejemplo, suponemos que las tres variables enteras a, b y c han sido situadas por el compilador en los registros s0, s1 y s2 respectivamente (en el compilador del C del MIPS el tipo int es de 32 bits). La instruccin de suma en el MIPS se representa con el nemnico add. Adems, tal como se ha dicho anteriormente, las instrucciones aritmticas del MIPS son de tres direcciones. Esto implica que siempre realizan la operacin entre dos registros, o entre un registro y una constante de 16 bits, y almacenan su resultado en un registro. En el ensamblador del MIPs se escribe en primer lugar el registro destino del resultado y a continuacin los dos operandos. La restriccin de que todas las operaciones aritmticas sean de tres direcciones puede parecer caprichosa. Sin embargo dicha restriccin est motivada por el deseo de simplificar la circuitera, ya que si se quisiera implantar instrucciones con distintos nmeros de operandos se necesitara circuitera especfica para cada uno de los casos. Esto se puede resumir en uno de los principios de diseo hardware: Principio de diseo 1: la uniformidad simplifica el hardware. REPRESENTACION DE NUMEROS ENTEROS Y DE PUNTO FLOTANTE. En el caso del MIPS, se dispone de un banco de registros para almacenar nmeros enteros y otro para almacenar nmeros en coma flotante. Ambos bancos constan de 32 registros de 32 bits. En el caso del banco de coma flotante, los registros se pueden agrupar de dos en dos para utilizarlos en operaciones con nmeros en doble precisin (64 bits). Adems de estos bancos, la arquitectura MIPS define tres registros adicionales: el contador de programa y dos registros llamados HI y LO que se utilizan para almacenar el resultado de las operaciones de multiplicacin y divisin enteras. En el caso de la multiplicacin, recuerde que el producto de dos nmeros de 32 bits da como resultado un nmero de 64 bits. De la misma forma, el cociente de dos nmeros de 32 bits da como resultado un cociente de 32 bits y un resto tambin de 32 bits.

0 1 2 3 4 7 8 15

zero at v0 v1 a0 a3 t0 t7

Constante 0 Reservado para el ensamblador. Evaluacin de expresiones. Y retorno de resultados. Argumentos de funciones.

Valores temporales. La invocada puede modificarlos. La invocadora debe guardarlos.

En la tabla de esta transparencia y la siguiente se muestra los registros enteros del MIPS junto con el uso que se debe hacer de ellos. Como se dijo antes, para el procesador todos los registros (excepto el 0) son iguales. Sin embargo para hacer ms fcil y eficiente la programacin, existe una convencin de uso de estos registros que se describe en detalle a continuacin: El registro Zero contiene siempre la constante 0. La utilidad de este registro se ver ms adelante. El registro at est reservado para ser usado por el ensamblador. Los registros v0 y v1 se utilizan para evaluar expresiones y para que las funciones puedan devolver sus resultados. Los registros a0a3 se utilizan para pasarle argumentos a las funciones. Si son necesarios ms de 4 argumentos (o estos necesitan ms de 32 bits) se recurre a la pila. Los registros t0t7 se utilizan para almacenar valores temporales. Por tanto cualquier funcin puede usarlos sin preocuparse de guardar su valor anterior. Ahora bien, si una funcin necesita algn valor almacenado en estos registros ha de guardarlo en otro sitio (memoria, registros) antes de llamar a otra funcin (la invocada), pues esta supondr que dichos registros solo contienen valores intiles para quien la ha llamado (la invocadora). 16 S0 Salvados por la invocada. La invocada debe guardarlos antes de usarlos

23 24 25 26 27 28 29 30

S7 t8 t9 k0 k1 gp sp fp

Valores temporales Idem ant. Reservados para el sistema operativo. Puntero al rea global. Puntero de pila (stack pointer). Puntero al bloque de activacin (frame pointer). Direccin de retorno (return address).

31 ra

Los registros s0s7 se utilizan para almacenar variables que deben ser preservadas entre llamadas a funciones. Por tanto, si alguna funcin necesita usar alguno de estos registros, ha de guardar antes su valor (por ejemplo en la pila). De esta forma, la funcin que usa estos registros no ha de preocuparse de guardar sus valores antes de llamar a otra funcin. Los registros t8 y t9 se utilizan de la misma manera que los registros t0t7. Los registros k0 y k1 estn reservados para el sistema operativo. El registro gp se utiliza para apuntar al rea de memoria donde estn los datos del programa. Su utilidad se ver ms adelante. El registro sp es el puntero de la pila (contiene la direccin del tope de la pila). El registro fp contiene la direccin de la zona de la pila en la que estn guardados los argumentos y las variables locales de la funcin que no caben en los registros. Esta zona se conoce como bloque de activacin. Su utilidad es la de simplificar el acceso a estas variables cuando es necesario modificar la pila durante la ejecucin de la funcin (por ejemplo durante la evaluacin de expresiones). Por ltimo, el registro ra contiene la direccin a la que debe retornar la funcin invocada cuando finalice su labor. TIPO DE DIRECCIONAMIENTO UTILIZADO POR LAS INSTRUCCIONES. Segn (de Miguel Anasagasti, 2000): Un modo de direccionamiento es un procedimiento que permite determinar un operando, o la direccin de un operando o una instruccin. Como lo ms frecuente es especificar la direccin donde est almacenado el dato o la instruccin, se emplea siempre el termino modo de direccionamiento, aunque en el primer caso (determinar directamente el operando) no es muy justificado.

Para simplificar, se denominara objeto al operando, resultado o instruccin que se desea direccionar. Los modos de direccionamiento se clasifican de la siguiente forma segn los distintos modos de direccionamiento usados en los procesadores. Inmediato. Directo. Absoluto de registro, de memoria y de pgina base. Relativo: A un registro, A un registro ndice, A pila y al contador de programa. Indirecto. Implcito. INMEDIATO. El operando se incluye en la propia instruccin. En el MIPS, este modo de direccionamiento se usa para el segundo operando de las instrucciones addi, ori, etc. DIRECTO. Se indica en la instruccin la direccin del objeto. Por ejemplo el MIPS utiliza el modo relativo a un registro para las instrucciones de carga y almacenamiento. INDIRECTO. Se indica una direccin en la que se encuentra la direccin del objeto. Este modo es til para el manejo de punteros. No obstante algunas arquitecturas como el MIPS no la incluyen. IMPLICITO. El objeto esta siempre en un lugar predeterminado que depende de la instruccin. Por ejemplo en el MIPS la instruccin mult no necesita un registro destino, pues siempre deja su resultado en los registros hi y lo. Ventajas al usar los modos de direccionamientos. Ahorro de espacio. Cdigo reubicable y reentrante. Manejo de estructuras de datos. AHORRO DE ESPACIO.

Interesa que las instrucciones sean lo ms cortas posibles para ahorrar tiempo al leerlas y espacio en memoria para almacenar los programas. Por ejemplo, en las operaciones aritmticas del MIPS han de especificarse dos operandos y un resultado. Si se especificase la direccin de memoria de cada uno de estos objetos seran necesarias 3 palabras de 32 bits, que sumados al cdigo de operacin (por ejemplo 6 bits) haran un total de 102 bits.

CODIGO REUBICABLE Y REENTRANTE. Un cdigo reubicable es aquel que puede ejecutarse sin cambios en cualquier zona de la memoria. Para ello es necesario disponer de direccionamientos relativos. Un cdigo reentrante es aquel que puede ser llamado desde varios lugares a la vez o ser llamado varias veces antes de terminar su ejecucin. Ejemplos cercanos son las rutinas recursivas o las rutinas de libreras en entornos multiproceso. En estos casos son necesarios direccionamientos de pila. MANEJO DE ESTRUCTURAS DE DATOS. Las tablas, matrices y estructuras de datos en lenguajes de alto nivel se manejan ms eficientemente usando modos de direccionamiento relativos. EJEMPLO DE INSTRUCCIONES MIPS.

DIRECCIONAMIENTO DIRECTO A REGISTRO (EJEMPLO) El campo tiene 5 bits.

Permitido para operando fuente o destino. Register addressing op rs rt rd funct Registers Register

Notacin: $n Ejemplo: add 16, 17, 18 almacena en el registro 16. suma el contenido del registro 17 con el registro 18 y lo

DIRECCIONAMIENTO INDIRECTO A REGISTRO CON DESPLAZAMIENTO (EJEMPLO) Campos: Registro: 5 bits. Desplazamiento: 16 bits. Permitido para operando fuente en almacenamientos y destino en cargas.

op rs rt Address + Register Byte Hafword Word

Notacin: desplazamiento ($n) Ejemplo: 1w 16, 20 ( 17) carga (load word) en el registro 16 la palabra contenida 20 bytes ms all de la direccin almacenada en el registro 17. (Patterson & Hennessy, 2000, pg. 72)

Bibliografa Carot, R. O., Molero Prieto, J., & Hassan Mohamed, H. (1997). Introduccion a los computadores. Espaa: Reproval, S.L. Patterson, D. A., & Hennessy, J. (2000). Estructura y diseo de computadores. Espaa: Reverte, S.A.

Potrebbero piacerti anche