ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES 1º I.T.I.G. – I.T.I.S. Examen Intercuatrimestral Nombre: __SOLUCIÓN______________________________________ Madrid, 24 de abril de 2008. NOTAS: • • • • Duración: 60 minutos. Se puede hacer a lápiz. No se permiten apuntes ni calculadora. No se permite desgrapar las hojas. 1. (2 puntos) Indique cuáles de las siguientes afirmaciones son Verdaderas (V) o Falsas (F). Las respuestas correctas cuentan 0’1 puntos y las erróneas cuentan -0’1 puntos. Afirmación 1.- La memoria forma parte del Camino de Datos. 2.- En un computador basado en la arquitectura Von Neumann, el procesamiento de los datos se realiza en el Camino de Datos. 3.- En lenguaje de máquina, cada instrucción está representada con cadenas de 0’s y 1’s. 4.- Utilizando un Bus Triestado, se pueden conectar varios emisores a un mismo bus. 5.- La sustitución de los tubos de vacío por transistores dio lugar a los ordenadores de 3ª generación. 6.- Un programa escrito en ensamblador de un Pentium puede ser perfectamente ejecutado en un procesador MIPS. 7.- El tamaño del bus de direcciones depende de la cantidad de memoria a direccionar. 8.- Dos ordenadores con la misma arquitectura tienen obligatoriamente el mismo número de registros. 9.- La interconexión entre los registros y los elementos de proceso se puede realizar mediante multiplexores. 10.- La señal WEN (Write-Enable) de un registro es la que permite colocar el dato en el Bus, siempre que éste sea triestado. 11.- En las memorias de acceso aleatorio, el tiempo de acceso al dato no depende de la posición del dato, pero sí depende del retardo de la circuitería. 12.- Los registros y las memorias SRAM y DRAM son de acceso aleatorio e internas al ordenador. 13.- La memoria Cache aprovecha la localidad temporal de los datos, lo que permite acceder antes al dato y optimizar el tiempo de ejecución del programa. 14.- Con la estructura interna del banco de registros vista en clase, no es posible leer y escribir el mismo registro al ejecutar una instrucción. 15.- En las instrucciones de MIPS con direccionamiento implícito es obligatorio no indicar el operando del resultado. 16.- El DVD se considera memoria terciaria dentro de la jerarquía de memorias, y permite almacenar grandes cantidades de información. V/F V V V V F F V V V F V V V F V V 1 17.- Un programa en una máquina CISC, por lo general, ocupa menos posiciones de memoria que el mismo programa en una máquina RISC. 18.- Para leer un dato de un registro se debe activar la señal de lectura y esperar a que se dé el flanco de reloj, por eso se dice que el acceso es asíncrono 19.- La transferencia de información entre las memorias primaria, secundaria y terciaria se hace en grandes bloques de información. 20.- Con la instrucción sll se realizan desplazamientos a la izquierda, lo que permite multiplicar el número original por potencias de 2. V F V V 2. (1’5 puntos) Si trabaja con un procesador que direcciona posiciones de Memoria de 16 bits, con un Bus de Direcciones de 32 líneas, indique la máxima cantidad de Memoria Principal que puede direccionar expresándola en: a) Bits c) Kilobytes b) Bytes d) Gigabytes Con 32 líneas en el bus de direcciones se pueden direccionar 232 posiciones = 22·230 posiciones = 4 Gigaposiciones de memoria (de 16 bits en este caso). Por lo tanto la cantidad de memoria que se puede direccionar es: a) Bits: 4 G x 16 bits = 64 Gbits = 236 bits = 68.719.476.736 bits. b) Bytes: 4 G x 2 Bytes (16 bits) = 8 GB = 233 Bytes = 8.589.934.592 Bytes. c) Kilobytes: 4 G x 2 Bytes = 8 GB = 8 · 220 kB = 8.388.608 kB d) Gigabytes: 4G x 2 Bytes = 8 GB. 3. (1’5 puntos) a) Dibuje una ALU de 1 bit con las funciones AND, OR y Suma Aritmética. b) Modifique la ALU anterior para ampliarla con la función lógica XOR. c) Dibuje una ALU de 4 bits, partiendo de ALU’s de 1 bit como la del apartado anterior. a) [Véase página 20 del tema 1] 2 ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES 1º I.T.I.G. – I.T.I.S. Examen Intercuatrimestral b) Al multiplexor se le pone una entrada más (la 3) a la que entra el resultado XOR de A y B. c) [Véase página 21 del tema 1] La solución es como la figura mostrada pero donde pone 31 hay que poner 3, porque es de 4 bits. 4. (1 punto) Se dispone de un sistema de computación basado en MIPS, y en un momento dado algunos de los registros y parte de la memoria contienen la siguiente información: s0 s1 s2 s3 s4 t0 t1 t2 0x1234.5678 0x1234.5677 0xAA83.7450 0x0000.000C 0x0000.1234 0xABEC.EDEE 0xAE10.ABCD 0xABCD.EF01 0x0000.1230 0x0000.1231 0x0000.1232 0x0000.1233 0x0000.1234 0x0000.1235 0x0000.1236 0x0000.1237 0xA1 0x1C 0xFE 0xCA 0xD0 0xDA 0xB0 0xCE Sabiendo que la arquitectura es little endian, indique qué registros y/o posiciones de memoria se modifican en cada una de las instrucciones siguientes. Considere dichas instrucciones totalmente independientes unas de otras, es decir, para cada instrucción tome los valores de registros y memoria indicados en la tabla anterior. a) sub $t0,$s1,$s0 b) ori $t1,$s2,0xF1FA c) sra $t2,$s2,0xC d) sltiu $t0,$s1,0xB0CA e) lw $s4,-4($s4) f) sh $s2,2($s4) 3 a) sub $t0, $s1, $s0: esta instrucción realiza la siguiente operación t0 = s1 – s0. Como s1 = 0x1234.5677 y s0 = 0x1234.5678, se diferencian en 1, pero como s1 < s0, la operación anterior devolverá -1, que en hexadecimal de 32 bits es 0xFFFF.FFFF. Por lo tanto t0 = 0xFFFF.FFFF. b) ori $t1, $s2, 0xF1FA: esta instrucción hace la función lógica OR entre el contenido del registro s2 y el valor inmediato 0x0000.F1FA. Como s2 = 0xAA83.7450, al hacer la OR con 0x0000.F1FA el resultado será t1 = 0xAA83.F5FA. c) sra $t2, $s2, 0xC: esta instrucción realiza un desplazamiento aritmético (extendiendo el signo) del contenido de s2 durante 0xC (12d) bits. Como s2 = 0xAA83.7450, al desplazar 12 bits a la derecha extendiendo el signo quedará t2 = 0xFFFA.A837 d) sltiu $t0, $s1, 0xB0CA: esta instrucción pone a ‘1’ el registro t0 si el contenido de s1 es menor (sin tener en cuenta el signo) que el inmediato 0x0000.B0CA. Como s1 = 0x1234.5677 > 0x0000.B0CA, la condición no se cumple y por tanto el resultado será t0 = 0x0000.0000. e) lw $s4, -4($s4): esta instrucción lee una palabra (4 bytes) de memoria y la almacena en el registro s4. La dirección base en la que se encuentra el dato se calcula sumándole -4 bytes a la dirección indicada por s4. Como s4 = 0x0000.1234, la dirección base a la que hay que acceder es 0x0000.1230, por lo tanto el resultado de la instrucción es s4 = 0xCAFE.1CA1 (hay que tener en cuenta que la arquitectura es little endian). f) sh $s2, 2($s4): esta instrucción escribe en memoria media palabra de s2, es decir, los 2 bytes LSB del registro s2. La dirección base a partir de la cual se escribe el dato se obtiene de sumar 2 bytes a la dirección indicada por s4. Como s4 = 0x0000.1234, la dirección base del acceso es 0x.0000.1236, quedando la memoria como sigue: 0x0000.1236 = 0x50; y 0x0000.1237 = 0x74. 5. (1 punto) Indique qué modo de direccionamiento se utiliza en el último operando de cada una de las instrucciones del ejercicio anterior. a) b) c) d) e) f) $s0: Direccionamiento directo absoluto (de registro). 0xF1FA: Direccionamiento inmediato. 0xC: Direccionamiento inmediato. 0xB0CA: Direccionamiento inmediato. -4($s4): Direccionamiento directo relativo a registro base. 2($s4): Direccionamiento directo relativo a registro base. 6. (3 puntos) Codifique, en ensamblador MIPS, una función que calcule la potencia positiva de un número. Los argumentos son el número (Base) del cual se quiere calcular la potencia, y el orden de la potencia (Exponente), de tal forma que el resultado que devuelva la función sea: BaseExponente. A continuación se le facilita dicha función en código C. 4 ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES 1º I.T.I.G. – I.T.I.S. Examen Intercuatrimestral int Potencia(int Base, int Exponente) { int i, Resultado; if (Exponente < 0) // Se comprueba si el exponente es negativo { return -1; // Si exp. < 0, se devuelve código de error. } else { Resultado = 1; // Resultado si Exponente = 0. for (i = 0; i < Exponente; i++) // Cálculo de la potencia. Resultado = Resultado * Base; return Resultado; // Devolución del resultado. } } Utilice: a0 = Base; a1 = Exponente; t0 = i; t1 = Resultado Potencia: slt beq addi jr else: addi add for: slt beq mul addi j fin: add jr $t2, $a1, $zero $t2, $zero, else $v0, $zero, -1 $ra # Exponente < 0 $t1, $zero, 1 $t0, $zero, $zero # Resultado = 1 # i = 0 $t2, $t2, $t1, $t0, for # i < Exponente $t0, $a1 $zero, fin $t1, $a0 $t0, 1 $v0, $zero, $t1 $ra # return -1 # Resultado *= Base # i++ # return Resultado 5