#Realizar un programa que tenga una subrutina que reciba 5 nœmeros 0 — 1 como argumentos
#y devuelva el nœmero binario al que corresponden esos 5 d’gitos. Por ejemplo, si $a0, $a1 y $a2
#valen 0, $a3 vale 1 y se le pasa otro 1 por la pila, tiene que devolver el nœmero 11000 en decimal,
#es decir, 24
.data
cad: .asciiz "Introduzca un nœmero entero (0 — 1): "
cad2: .asciiz "El valor decimal es: "
.globl main
.text
main:
la $a0, cad #Pasamos como argumento la cadena a imprimir
jal lee_num #Llamada a la funci—n para leer un nœmero
move $s0, $v0 #Guardamos el nœmero le’do en $s0 (se preserva en la
#llamadas a funciones)
jal lee_num #Lee el 2¼ nœmero (el argumento $a0 no var’a)
move $a1, $v0 #Guardamos el 2¼ nœmero en a1
jal lee_num #Lee el 3er nœmero (e argumento $a0 no var’a)
move $a2, $v0 #Guardamos el 3er nœmero en $a2
jal lee_num #Lee el 4¼ nœmero (el argumento 0 no var’a)
move $a3, $v0 #Guardamos el 4¼ nœmero en $a3
jal lee_num #Lee el 5¼ nœmero (el argumento $a0 no var’a)
addi $sp, $sp, -4 #Guardamos el 5¼ nœmero en la pila
sw $v0, ($sp)
move $a0, $s0 #Pasamos el $s0 al primer argumento $a0
jal decimal #Llamamos a la funci—n que calcula el valor decimal
move $t0, $v0 #Movemos el resultado de la funci—n a $t0
li $v0, 4 #Llamada al sistema que imprime la cadena
la $a0, cad2 #indicada por el puntero $a0
syscall
move $a0, $t0 #Llamada al sistema que imprime el entero
li $v0, 1
syscall
li $v0, 10 #Llamada al sistema para salir del programa
syscall
lee_num:
li $v0, 4 #Llamada al sistema que imprime la cadena
syscall #indicada por el puntero $a0 (argumento)
li $v0, 5 #Llamada al sistema para leer un nœmero
syscall
jr $ra
decimal:
li $v0, 0 #Inicializamos el resultado
lw $t1, ($sp) #Sacamos de la pila el 5¼agumento
addi $sp, $sp, 4
sll $t0, $a1, 1 #Desplazamos $a1 una posici—n para colocarlo en su lugar
or $v0, $t0, $a0 #Hacemos un or con $a0 para obtener los 2
#d’gitos de menos peso del resutado
sll $t0, $a2, 2 #Desplazamos $a2 2 posiciones para colocarlo en su lugar
or $v0, $t0, $v0 #Obtenemos los 3 d’gitos de enos peso
sll $t0, $a3, 3 #Desplazamos $a3 3 posiciones
or $v0, $t0, $v0 #Obtenemos los 4 d’gitos de menos peso
sll $t0, $t1, 4 #Desplazamos $t1 4 posiciones
or $v0, $t0, $v0 #Obtenemos el resultado
jr $ra