|
|
|
|
 |
|  |
 |
drakend |
| [SPIM] Dubbio... |
19-05-2003 23:07 |
|
 |
drakend |
.grande:maestro.

Registered: Oct 2002
Posts: 1857 (0.22 al dì)
Location:
Corso:
Anno:
Time Online: 11 Days, 16:15:18 [...]
Status: Offline
Edit | Report | IP: Logged |
[SPIM] Dubbio...
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
|
|
19-05-2003 23:07 |
|
|
|  |
 |
AlphaGamma |
| Prova a salvare il program counter nello stack (ch ... |
19-05-2003 23:36 |
|
 |
AlphaGamma |
.piano ma pieni.

Registered: Jun 2002
Posts: 6732 (0.78 al dì)
Location:
Corso: Eh?
Anno: Io cosa?
Time Online: 21 Days, 21:22:01: [...]
Status: Offline
Edit | Report | IP: Logged |
Prova a salvare il program counter nello stack (che punta alla prossima istruzione) al posto di $ra. Ocio che devi ricaricarlo prima di ritornare.
Insomma una cosa del genere:
prima del salto:
addi $sp, $sp, -4
addi $t0, $pc, 4
sw $t0, 0($sp)
jal calcola
prima di tornare indietro
lw $t0, 0($sp)
addi $sp, $sp, 4
jr $t0
$pc e' aumentato di 4 perche' deve saltare DOPO calcola.
__________________
Attenzio', concentrazio', ritmo e VITALITÀ
|
|
19-05-2003 23:36 |
|
|
|  |
 |
drakend |
| [QUOTE][i]Originally posted by AlphaGamma [/i]
... |
19-05-2003 23:45 |
|
 |
drakend |
.grande:maestro.

Registered: Oct 2002
Posts: 1857 (0.22 al dì)
Location:
Corso:
Anno:
Time Online: 11 Days, 16:15:18 [...]
Status: Offline
Edit | Report | IP: Logged |
Originally posted by AlphaGamma
Prova a salvare il program counter nello stack (che punta alla prossima istruzione) al posto di $ra. Ocio che devi ricaricarlo prima di ritornare.
Insomma una cosa del genere:
prima del salto:
addi $sp, $sp, -4
addi $t0, $pc, 4
sw $t0, 0($sp)
jal calcola
prima di tornare indietro
lw $t0, 0($sp)
addi $sp, $sp, 4
jr $t0
$pc e' aumentato di 4 perche' deve saltare DOPO calcola.
Avevo pensato anche io di manipolare direttamente il valore del program counter... il problema è che spim non mi riconosce l'identificatore $pc... ho la versione 1.0 di PC SPim, l'ho scaricata dal sito, dovrebbe essere l'ultima.
Cmq al di là dei casini legati al simulatore, tu quando sommi 4 al pc non lo fai puntare all'istruzione sw $t0, 0($sp)?
Dovresti sommargli 12 per farlo andare dopo jal continua, no?
|
|
19-05-2003 23:45 |
|
|
|  |
 |
drakend |
| Dovevo mettere .globl main dopo text...
... |
20-05-2003 21:16 |
|
 |
drakend |
.grande:maestro.

Registered: Oct 2002
Posts: 1857 (0.22 al dì)
Location:
Corso:
Anno:
Time Online: 11 Days, 16:15:18 [...]
Status: Offline
Edit | Report | IP: Logged |
Dovevo mettere .globl main dopo text...
Ho provato per caso e funziona tutto a dovere, bella cazzata! 
|
|
20-05-2003 21:16 |
|
|
|  |
 |
Flyzone |
| [QUOTE][i]Originally posted by drakend [/i]
... |
20-05-2003 23:19 |
|
 |
Flyzone |
.coltellino:svizzero.
Registered: Jan 2003
Posts: 1956 (0.23 al dì)
Location:
Corso:
Anno:
Time Online: 19 Days, 22:20:19 [...]
Status: Offline
Edit | Report | IP: Logged |
Originally posted by drakend
ho la versione 1.0 di PC SPim, l'ho scaricata dal sito, dovrebbe essere l'ultima.
1.0? 
"The current version of spim is 6.5 (January 2003), which contains the following changes from version 6.4
http://www.cs.wisc.edu/~larus/spim.html

|
|
20-05-2003 23:19 |
|
|
|  |
 |
drakend |
| [QUOTE][i]Originally posted by Flyzone [/i]
... |
21-05-2003 07:49 |
|
 |
drakend |
.grande:maestro.

Registered: Oct 2002
Posts: 1857 (0.22 al dì)
Location:
Corso:
Anno:
Time Online: 11 Days, 16:15:18 [...]
Status: Offline
Edit | Report | IP: Logged |
Originally posted by Flyzone
1.0? 
"The current version of spim is 6.5 (January 2003), which contains the following changes from version 6.4
http://www.cs.wisc.edu/~larus/spim.html
In realtà è PCSpim ad essere 1.0, mentre il vero e proprio simulatore è 6.5, hai ragione. Probabilmente con la dicitura PcSpim si riferisce alla sola interfaccia grafica.
|
|
21-05-2003 07:49 |
|
|
|  |
 |
| All times are GMT. The time now is 04:28. |
|
|
 |
|
 |
|
|
|  |
Forum Rules:
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
|
HTML code is OFF
vB code is ON
Smilies are ON
[IMG] code is ON
|
|
|
|
|
|