Está en la página 1de 2

.

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

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

También podría gustarte