Ciao a tutti, ho bisogno di un piccolo aiuto per terminare questo programma visto che non riesco a venirne fuori.
Il programma deve prendere in input un numero decimale e convertirlo in base binaria. L'unico (credo) problema che mi da è che alla fine non mi stampa tutta la stringa di 0, 1 che rappresentano il numero convertito, ma solo MSB. Potete darmi una mano?
Grazie
codice:
#Programma che permette di convertire un numero intero
#in un numero binario tramite procedura ricorsiva.
.data
prompt: .asciiz "Inserire un numero decimale intero: "
output: .asciiz "Numero in base binaria: "
.text
.globl main
main:
# Lettura dell'intero di cui si calcola la conversione
li $v0, 4
la $a0, prompt # $a0 indirizzo della stringa
syscall
li $v0, 5
syscall # legge l'intero n e lo carica in $v0
# Calcolo
move $a0, $v0 # $a0 n
jal converti # chiama converti(n)
move $s0, $v0 # $s0 n convertito
# Stampa del risultato
li $v0, 4
la $a0, output # $a0 indirizzo della stringa
syscall
move $a0, $s0 # $a0 n convertito
li $v0, 1
syscall # stampa n convertito
# Termine del programma
li $v0, 10 # $v0 codice della exit
syscall # esce dal programma
converti:
addi $sp, $sp,-8 # alloca stack
sw $ra, 4($sp) # salvo return address
sw $a0, 0($sp) # salvo l'argomento n
li $v0, 1
j end
converti_main:
div $a0, $0 # divide il numero per zero
mflo $t1 # salva il quoziente
mfhi $t2 # salva il resto
sll $t2,$t2,1 # shiftamento
add $t2,$t2,$0 # somma per resto
bne $a0, $zero, converti_main # se n !=0 salta all'inizio del ciclo converti_main
jal converti
lw $a0, 0($sp) # ripristino n in $v1
end:
lw $ra, 4($sp) # ripristino return address
addi $sp, $sp, 8 # dealloca stack
jr $ra # ritorno al chiamante