Advertisement
Guest User

Untitled

a guest
Nov 20th, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.38 KB | None | 0 0
  1. # a0 indirizzo base A
  2. # a1 indirizzo base B
  3. # a2 dim(A)=dim(B)=n
  4. .data
  5. A: .word 1 2 3 4 5 6 7
  6. B: .word 7 6 5 4 3 2 1
  7. n: .word 7
  8. .text
  9. .globl main
  10.  
  11. main:
  12. addi $sp, $sp, -4
  13. sw $ra, 0($sp)
  14. la $a0, A #$a0 = &A[0]
  15. la $a1, B #$a1 = &B[0]
  16. la $t0, n
  17. lw $a2, 0($t0) #$a2 = n
  18. jal procedura
  19. lw $ra, 0($sp)
  20. addi $sp, $sp, 4
  21. jr $ra
  22.  
  23. procedura:
  24. addi $sp, $sp, -16
  25. sw $ra, 0($sp)
  26. sw $s0, 4($sp)
  27. sw $s1, 8($sp)
  28. sw $s2, 12($sp)
  29. add $v0, $0, $0
  30. add $s0, $a0, $0 # s0 = &A[0]
  31. add $s1, $a1, $0 # s1 = &B[0]
  32. add $s2, $a2, $0 # s2 = n
  33. add $t0, $0, $0 # inizializzazione indice for
  34.  
  35. startFor:
  36. slt $t2, $t0, $s2 # if(i<n) condizione for
  37. beq $t2, $0, endFor
  38. sll $t1, $t0, 2 # t1 = 4*i
  39. add $s1, $s1, $t1 # s1 = &B[i] = &B[0] + offset
  40. lw $t4, 0($s1) # t4 = B[i] value
  41. add $s0, $s0, $t1 # s0 = &A[i]= &A[0] + offset
  42. lw $t5, 0($s0) # t5 = A[i] value
  43. add $a3, $0, $t5 # a3 = A[i]
  44. jal f_T # vado alla funzione ricorsiva
  45. add $t4, $t4, $v0 # B[i]+=f_T(A[i])
  46. addi $t0, $t0, 1 # incremento indice for
  47. j startFor
  48.  
  49. endFor:
  50. add $v0, $t4, $0 # return B[i]+=f_T(A[i])
  51. lw $ra, 0($sp)
  52. lw $s0, 4($sp)
  53. lw $s1, 8($sp)
  54. lw $s2, 12($sp)
  55. addi $sp, $sp, 16
  56. jr $ra # return al main
  57.  
  58.  
  59. f_T:
  60. addi $sp, $sp,-24
  61. sw $ra, 0($sp)
  62. sw $s0, 4($sp)
  63. sw $s1, 8($sp)
  64. sw $s3, 12($sp)
  65. sw $s4, 16($sp)
  66. sw $a3, 20($sp) # salvo a3 = A[i] nello stack
  67. add $s4, $0, $0 # s4 come appoggio per la somma
  68. slti $t6, $a3, 3 # if(m<=2) = if(m<3)
  69. beq $t6, $0, Else
  70. addi $v0, $0, 1 # $v0 = 1
  71. j endRic
  72.  
  73.  
  74. Else:
  75. srl $a3, $a3, 1 # a3= a3/2
  76. jal f_T # T(m/2)
  77. add $v0, $v0, $v0 # v0 = 3*T(m/2) scritto come $v0= $v0+ $v0+ $v0
  78. add $v0, $v0, $v0 # per evitare di usare un registro per inserirci 3 e usare mult
  79. add $s4, $0, $v0 # s4 = 3*T(m/2)
  80. lw $a3, 20($sp) # ripristino A[i]
  81. srl $a3, $a3, 2 # A[i]/4
  82. jal f_T # T(m/4)
  83. sll $v0, $v0, 1 # v0 = 2*T(m/4)
  84. add $v0, $v0, $s4 # v0 = 3*T(m/2) + 2*T(m/4)
  85.  
  86. endRic:
  87. lw $ra, 0($sp)
  88. lw $s0, 4($sp)
  89. lw $s1, 8($sp)
  90. lw $s3, 12($sp)
  91. lw $s4, 16($sp) # non uso lw su a3 perchè tanto verrà aggiornata nel for con A[i+1]
  92. addi $sp, $sp, 24
  93. jr $ra # return al for
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement