120 likes | 277 Views
Arquitectura de Computadores I. Ejemplo: El conjunto de instrucciones en el MIPS. Instrucciones para la toma de decisiones. Ejemplo: Uso de una “tabla de saltos” para la implementación de estructuras case .
E N D
Arquitectura de Computadores I Ejemplo: El conjunto de instrucciones en el MIPS
Instrucciones para la toma de decisiones Ejemplo: Uso de una “tabla de saltos” para la implementación de estructuras case. Obtenga las instrucciones en código ensamblador para MIPS del siguiente segmento de código C. Para ello asuma que es posible el uso de constantes en las instrucciones de control y en las aritméticas. Asuma además que en la posición de memoria apuntada por $T4 se encuentra un arreglo con cada una de las direcciones de salto apropiadas para cada una de las opciones de la sentencia case.
Instrucciones para la toma de decisiones. switch(k) { • case 0: f = i + j; break; • case 1: f = g + h; break; • case 2: f = g - h; break; • case 3: f = i - j; break; }
Manejo de llamadas a subrutinas. Los seis pasos básicos necesarios para hacer una llamada a subrutina exitosa son los siguientes: • Poner los parámetros de entrada en un lugar en donde la subrutina pueda hallarlos. • Gestionar los recursos necesarios para la subrutina. • Transferir el control a la subrutina. • Desarrollar la tarea deseada. • Poner el resultado en algún lugar donde el programa que invoca la subrutina lo pueda hallar. • Transferir el control al programa invocador.
Manejo de llamadas a subrutinas. $a0 $a3: Argumentos de entrada a procedimientos. $v0 $v1: Argumentos de salida. $ra: Dirección de retorno de la subrutina. $sp: Puntero de pila*. Ejemplo: int ejemplo(int g, int h, int i, int j) { • int f; • f = (g + h) – (i + j); • return f; }
Manejo de llamadas a subrutinas – Procedimientos anidados. Ejemplo: Asumiendo que usted puede usar constantes en las instrucciones aritméticas, encuentre una representación MIPS para el código en lenguaje mostrado a continuación. int fact(int n) { • if (n < 1) return 1; • else return (n * fact(n-1)); }
Manejo de llamadas a subrutinas – Asignación de recursos. • El espacio de pila usado por una subrutina particular es llamado marco de procedimiento (proceduer frame). • Algunas implementaciones software en MIPS usan un registro ($fp) para apuntar al principio del marco de un procedimiento particular. • El marco de procedimiento sirve entre otras cosas para almacenar argumentos de entrada o salida adicionales del procedimiento, y para almacenar las variables que serán afectadas por el mismo y cuyo valor debe quedar inalterado una vez el procedimiento retorne.
Manejo de llamadas a subrutinas – Convenciones sobre los registros.
Modos de direccionamiento. • Las operaciones matemáticas y las comparaciones con constantes son muy usadas en casi todos los lenguajes de programación. • Las instrucciones addi y slti se crearon bajo este principio. • En estas instrucciones las constantes son almacenadas en el formato de instrucción y ocupan campos de 16 bits. • También existe la instrucción lui que se usa para cargar la parte alta de un registro con una constante de 16 bits.
Modos de direccionamiento. • Para los saltos se usan dos tipos de dirección. • El salto lejano, en donde el campo dirección tiene un tamaño de 26 bits. Básicamente se puede lograr un salto de este tipo por medio de la instrucción j. • En el salto cercano, el campo de dirección posee solo 16 bits y se usa como un desplazamiento realizado sobre el valor del contador de programa. Este campo posee una notación de complemento a dos.
Modos de direccionamiento. En resumen MIPS maneja en total 5 modos de direccionamiento para el manejo de los operandos en sus instrucciones. Direccionamiento por registro. Direccionamiento base o de desplazamiento. Direccionamiento inmediato Direccionamiento relativo al PC. Direccionamiento Pseudo – directo.