.dsy:it.
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 elpampero on 08-09-2004 13:42:

[Architettura-D'antona] Progetto Polacca

Apro il thread del nuovo progetto valido fino al 31.12.2004 per gli appelli di Settembre, Ottobre, Novembre


Posted by shadow on 09-09-2004 10:09:

Comunque ho dato una lettura veloce e non mi sembra tanto difficile.
In bocca al lupo a chi dovrà farlo


Posted by elpampero on 09-09-2004 10:14:

No...Non sembra neanche a me una cosa impossibile


Posted by elpampero on 14-09-2004 14:20:

L'etichetta main deve essere di tipo global?


Posted by elpampero on 20-09-2004 13:57:

Nessuno lo sta svolgendo?


Posted by elpampero on 20-09-2004 14:05:

Come posso inserire una stringa in un registro?


Posted by T_M_P on 21-09-2004 09:09:

Secondo me ti conviene usare la direttiva .asciiz che ti permette di utilizzare l'etichetta al posto di scrivere la stringa:

ins_n: .asciiz "Inserisci n: "

Utilizzi l'etichetta ins_n al posto della stringa, se è questo che vuoi fare...


Posted by T_M_P on 21-09-2004 09:11:

Non puoi caricare invece una stringa completa nel registro, ma puoi caricare l'indirizzo in memoria che contiene la stringa così:

la $a0, ins_n #Carico nel registro $a0 l'indirizzo dell'inizio della stringa ins_n


Posted by elpampero on 21-09-2004 13:26:

E come posso allora confrontare due stringhe?


Posted by mark on 21-09-2004 13:38:

guarda qui http://phoenix.goucher.edu/~kelliher/cs26/hw2soln.html

in fondo c'è un esempio di codice per inserimento e confronto tra due stringhe

l'ho provato con lo SPIM e funziona

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


Posted by elpampero on 22-09-2004 14:50:

Perchè se faccio un ciclio per contare i caratteri me ne conta sempre due in più?


Posted by elpampero on 22-09-2004 14:56:

e' come se la stringa che inserisco abbia du caratteri "invisibili" alla fine


Posted by mark on 22-09-2004 19:04:

perchè stai contando fino allo '\n'

se scandisci sino allo '\n' e non sino allo '\0' vedrai che conta giusto

occhio a dove metti nel codice l'incremento della variabile che conta i caratteri

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


Posted by elpampero on 23-09-2004 07:51:

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


Posted by uvaci on 23-09-2004 14:37:

io ho fatto il progetto l'ho inviato a marra lunedi e non ho ancora ricevuto risposta. qualcuno sa come funziona?


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


Posted by rossa on 07-11-2004 19:38:

add Rdest, Rsrc1, Src2
addi Rdest, Rsrc1, Imm
addu Rdest, Rsrc1, Src2

cioè con addi sommi al registro 1 un valore immediato mentre Src2 normalmente può essere un registro o un valore immediato (a 16 bit integer);
invece la u si riferisce ad unsigned.
Invece io non so bene la differenza tra l' istruzione b e la j, io ho usato sempre la b e funziona ma ora ho qualche dubbio!


Posted by ilredelmondo on 02-12-2004 13:29:

Qualcuno mi può dare una mano?

Il mio problema è:
come si fa (proprio a livello di sintassi) a "pushare" e "poppare" le stringhe create nello stack??

__________________
"...Torta di mele..."
"...il Boltzmann... Boltzmann si è suicidato, occhio a occuparvi di ‘ste robe qua eh... credeva di essere... che il suo genio non fosse riconosciuto, invece era riconosciuto sì, si è suicidato lo stesso... mah..."
"beh, voglio dirvi la verità, io sono stato un deficiente a tentare la prova... però giuro che è stato bellissimo!!!"


All times are GMT. The time now is 10:08.
Show all 32 posts from this thread on one page

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