Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # a0 indirizzo base A
- # a1 indirizzo base B
- # a2 dim(A)=dim(B)=n
- .data
- A: .word 1 2 3 4 5 6 7
- B: .word 7 6 5 4 3 2 1
- n: .word 7
- .text
- .globl main
- main:
- addi $sp, $sp, -4
- sw $ra, 0($sp)
- la $a0, A #$a0 = &A[0]
- la $a1, B #$a1 = &B[0]
- la $t0, n
- lw $a2, 0($t0) #$a2 = n
- jal procedura
- lw $ra, 0($sp)
- addi $sp, $sp, 4
- jr $ra
- procedura:
- addi $sp, $sp, -16
- sw $ra, 0($sp)
- sw $s0, 4($sp)
- sw $s1, 8($sp)
- sw $s2, 12($sp)
- add $v0, $0, $0
- add $s0, $a0, $0 # s0 = &A[0]
- add $s1, $a1, $0 # s1 = &B[0]
- add $s2, $a2, $0 # s2 = n
- add $t0, $0, $0 # inizializzazione indice for
- startFor:
- slt $t2, $t0, $s2 # if(i<n) condizione for
- beq $t2, $0, endFor
- sll $t1, $t0, 2 # t1 = 4*i
- add $s1, $s1, $t1 # s1 = &B[i] = &B[0] + offset
- lw $t4, 0($s1) # t4 = B[i] value
- add $s0, $s0, $t1 # s0 = &A[i]= &A[0] + offset
- lw $t5, 0($s0) # t5 = A[i] value
- add $a3, $0, $t5 # a3 = A[i]
- jal f_T # vado alla funzione ricorsiva
- add $t4, $t4, $v0 # B[i]+=f_T(A[i])
- addi $t0, $t0, 1 # incremento indice for
- j startFor
- endFor:
- add $v0, $t4, $0 # return B[i]+=f_T(A[i])
- lw $ra, 0($sp)
- lw $s0, 4($sp)
- lw $s1, 8($sp)
- lw $s2, 12($sp)
- addi $sp, $sp, 16
- jr $ra # return al main
- f_T:
- addi $sp, $sp,-24
- sw $ra, 0($sp)
- sw $s0, 4($sp)
- sw $s1, 8($sp)
- sw $s3, 12($sp)
- sw $s4, 16($sp)
- sw $a3, 20($sp) # salvo a3 = A[i] nello stack
- add $s4, $0, $0 # s4 come appoggio per la somma
- slti $t6, $a3, 3 # if(m<=2) = if(m<3)
- beq $t6, $0, Else
- addi $v0, $0, 1 # $v0 = 1
- j endRic
- Else:
- srl $a3, $a3, 1 # a3= a3/2
- jal f_T # T(m/2)
- add $v0, $v0, $v0 # v0 = 3*T(m/2) scritto come $v0= $v0+ $v0+ $v0
- add $v0, $v0, $v0 # per evitare di usare un registro per inserirci 3 e usare mult
- add $s4, $0, $v0 # s4 = 3*T(m/2)
- lw $a3, 20($sp) # ripristino A[i]
- srl $a3, $a3, 2 # A[i]/4
- jal f_T # T(m/4)
- sll $v0, $v0, 1 # v0 = 2*T(m/4)
- add $v0, $v0, $s4 # v0 = 3*T(m/2) + 2*T(m/4)
- endRic:
- lw $ra, 0($sp)
- lw $s0, 4($sp)
- lw $s1, 8($sp)
- lw $s3, 12($sp)
- lw $s4, 16($sp) # non uso lw su a3 perchè tanto verrà aggiornata nel for con A[i+1]
- addi $sp, $sp, 24
- jr $ra # return al for
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement