Pasar de binario a decimal en MIPS con 5 dígitos

 #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