Advertisement
Alhiris

Untitled

Jan 13th, 2020
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.06 KB | None | 0 0
  1. .data
  2. n: .word 5
  3. v: .word 2, 4, 9, 15, 3
  4. sp: .byte ' '
  5. .text
  6.  
  7. main:
  8. lw $t0,n
  9. subu $sp,4
  10. sw $t0,0($sp)
  11. la $t0,v
  12. subu $sp,4
  13. sw $t0,0($sp)
  14.  
  15. jal modifica
  16.  
  17. addu $sp,8
  18.  
  19. lw $t2,n #variabile pentru print
  20. li $t0,0
  21. li $t1,0
  22.  
  23. print:
  24. beq $t1,$t2,exit
  25. lw $a0,v($t0) #Printare val din vector
  26. li $v0,1
  27. syscall
  28. lb $a0,sp #Print spatiu
  29. li $v0,11
  30. syscall
  31. addu $t0,4
  32. addu $t1,1
  33. j print
  34.  
  35. exit:
  36. li $v0,10
  37. syscall
  38.  
  39. modifica:
  40. subu $s0,4 #adaugam tot in stiva
  41. sw $fp,0($sp) #$s1,$s0,$ra,$fp
  42. addi $fp,$sp,4
  43. subu $s0,12
  44. sw $s1,0($sp)
  45. sw $s0,4($sp)
  46. sw $ra,8($sp)
  47. #sp:($s1)($s0)($ra)($fp)fp:(*v)(n)
  48.  
  49. lw $s0,0($fp) #*v
  50. lw $s1,4($fp) #n
  51. beqz $s1,exitModif
  52. lw $t0,0($s0) #incarcam urmatorul element din v
  53. subu $s0,4
  54. sw $t0,0($sp) #pregatim stiva pentru functia de suma puteri
  55. li $v0,0 #pregatim return-ul functiei
  56. jal suma_patrate
  57. sw $v0,0($s0) #schimbam valoarea vectorului cu cea returnata
  58. subu $s1,1 #n--
  59. addu $s0,4 #mutam pointer ul lui v
  60. subu $sp,8 #punem in stiva pentru recursivitate
  61. sw $s0,0($sp) #storing v
  62. sw $s1,4($sp) #storing n , sp=(*v)(n).....
  63. jal modifica
  64. addu $sp,8
  65.  
  66. exitModif: #exit-ul, refacem valorile la cele initiale, stergem din stiva
  67. la $s1,0($sp)
  68. lw $s0,4($sp)
  69. lw $ra,8($sp)
  70. lw $fp,12($sp)
  71. addu $sp,16
  72. jr $ra #Iesim din bloc spre locatia de unde a fost folosita functia
  73.  
  74.  
  75. suma_patrate:
  76. subu $sp,4 #push for $fp
  77. sw $fp,0($sp) #store $fp
  78. addi $fp,$sp,4 #schimbam pointer-ul de la $fp
  79. subu $sp,8 #push for $s0, $ra
  80. sw $s0,0($sp) #storing $s0
  81. sw $ra,4($sp) #pentru recursivitate
  82.  
  83. # sp:($s0)($ra)($fp)fp:(x)
  84.  
  85. lw $s0,0($fp) #Loading last s0 or t0
  86. subu $s0,1 #pregatim pentru adaugare
  87. blez $s0,exitSum#daca valoarea e <= 0 exit
  88. subu $sp,4
  89. sw $s0,0($sp) #Pregatim 0($fp) din urmatoare iterare
  90. jal suma_patrate
  91. addu $sp,4 #scoatem acel 0($fp)
  92. mul $s0,$s0,$s0 #squared
  93. add $v0,$v0,$s0 #adding
  94.  
  95. exitSum: #exitting, getting variables back
  96. lw $s0,0($sp)
  97. lw $ra,4($sp)
  98. lw $fp,8($sp)
  99. addu $sp,12
  100. jr $ra #jumping back
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement