24/05/10 17:18
pierotofy
Postato originariamente da DidyMond:
Quello che mi serve a me, se ho capito finisce in $a0
$a0 conterrà l'indirizzo del primo carattere della stringa che ti serve. La stringa di per se è da qualche parte in memoria.
ma come faccio a riempire un array?
Puoi usare la syscall #9
sbrk 9 number of bytes ($a0) address of block ($v0)
d.umn.edu/~gshute/spimsal/…
Che e' l'equivalente della malloc del C, dopodichè devi iterare per il numero di elementi che vuoi inserire nell'array e con un puntatore inizializzato al primo indirizzo dell'array ($v0) poi incrementi. Se hai delle basi di C sull'aritmetica dei puntatori bene, altrimenti consiglio di documentarti.
E se poi devo stampare queste stringhe come faccio? Non posso usare il metodo 4 del system service per stampare questa stringa...
Sbaglio io a capire?
Si puoi usare il metodo 4. E' fatto proprio per questo scopo...
Ultima modifica effettuata da pierotofy 24/05/10 17:19
29/05/10 12:58
DidyMond
Ecco qua, ho aspettato un pò a risponderti perchè ho preferito avere chiarimenti anche dal mio professore...
Mi ha semplicemente detto che utilizzare una stringa sarebbe troppo lungo e rognoso, così mi ha suggerito di utilizzare un codice idenificativo per sapere cosa vuole inserire l'utente!
Beh, così effettivamente è più semplice e sono andato molto più avanti nel progetto!
Ora mi rimane da riordinare gli elementi nell'array (in modo crescente e viceversa) in modo ricorsivo.
E' possibile utilizzare la ricorsione per riordinare?
aaa
29/05/10 18:37
crack001
Certo che puoi usare la ricorsione...devi solo gestirla sull'indice...parti dall'inizio e la richiami con l'indice incrementato...mi raccomando se usi la ricorsione devi utilizzare una funzione, e quindi devi ricordarti di salvare $ra dentro lo stack, io ti consiglio di farti uno schemetto del tuo stack su carta cosi capisci meglio i punti dove ritorni...io ho fatto una cosa simile con la ricerca binaria ma ti viene piu complicato
aaa
04/06/10 15:37
DidyMond
Allora...piano piano ci sto riuscendo; riesco a riordinare un array ricorsivamente...
Però, quello che ora mi chiedo è se è possibile "associare" due array in quanto ho:
array1-->Prodotti (non stringhe ma codici)
array2-->Prezzi (floating)
Se io eseguo il sorting su array1 mi restituisce i codici prodotti ordinati, però se io devo stampare a video un "riepilogo" il prezzo-prodotto non corrisponde più
Non è che sia possibile "associare" i due array, cioè se io effettuo uno scambio nei prodotti mi scambia anche i prezzi?
come dovrei passare i dati al sorting?
aaa
04/06/10 15:39
pierotofy
Nella procedura di sorting, quando scambi gli elementi dell'array prodotti scambia gli elementi corrispettivi dell'array prezzi. Ad esempio se stai scambiando il prodotto i con quello j, scambia anche il prezzo i con quello j.
05/06/10 0:04
pierotofy
Posta il codice completo... altrimenti non ti si può spiegare cosa bisogna fare; per la mancanza di registers io di solito risolvo utilizzando lo stack per allocare tutte le variabili locali (e anche per passare i parametri alle funzioni...)
Come in questo esempio:
pierotofy.it/pages/sorgenti/dettagli/18486-Implementazione_OOP/
All'inizio della tua procedura:
addi $sp, $sp, -4
sw $s0, 0($sp)
move $s0, $sp
# Create stack frame
addi $sp, $sp, -4
$s0 diventa il tuo "base pointer" che ti servirà da "puntatore di base" per accedere alle variabili locali. Dopodichè puoi utilizzare -4($s0) per fare utilizzare una variabile da 4 bytes. Ma ne puoi allocare quante ne vuoi. Ad esempio modificare:
# Create stack frame
addi $sp, $sp, -4
Con:
# Create stack frame
addi $sp, $sp, -12
Ti permette di utilizzare tre variabili da 4 bytes (oppure 1 da 12).
Per accedere alle variabili tramite lo stack:
lw $t0, 4($s0)
Poi prima di uscire dalla procedura è importante deallocare lo stack:
move $sp, $s0
lw $s0, 0($sp)
addi $sp, $sp, 4
Leggiti bene l'esempio che ho linkato e fatti uno schemino a matita dello stack, passo per passo come viene eseguito. Se analizzi bene il programma riuscirai anche a capire come è possibile passare parametri tramite lo stack.
Ultima modifica effettuata da pierotofy 05/06/10 0:07