Programmino in Assembler MIPS
Salve ragazzi sto realizzando un programmino mediante le istruzioni MIPS ma non sono sicuro di quello che ho fatto.
Il programma deve calcolare la somma RICORSIVA degli elementi di un array.
ecco il programma da me implementato:
prima lo scrivo in C poi in MIPS
Ora lo scrivo in MIPS
Il programma deve calcolare la somma RICORSIVA degli elementi di un array.
ecco il programma da me implementato:
prima lo scrivo in C poi in MIPS
int somma(int X [],int n){ if(n==0) return 0; else return X[n-1] + somma(X,n-1) }
Ora lo scrivo in MIPS
Supponiamo che la dimensione sia nel registro $ a0 e l'indirizzo base dell'array sia in $s0 somma: addi $sp ,$sp ,-12 #incremento lo stack sw $ao ,0($sp) #salvo il valore della dimensione sw $ra ,4($sp) #salvo l'indirizzo di ritorno sw $s2 ,8($sp) #nel registro $s2 manteniamo il risultato prodotto dalla ricorsione bne $ao ,$zero ,ric # effettuo il test per vedere se la dimensione è pari a 0 ,altrimenti passo a ric ed effettuo la chiamata ricorsiva add $s2,$vo,$zero #assegno il valore restituito dalla chiamata ricorsiva a $so addi $sp,$sp,12 #aggiorno il contatore jr $ra ric: slt $ao, $zero, Exit #se è minore di 0 la dimensione allora esco addi $ao,$ao ,-1 #decremento la variabile dimensione sll $to,$ao,2 #shift logico necessario per il caricamento in memoria dell'array add $to,$to,$so lw $t1,0($to) #carico in memoria la posizione desiderata dell'array add $vo,$t1,$vo #mi salvo X[n-1 ] nel registro di ritorno $vo jal somma #chimaata ricorsva con dimensione decementata diu uno lw $a0,0($sp) #ripristino tutti i valori dallo stack e lo aggiorno subito dopo lw $ra,4($sp) lw $s2,8($sp) addi $sp,$sp,12 jr $ra Exit: add $vo,$vo,$zero jr $ra
Risposte
nessuno che mi può aiutare???