Dsy Network www | forum | my | didattica | howto | wiki | el goog | stats | blog | dona | rappresentanti
Homepage
 Register   Calendar   Members  Faq   Search  Logout 
.dsy:it. : Powered by vBulletin version 2.3.1 .dsy:it. > Didattica > Corsi A - F > Architettura degli elaboratori e delle reti > [SPIM] Dubbio...
  Last Thread   Next Thread
Author
Thread    Expand all | Contract all    Post New Thread    Post A Reply
Collapse
drakend
.grande:maestro.

User info:
Registered: Oct 2002
Posts: 1857 (0.22 al dì)
Location:
Corso:
Anno:
Time Online: 11 Days, 16:15:18 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged
Question [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
Click Here to See the Profile for drakend Click here to Send drakend a Private Message Find more posts by drakend Add drakend to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
AlphaGamma
.piano ma pieni.

User info:
Registered: Jun 2002
Posts: 6732 (0.78 al dì)
Location:
Corso: Eh?
Anno: Io cosa?
Time Online: 21 Days, 21:22:01: [...]
Status: Offline

Post actions:

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
Click Here to See the Profile for AlphaGamma Click Here to See the Blog of AlphaGamma Click here to Send AlphaGamma a Private Message Visit AlphaGamma's homepage! Find more posts by AlphaGamma Add AlphaGamma to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
drakend
.grande:maestro.

User info:
Registered: Oct 2002
Posts: 1857 (0.22 al dì)
Location:
Corso:
Anno:
Time Online: 11 Days, 16:15:18 [...]
Status: Offline

Post actions:

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
Click Here to See the Profile for drakend Click here to Send drakend a Private Message Find more posts by drakend Add drakend to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
drakend
.grande:maestro.

User info:
Registered: Oct 2002
Posts: 1857 (0.22 al dì)
Location:
Corso:
Anno:
Time Online: 11 Days, 16:15:18 [...]
Status: Offline

Post actions:

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
Click Here to See the Profile for drakend Click here to Send drakend a Private Message Find more posts by drakend Add drakend to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
Flyzone
.coltellino:svizzero.

User info:
Registered: Jan 2003
Posts: 1956 (0.23 al dì)
Location:
Corso:
Anno:
Time Online: 19 Days, 22:20:19 [...]
Status: Offline

Post actions:

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? :shock:
"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

:ciaoo:

20-05-2003 23:19
Click Here to See the Profile for Flyzone Click Here to See the Blog of Flyzone Click here to Send Flyzone a Private Message Find more posts by Flyzone Add Flyzone to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
drakend
.grande:maestro.

User info:
Registered: Oct 2002
Posts: 1857 (0.22 al dì)
Location:
Corso:
Anno:
Time Online: 11 Days, 16:15:18 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

Originally posted by Flyzone
1.0? :shock:
"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

:ciaoo:

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
Click Here to See the Profile for drakend Click here to Send drakend a Private Message Find more posts by drakend Add drakend to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
All times are GMT. The time now is 04:28.    Post New Thread    Post A Reply
  Last Thread   Next Thread
Show Printable Version | Email this Page | Subscribe to this Thread | Add to Bookmarks

Forum Jump:
Rate This Thread:

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
 

Powered by: vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento | Licenze | Thanks | Syndacate
Pagina generata in 0.073 seconds (66.96% PHP - 33.04% MySQL) con 25 query.