[SPIM] Dubbio...
Posted by drakend on 19-05-2003 23:07
Stavo studiando un po' lo SPIM ed ho provato a realizzare un programma che realizza il calcolo di potenze di base ed esponente interi positivi. Siccome volevo provare anche le chiamate di procedura ho usato la ricorsione anziché un ciclo, solo che incontro un piccolo problema: l'istruzione jal che uso per chiamare la procedura e salvare l'indirizzo della prossima istruzione da cui riprendere l'esecuzione non funziona... o meglio non sembra farlo correttamente. Sì perché quando chiamo jal questa mi mette dentro $ra l'indirizzo della prima istruzione della funzione chiamata, rendendomi impossibile uscire quindi dalla procedura alla fine. Volevo sapere da cosa poteva dipendere.
Ah uso il simulatore PCSpim su Windows XP.
Il codice lo riporto di seguito per completezza.
---
#Programma per il calcolo di una potenza mediante procedura ricorsiva
.data
stringa1: .asciiz "Inserire la base: "
stringa2: .asciiz "Inserire l'esponente: "
stringa3: .asciiz "Il risultato è: "
.text
#LEGGO LA BASE
la $a0,stringa1
li $v0,4
syscall
li $v0,5
syscall
move $a2,$v0
#LEGGO L'ESPONENTE
la $a0,stringa2
li $v0,4
syscall
li $v0,5
syscall
move $a3,$v0
beq $a3,0,esponentezero #in caso di base ^0 gestisco la particolarità
move $v0,$a2
add $a3,$a3,-1
jal calcola
j stampa
calcola:
beq $a3,0,fine #se l'esponente è zero termino la ricorsione
#alloco lo stack e calcolo la potenza
mul $v0,$v0,$a2
addi $a3,$a3,-1
#salvo $ra
addi $sp,$sp,-4
sw $ra,0($sp)
jal calcola
#ricarico $ra
lw $ra,0($sp)
addi $sp,$sp,4
fine:
jr $ra
esponentezero:
li $v0,1
stampa:
move $t0,$v0
la $a0,stringa3
li $v0,4
syscall
move $a0,$t0
li $v0,1
syscall
Powered by: vbHome (lite) v3.8 and vBulletin v2.3.1
Copyright © 2000 - 2002 Jelsoft Enterprises Limited