![]() |
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)
[Architettura-D'antona] Progetto Polacca
Apro il thread del nuovo progetto valido fino al 31.12.2004 per gli appelli di Settembre, Ottobre, Novembre
Comunque ho dato una lettura veloce e non mi sembra tanto difficile.
In bocca al lupo a chi dovrà farlo
No...Non sembra neanche a me una cosa impossibile
L'etichetta main deve essere di tipo global?
Nessuno lo sta svolgendo?
Come posso inserire una stringa in un registro?
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...
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
E come posso allora confrontare due stringhe?
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.....
Perchè se faccio un ciclio per contare i caratteri me ne conta sempre due in più?
e' come se la stringa che inserisco abbia du caratteri "invisibili" alla fine
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.....
Scusa, ma come faccio a confrontare un carattere con '/n'? di solito io faccio un beqz per confrontare con lo 0....
io ho fatto il progetto l'ho inviato a marra lunedi e non ho ancora ricevuto risposta. qualcuno sa come funziona?
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....
__________________
Non ti perdere di coraggio se ti tocca lavorare molto e raccogliere poco.....
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
Originally posted by elpampero
Nessuno lo sta svolgendo?
__________________
Meglio essere Padroni all'Inferno che schiavi in paradiso!
Originally posted by elpampero
Nessuno lo sta svolgendo?
__________________
Meglio essere Padroni all'Inferno che schiavi in paradiso!
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?
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?
__________________
Meglio essere Padroni all'Inferno che schiavi in paradiso!
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
Come posso fare per "spezzare" una stringa. In altre parole come posso prendere i numeri a 2 o più cifre?
Nessuno riesce a darmi una mano?
Originally posted by elpampero
Nessuno riesce a darmi una mano?
__________________
Meglio essere Padroni all'Inferno che schiavi in paradiso!
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
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
__________________
Meglio essere Padroni all'Inferno che schiavi in paradiso!
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?
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?
Ma che diferenza c'e' tra add, addu, addi ecc...? nel mio programma ho messo tutti add e non mi da nessun problema
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!
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.