SPIM - ISA del MIPS

Anuncio
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
Descargar