Salve ragazzi, premetto che in quanto a ricorsione ho esperienza quasi zero ed il mio rapporto con lei non è buono (rotfl)
Tuttavia essendo un futuro informatico farò del mio meglio per conquistare questa complicata(solo all'inizio a quanto si dice) ragazza (good) (good)
Il testo dell'esercizio è questo:
Ipotizzo che l'effetto dell'errore è che viene ripetuto una volta in piu del dovuto la parte di codice tra le righe 32-37Tramite la tecnica della ricorsione scrivere una funzione che stampa gli elementi dell array {1,2,3,4,5,6,7,8,9,10}
Infatti nell'output compare sepre quell'1 di troppo alla fine
il codice è questo:codice:123456789101 ps: non fate caso che vengono stampati tutti attaccati, i ricamini all aspetto dell'output li farò dopo!
ps: forse avrei potuto risolverlo senza utilizzare lo stack, ma io VOLEVO esercitarmi usando lo stackcodice:.data V: .word 11,22,33 n: .word 3 .text main: lw $a0, V lw $a1, n addi $a1, $a1, -1 # l'indice per l'array va da 0 a 9, ecco perchè decrementa di 1 sll $a1, $a1, 2 # moltiplica per 4 per allinearsi con l'indirizzi che vanno di 4 in 4 jal print_elem # chiama funzione prima per la prima volta move $a0, $v0 # sposta in a0 il risultato ritornato dalla funzione li $v0, 1 # carica il codice per stampare un int syscall # stampa intero exit: li $v0, 10 syscall print_elem: beqz $a1, base lw $t0, V($a1) # in t0 ora c'è l'elemento dell'array alla posizione V($a1) addi $sp, $sp, -12 # preapra 3 posti nello stack sw $t0, 8($sp) sw $a1, 4($sp) sw $ra, 0($sp) addi $a1, $a1, -4 # decremento l'indice jal print_elem # passo ricorsivo lw $ra, 0($sp) lw $a1, 4($sp) lw $a0, 8($sp) syscall # stampa elemento salvato in a0 addi $sp, $sp, 12 # metto apposto lo stack pointer jr $ra base: lw $a0, V($a1) # carico in a0 il primo elemento li $v0, 1 syscall # stampo primo elemento jr $ra

Rispondi quotando