Página 1 de 3 Evaluación Trabajo de Laboratorio Número 1 Arquitectura de Computadoras 24/04/2013 Instrucciones La presente evaluación es individual y podrá utilizar todo el material escrito del que disponga. La misma consta de 4 ejercicios en total y la duración será de 75 minutos. En cada ejercicio se indica el tiempo estimado para resolverlo y el puntaje que otorga el mismo. No se permitirá intercambiar ni prestar ningún tipo de elemento entre los estudiantes. Ejercicios Propuestos 1) 15 Puntos – 10 Minutos. La rutina encriptar, detallada debajo, se encarga de recibir un numero de 32 bits en el registro $a0 y devolverlo encriptado en el lugar de memoria resultado. encriptar: move li li li li loop: and xor and sll add addi bgtz sw jr $t1, $t3, $t4, $t5, $t6, $t2, $t2, $t2, $t3, $t6, $t4, $t4, $t6, $ra $a0 1 16 0xFF 0 $t1, $t3 $t2, $t5 $t2, $t3 $t3, 1 $t6, $t2 $t4, -1 loop resultado Dado el número 234284 (en decimal), ¿cuál es el resultado de la encriptación? 2) 30 Puntos – 20 Minutos. El siguiente programa es una implementación de la función atoi en lenguaje ensamblador del MIPS. Esta función convierte una cadena de caracteres que representa un número entero, en un número entero y lo muestra por consola. .text main: la $a0, li $a1, li $v0, syscall la $t0, li $t2, string_space 1024 8 string_space 0 sum_loop: lb $t1, ($t0) addu $t0, $t0, 1 beq $t1, 10, end_sum_loop mul $t2, $t2, 10 sub $t1, $t1, '0' add $t2, $t2, $t1 b sum_loop end_sum_loop: move $a0, $t2 li $v0, 1 syscall la $a0, newline li $v0, 4 syscall Evaluación Trabajo de Laboratorio Número 1 Página 2 de 3 exit: li $v0, 10 syscall .data newline: .asciiz "\n" string_space: .space 1024 Esta implementación falla cuando se ingresan números negativos. Usted debe modificar el código para corregir este comportamiento, de manera que el programa muestre los números negativos correctamente. Su solución debe ser el programa completo, no solamente las modificaciones realizadas 3) 15 Puntos – 20 Minutos. La siguiente función calcula de manera recursiva el factorial de un número ingresado en $t1 factorial: salto: main: addi sw sw slti beqz li addi jr addi jal lw lw addi mul jr $sp, $sp, 8 $ra, 4($sp) $t1, 0($sp) $t0, $t1, 2 $t0, salto $t2, 1 $sp, $sp, 8 $ra $t1, $t1, -1 factorial $t1, 0($sp) $ra, 4($sp) $sp, $sp, 8 $t2, $t1, $t2 $ra li $t1, 6 jal factorial li $v0, 10 syscall Indique cuales de las siguientes afirmaciones son verdaderas: a) El ensamblador reemplaza la instrucción beqz por una beq. b) El ensamblador reemplaza la instrucción li por una andi. c) El registro $ra es usado por el ensamblador para guardar el punto de retorno de una subrutina, por lo tanto no puede ser modificado por el programador. d) El ensamblador reemplaza la instrucción li por una ori. e) La función retorna su valor en $t2. f) La función retorna su valor en $v1, por convención. 4) 40 Puntos – 25 Minutos. Escriba un programa en lenguaje ensamblador del MIPS el cual reciba números enteros a través de la consola hasta recibir el valor cero, y en ese momento finalice devolviendo como resultado, también a través de la consola, la suma de todos los números impares ingresados. Evaluación Trabajo de Laboratorio Número 1 Soluciones Propuestas 1) El resultado es 37843 o 0x93D3 2) 3) a) Verdadero. b) Falso. c) Falso. d) Verdadero. e) Verdadero. f) 4) - Falso. Página 3 de 3