.dsy:it. Pages (3): « 1 [2] 3 »
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Architettura degli elaboratori e delle reti (http://www.dsy.it/forum/forumdisplay.php?forumid=210)
-- [D'antona] Progetto Polacca (http://www.dsy.it/forum/showthread.php?threadid=12999)


Posted by mark on 23-09-2004 18:39:

Originally posted by elpampero
Scusa, ma come faccio a confrontare un carattere con '/n'? di solito io faccio un beqz per confrontare con lo 0....



era solo un'idea, senza vedere il codice è difficile sentenziare :D

__________________
Non ti perdere di coraggio se ti tocca lavorare molto e raccogliere poco.....


Posted by elpampero on 24-09-2004 13:59:

Perchè questo programma per il calcolo del fattoriale non funziona? l'ho copiato pari pari dal sito di borghese.

# programma per il calcolo ricorsivo di n!
.data
prompt: .asciiz "\nInserire un numero intero: "
output: .ascii "Fattoriale: "
.text
.globl main
main:
# Lettura dell’intero di cui si calcola il fattoriale
li $v0, 4 # $v0 ¬ codice della print_string
la $a0, prompt # $a0 ¬ indirizzo della stringa
syscall # stampa della stringa
li $v0, 5 # $v0 ¬ codice della read_int
syscall # legge l’intero n e lo carica in $v0

# Calcolo del fattoriale
move $a0, $v0 # $a0 ¬ n
jal fact # chiama fact(n)
move $s0, $v0 # $s0 ¬ n!
# Stampa del risultato
li $v0, 4 # $v0 ¬ codice della print_string
la $a0, output # $a0 ¬ indirizzo della stringa
syscall # stampa della stringa di output
move $a0, $s0 # $a0 ¬ n!
li $v0, 1 # $v0 ¬ codice della print_int
syscall # stampa n!
# Termine del programma
li $v0, 10 # $v0 ¬ codice della exit
syscall # esce dal programma
fact:
addi $sp, $sp,-8 # alloca stack
sw $ra, 4($sp) # salvo return address
sw $a0, 0($sp) # salvo l’argomento n

bgt $a0, $zero, core # se n > 0 salta a core
li $v0, 1 # $v0 ¬ 1
j end

core:
addi $a0, $a0,-1 # decremento n --> (n–1)
jal fact # chiama fact(n-1) in $v0

lw $a0, 0($sp) # ripristino n in $a0
mul $v0, $a0, $v0 # ritorno n * fact (n-1)
end:
lw $ra, 4($sp) # ripristino return address
addi $sp, $sp, 8 # dealloca stack
jr $ra # ritorno al chiamante


Posted by ^Belzebu^ on 15-10-2004 07:37:

Originally posted by elpampero
Nessuno lo sta svolgendo?


io lo sto svolgendo ora... ma non ho capito una cosa..
da cio' che scritto sulle spiegazioni del progetto si dovrebbe usare una pila.
ma una sola? io non capisco come possa bastarne una sola.
perche' finche' hai una stringa tipo 3 12+ allora ne basta una per scriverci dentro (3+12) .
Ma se hai 3 12+ 5 23+* allora come fai a realizzare
((3+12)*(5+23)) senza avere almeno un'altra pila di comodo per impilare momentaneamente i dati che togli dalla prima pila, anche perche' per infilare la parentesi in fondo devi prima svuotare la pila e poi riempirla di nuovo. giusto?
o e' stato detto qualcosa che non compare sulle spiegazioni del progetto?
spero di essere stao chiaro.
grazie mille a coloro che mi risponderanno e mi daranno aiuto.
ByezAll
^Belzebu^

__________________
Meglio essere Padroni all'Inferno che schiavi in paradiso!


Posted by ^Belzebu^ on 15-10-2004 07:39:

Originally posted by elpampero
Nessuno lo sta svolgendo?

io lo sto svolgendo ora.. pero' non mi e' chairo una cosa.
ma si puo' usare una sola pila?
perche' in questo caso non capisco come si possa impilare correttamente il risultato.
mi spiego meglio:
se ho la stringa 3 24+ allora e' facile realizzare nella pila la stringa (3+24), il fondo della pila e' la prima parentesi a sinistra.
ma se ho 3 24+ 11 5+* allora il risultato dovrebbe essere
((3+24)*(11+5)).
ora mi spiegate come faccio a mettere le parentesi piu' esterne con una sola pila??!
dopo aver letto 3 24+ nella mia pila c'e' (3+24) , poi leggo il resto della stringa e in seguito ho la necessita' di andare a mettere una parentesi aperta in fondo!! quindi devo svuotare la pila, mettere la parentesi e poi rimettere nella pila i caratteri che ho tolto prima.
quindi saerve una pila di comodo, o sbaglio?
grazie a chiunque sapra' chiarirmi questo dubbio.
ByezAll
^Belzebu^

__________________
Meglio essere Padroni all'Inferno che schiavi in paradiso!


Posted by elpampero on 15-10-2004 07:59:

Finalmente qualcuno che è sulla mia stessa barca....
Dunque...teoricamente dovrebbe bastare una sola pila. Il primo problema è COME FACCIO A PRENDERE I NUMERI A 2 CIFRE?


Posted by ^Belzebu^ on 15-10-2004 08:37:

Originally posted by elpampero
Finalmente qualcuno che è sulla mia stessa barca....
Dunque...teoricamente dovrebbe bastare una sola pila. Il primo problema è COME FACCIO A PRENDERE I NUMERI A 2 CIFRE?

beh .. stiamo trattando delle stringhe, e non degli interi, e credo che in questo caso le cifre si impilano separatamente.
quindi se ho il numero 24 nella stringa, leggo 2 e lo impilo, leggo 4 e lo impilo, poi o trovo uno spazio oppure trovo un operatore.
e a seconda di cio' che trovo mi comporto nel modo opportuno.
sinceramente al momento con una sola pila non so come fare.
con due pile (una per il risultato ed una di comodo, per appoggio dei valori) farei cosi':

stringa polacca: 34 8+
impilo la parentesi [B]chiusa[\B]
leggo 3 e lo impilo nella pila di comodo
leggo 4 e lo impilo nella pila di comodo
trovo uno spazio allora leggo i caratteri dalla pila di comodo e li impilo nella pila risultato (cosi' da averli poi nella giusta posizione)
leggo 8 e lo impilo in una pila di comodo
leggo + e lo impilo nella pila risultato
leggo 8 dalla pila di comodo e lo impilo nella pila risultato
impilo la parentesi [B]aperta[\B]
stringa infissa:
top pila--> (8+34) <--fondo pila

questo e' cio' che mi viene in mente al momento.
ByezAll
^Belzebu^

__________________
Meglio essere Padroni all'Inferno che schiavi in paradiso!


Posted by elpampero on 15-10-2004 09:43:

Ora sono un pò preso...però mi interesserebbe consultarmi con qualcuno. Visto che sei l'unico nella mia situazione ti dò anche il mio indirizzo e-mail...elpampero@libero.it


Posted by elpampero on 22-10-2004 14:42:

Come posso fare per "spezzare" una stringa. In altre parole come posso prendere i numeri a 2 o più cifre?


Posted by elpampero on 22-10-2004 15:20:

Nessuno riesce a darmi una mano?


Posted by ^Belzebu^ on 22-10-2004 15:58:

Originally posted by elpampero
Nessuno riesce a darmi una mano?

non avevo visto prima la tua domanda...
che cmq sinceramente non capisco bene....
vuoi sapere come riconoscere un operando?
vai avanti a leggere la stringa, carattere per carattere, confrontandolo con spazio, + o * .
non riesco a capirti bene, se vuoi prova a spiegarmi meglio, io cerchero' di aiutarti per cio' che posso.
cmq al momento sono fermo col progetto, ho troppi casini al lavoro da risolvere e non ho il tempo per studiare.
ByezAll
^Belzebu^

__________________
Meglio essere Padroni all'Inferno che schiavi in paradiso!


Posted by elpampero on 22-10-2004 16:04:

Tu dicevi di impilare carattere per carattere...ma in realtà non conviene. Bisognerebbe trovare un metodo per riconoscere nella stringa i due numeri. Per esempio:
34 87+ andrebbe impilato come 34 e 87 NON come 3 4 Spazio 8 7


Posted by ^Belzebu^ on 25-10-2004 07:41:

Originally posted by elpampero
Tu dicevi di impilare carattere per carattere...ma in realtà non conviene. Bisognerebbe trovare un metodo per riconoscere nella stringa i due numeri. Per esempio:
34 87+ andrebbe impilato come 34 e 87 NON come 3 4 Spazio 8 7


sono d'accordissimo sul fatto che non conviene.
pero' non ho la piu' pallida idea su come fare per impilare il numero nella sua interezza e non il singolo carattere.
se trovi la soluzione fammi sapere.... :)
ByezAll
^Belzebu^

__________________
Meglio essere Padroni all'Inferno che schiavi in paradiso!


Posted by rossa on 02-11-2004 15:53:

L' unico modo che mi viene per impilare il numero nella sua interzza è quello di allocare tanto spazio di memoria per tante (da definire) stringhe temporanee in cui tenere i numeri man mano che si compongono e di cui impilare l' indirizzo nello stack,ma mi sembra uno spreco enorme .
Misembra più conveniente impilare tutte le stringhe, che presumibilmente non saranno tantissime, di dimensioni abbastanza consistenti, nello stack e muovere lo SP del numero giusto di byte (anche se molto sarà vuoto).
Che ne dite?


Posted by rossa on 02-11-2004 21:02:

L' unico modo che mi viene per impilare il numero nella sua interzza è quello di allocare tanto spazio di memoria per tante (da definire) stringhe temporanee in cui tenere i numeri man mano che si compongono e di cui impilare l' indirizzo nello stack,ma mi sembra uno spreco enorme .
Misembra più conveniente impilare tutte le stringhe, che presumibilmente non saranno tantissime, di dimensioni abbastanza consistenti, nello stack e muovere lo SP del numero giusto di byte (anche se molto sarà vuoto).
Che ne dite?


Posted by elpampero on 05-11-2004 13:42:

Ma che diferenza c'e' tra add, addu, addi ecc...? nel mio programma ho messo tutti add e non mi da nessun problema


All times are GMT. The time now is 04:45. Pages (3): « 1 [2] 3 »
Show all 32 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.