| Duración |
Del 10 Al 26 de junio 2009 (3 semanas) |
| Horario: |
De 10a.m. a 12 p.m. |
| Dias: | Miércoles y viernes |
| Costo: | Q.500.00 |
| Salon: | Laboratorio 215 |
Ciencias de la computación III - Estructuras de máquinas
Laboratorio #04 - Conociendo MIPS
Adrián CatalánPropósito
- Familiárizarse con el simulador SPIM
- Iniciar a programar en assembler de MIPS
Conociendo MIPS
Para este laboratorio vamos a realizar un programa de MIPS que reciba 2 números del teclado e imprima lo siguiente:
- Suma
- Resta
- And
- Or
- El mayor de dos números
Cada operacion debe ser implementada con una función que reciba los dos números como parámetros. (Nota mental: recordarme de los registros $a0 y $a1)
Por ejemplo, para realizar la suma debe implementar una función suma que reciba como parámetros los n&ucaute;eros a sumar, efectúe la suma y guarde el resultado en el registro $v0. El resultado de la función será impreso por el programa que mando a llamar la función, en este caso main, y no por la función.
Para ayudarlo un poco, recibirá código de un main y algunas funciones útiles para su programa, revise el código y entiendalo para que se le facilite el trabajo.
Puede buscar en google ó consultar el Quick Reference de SPIM
.data
msgwel: .asciiz "\nBienvenidos al laboratorio numero 6\n\n"
msgpn: .asciiz "Ingrese el primer numero:"
msgsn: .asciiz "Ingrese el segundo numero:"
msgadd: .asciiz "El resultado de la suma:"
msgsub: .asciiz "\nEl resultado de la resta es:"
msgand: .asciiz "\nEl resultado de el and es:"
msgor: .asciiz "\nEl resultado de el or es:"
msgmax: .asciiz "\nEl numero mayor es:"
.text
main:
la $a0 msgwel #print_str("Bienvenidos al laboratorio numero 7")
li $v0 4 #print_str
syscall
la $a0 msgpn #print_str("Ingrese el Primer Numero")
li $v0 4 #print_str
syscall
li $v0 5 #$s0 = read_int()
syscall
add $s0 $v0 $0
la $a0 msgsn #print_str("Ingrese al segundo numero")
li $v0 4 #print_str
syscall
li $v0 5 #$s1 = read_int()
syscall
add $s1 $v0 $0
#Suma
la $a0 msgadd #print_str("El resultado de la suma:")
li $v0 4 #print_str
syscall
add $a0 $s0 $0
add $a1 $s1 $0
jal suma
add $a0 $v0 $0
li $v0 1
syscall
#Resta
la $a0 msgsub #print_str("El resultado de la resta:")
li $v0 4 #print_str
syscall
add $a0 $s0 $0
add $a1 $s1 $0
jal resta
add $a0 $v0 $0
li $v0 1
syscall
#miand
la $a0 msgand #print_str("El resultado de el and:")
li $v0 4 #print_str
syscall
add $a0 $s0 $0
add $a1 $s1 $0
jal miand
add $a0 $v0 $0
li $v0 1
syscall
#mior
la $a0 msgor #print_str("El resultado de el or:")
li $v0 4 #print_str
syscall
add $a0 $s0 $0 #$a0 = mior(s0, s1)
add $a1 $s1 $0
jal mior
add $a0 $v0 $0
li $v0 1
syscall
#max
la $a0 msgmax #print_str("El numero mayor es:")
li $v0 4 #print_str
syscall
add $a0 $s0 $0
add $a1 $s1 $0
jal max
add $a0 $v0 $0
li $v0 1
syscall
j exit
exit:
li $v0 10
syscall
# Aca comienzan sus funciones, le recomiendo que entienda el codigo
# que esta arriba para que se le facilite el trabajo
suma: #funcion suma
jr $ra #regresamos a donde se mando a llamar esta funcion
resta: #funcion resta
jr $ra
miand: #funcion and
jr $ra
mior: #funcion or
jr $ra
max: #funcion max
jr $ra
Entrega
La entrega se realizará a través del GES el día Viernes 13 de febrero del 2009, durante el periíodo del laboratorio. Debe enviar un archivo llamado seccionCarnet.s conteniendo únicamente sus funciones. NO envie main y NO le cambie nombre a las funciones.