ho capito quello che dici tu però non riesco ancora a risolvere il problema ad esempio ho questa traccia:
devo allocare in area stack un array di 15 interi.
poi richiamo una funzione array_init fornendole come parametri il puntatore dell'array, m ed
n.
la funzione inizializza ogni elemento A[i] dell'array al valore m*4+n*3+i
io ho fatto così:
array_init:
move $s0,$a0 # $s0 c'e' la testa del vettore
move $t6,$t0 # questo è m
move $t7,$t1 # questo è n
li $t1,0 # i=0
li $t4,0
#qui faccio l'operazione di moltiplicazione e addizione
loop2: mul $a1,$t6,4
mul $a2,$t7,3
add $a3,$a1,$a2
add $a3,$a3,$t1 # $a3 c'è il risultato
add $t5,$s0,$t4
sw $a3,($t5) #scrivo il risultato contenuto in $a3 nella posizione $t5(che sarebbe quella di partenza)
addi $t1,$t1,1
addi $t4,$t4,4
blt $t1,15,loop2
jr $ra
Glie l'ho fatta vedere al prof ma mi ha detto testuali parole:
devo mettere tutto il vettore sullo stack,Per usare le variabili sullo stack, elimina la dichiarazione globale del vettore che hai usato finora.
puoi utilizzare:
addi $sp, $sp, -VALORE
dove VALORE è il numero di byte che vuoi riservare. Spostando in giù lo stack pointer, lasci libero dello spazio utilizzabile. Se ora ti sposti il valore dello stack pointer in un registro:
move $t0, $sp
hai un puntatore a quest'area dello stack che puoi passare in giro. Segui la logica dello stack: passa un riferimento a dati che si trovano sullo stack solo finchè il frame della funzione in cui allochi è attivo.
Mi potresti dare una mano perfavore è urgente visto che domani ho l'esame...grazie mille in anticipo