View Full Version : [SPIM] Simulatore MIPS
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.
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.
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? :)
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.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.