PDA

View Full Version : [SPIM] Simulatore MIPS


Manugal
14-07-2005, 12:19
Ciao a tutti!!!

Mi serve un aiuto sul codice assembler dello SPIM per un esame universitario. C'è qualcuno disposto a spiegarmi come si fa a passare più di quattro argomenti ad una funzione tramite lo stack pointer e a ritornare ad esempio altrettanti argomenti? Grazie.

71104
14-07-2005, 16:57
devi fare il push degli argomenti nello stack e il pop in ordine inverso.
siccome nei fantastici RISC (-__-') non esistono istruzioni di PUSH e POP, il push di un argomento consiste nel sottrarre il valore 4 allo stack pointer (se lo stack è allineato ai 4 byte) e mettere in memoria l'argomento di turno all'indirizzo puntato sempre dallo stack pointer; al contrario il pop consiste nel prelevare il valore puntato da $SP in un registro e addizionare 4 a $SP. in genere gli argomenti vengono spinti da destra a sinistra, cioè dall'ultimo al primo, in modo tale che quando vai a prelevarli te li ritrovi in ordine (quelli di sinistra nelle locazioni più basse).
tieni anche presente che potrebbe essere necessario mettere nello stack anche il return address, e se questo avviene in genere lo si mette *dopo* gli argomenti, cioè nelle locazioni immediatamente inferiori, quindi una volta entrato nella funzione non puoi fare direttamente il pop degli argomenti: devi prelevarli manualmente quando ti servono e fare il cleanup dello stack tutto alla fine.

Manugal
16-07-2005, 18:59
Grazie ma gli argomenti che passo (mettiamo il caso siano più di 4) in quali registri devo metterli dato che per gli argomenti ho solo $a0,$a1,$a2,$a3? E per ritornare più di due valori dato che ho solo $v1 e $v2 come posso fare? :)

71104
16-07-2005, 19:53
come ti ho detto sopra, no? se non hai abbastanza registri li metti nello stack; l'operazione di aggiungere un valore allo stack si chiama PUSH (gli Intel hanno un'istruzione apposita, mentre nei PPC devi maneggiare $SP a mano con ADD e SUB, ricordando che lo stack cresce verso il basso), mentre la rimozione si chiama POP.