Mi hanno assegnato un esercizio in linguaggio Assembly da spiegare, solo che alcuni passaggi non mi sono chiari.
Se per favore qualcuno di voi riuscisse a spiegarmele,ve ne sarei grato.
(Indicherò tra parentesi le linee di codice che non mi sono chiare)
Il codice è il seguente:
#Allocare due vettori v1 e v2 di interi a 16 bit di 10 elementi ciascuno e scrivere una funzione utilizzando il passaggio
#dei parametri sullo stack che crea un nuovo vettore v3 nello stack i cui elementi sono calcolati secondo
#la seguente formula v3=v1+v2[10-i]. Scrivere una funzione che stampa a video il contenuto di v3 e
# si scriva il main per l' invocazione delle due funzioni.
.data
vet1: .half 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
vet2: .half 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
stringa: .asciiz "Il risultato acquisito e': "
spazio: .asciiz " "
.text
la $s0, vet1 (Nel registro $s0 viene caricato l'indirizzo dell'intero vettore vet1? )
la $s1, vet2
jal somma
j stampa
addi $sp, $sp, -20 (Perchè lo stack viene decrementato di 20? )
somma:
li $t1, 18
loop: beq $t0, 20, exit (In questo loop non ho capito quasi nulla)
add $t3, $t0, $s0
sub $t2, $t1, $t0
add $t4, $s1, $t2
lh $s2, 0($t3)
lh $s3, 0($t4)
add $s4, $s2, $s3
add $t5, $sp, $t0
sh $s4, 0($t5)
addi $t0, $t0, 2
j loop
exit:
jr $ra
stampa:
li $v0, 4
la $a0, stringa
syscall
li $t0, 0
loop2: (e anche questo loop non mi è chiaro)
beq $t0, 20, exit2
add $t5, $sp, $t0
lh $s5, 0($t5)
li $v0, 1
move $a0, $s5
syscall
li $v0, 4
la $a0, spazio
syscall
addi $t0, $t0, 2
j loop2
exit2:
nop