Advertisement
Guest User

Untitled

a guest
Mar 6th, 2015
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.11 KB | None | 0 0
  1. .text
  2. j main # Jump to main-routine
  3.  
  4. .data
  5. str1: .asciiz "Insert the array size \n"
  6. str2: .asciiz "Insert the array elements,one per line \n"
  7. str3: .asciiz "The sorted array is : \n"
  8. str5: .asciiz "\n"
  9.  
  10. .text
  11. .globl main
  12. main:
  13. la $a0, str1 # Print of str1
  14. li $v0, 4 #
  15. syscall #
  16.  
  17. li $v0, 5 # Get the array size(n) and
  18. syscall # and put it in $v0
  19. move $s2, $v0 # $s2=n
  20. sll $s0, $v0, 2 # $s0=n*4
  21. sub $sp, $sp, $s0 # This instruction creates a stack
  22. # frame large enough to contain
  23. # the array
  24. la $a0, str2 #
  25. li $v0, 4 # Print of str2
  26. syscall #
  27.  
  28. move $s1, $zero # i=0
  29. for_get: bge $s1, $s2, exit_get # if i>=n go to exit_for_get
  30. sll $t0, $s1, 2 # $t0=i*4
  31. add $t1, $t0, $sp # $t1=$sp+i*4
  32. li $v0, 5 # Get one element of the array
  33. syscall #
  34. sw $v0, 0($t1) # The element is stored
  35. # at the address $t1
  36. la $a0, str5
  37. li $v0, 4
  38. syscall
  39. addi $s1, $s1, 1 # i=i+1
  40. j for_get
  41. exit_get: move $a0, $sp # $a0=base address af the array
  42. move $a1, $s2 # $a1=size of the array
  43. jal selectionSort # isort(a,n)
  44. # In this moment the array has been
  45. # sorted and is in the stack frame
  46. la $a0, str3 # Print of str3
  47. li $v0, 4
  48. syscall
  49.  
  50. move $s1, $zero # i=0
  51. for_print: bge $s1, $s2, exit_print # if i>=n go to exit_print
  52. sll $t0, $s1, 2 # $t0=i*4
  53. add $t1, $sp, $t0 # $t1=address of a[i]
  54. lw $a0, 0($t1) #
  55. li $v0, 1 # print of the element a[i]
  56. syscall #
  57.  
  58. la $a0, str5
  59. li $v0, 4
  60. syscall
  61. addi $s1, $s1, 1 # i=i+1
  62. j for_print
  63. exit_print: add $sp, $sp, $s0 # elimination of the stack frame
  64.  
  65. li $v0, 10 # EXIT
  66. syscall
  67. swap:
  68. #a0 = v[]
  69. #a1 = i
  70. #a2 = j
  71. #s0 = i * 4
  72. #s0 = address v[i]
  73. #t0 = temp1
  74. #s2 = j* 4
  75. #s2 = v[j]
  76. #t1 = temp2
  77. addi $sp, $sp, -20 #make room on stack for 4
  78. sw $s0, 0($sp) #save on stack
  79. sw $s1, 4($sp)
  80. sw $s2, 8($sp)
  81. sw $s3, 12($sp)
  82. sw $ra, 16($sp)
  83.  
  84. sll $s0, $a1,2 #a1 = i en 2 is *4
  85. add $s0,$s0,$a0 #s0 = address v[i]
  86. lw $t0,0($s0)
  87.  
  88. sll $s2,$a2,2
  89. add $s2,$s2,$a0 #s2 = v[j]
  90. lw $t1,0($s2)
  91.  
  92. move $s0, $t1 #$s0 = v[i]
  93. move $s1, $t0 #s0 = v[j]
  94.  
  95. lw $s0,0($sp) #restore from stack
  96. lw $s1,4($sp)
  97. lw $s2,8($sp)
  98. lw $s3,12($sp)
  99. lw $ra, 16($sp)
  100. addi $sp, $sp, 20 # remove callframe from stack
  101.  
  102. jr $ra
  103.  
  104. endSwap:
  105.  
  106. indexMinimum:
  107. #s0 = mini
  108. #s2 = min
  109. #s3 = i
  110. #s4 = v
  111. #s5 = first
  112. #s6 = last
  113. addi $sp, $sp, -28 #make room on stack for 6
  114. sw $s0, 0($sp) #save on stack
  115. sw $s2, 8($sp)
  116. sw $s3, 12($sp) #s1 VERGETEN
  117. sw $s4, 16($sp)
  118. sw $s5, 20($sp)
  119. sw $s6, 4($sp)
  120. sw $ra,24($sp)
  121.  
  122. move $s0,$a1
  123. move $s5,$a1
  124. move $s6,$a2
  125. move $s4,$a0
  126.  
  127. sll $s5,$s5,2 #first*4
  128. add $t0,$s4,$s5
  129. lw $s2,0($t0)
  130.  
  131. for1:
  132. li $s3,0
  133. forCompare1:
  134. slt $t1,$s3,$s6
  135. beq $t1,1,forBody1
  136. beq $s3,$s3,forBody1
  137. j endFor1
  138. forBody1:
  139. sll $t1,$s3,2 #i * 4
  140. add $t1,$s4,$t1 #t1 = address v[i]
  141. lw $t2,0($t1) #t2 = value of v[i]
  142. blt $t2,$s2,forBody1_2
  143. j endFor1
  144. forBody1_2:
  145. move $s0,$s3
  146. move $s2,$t2
  147.  
  148. endFor1:
  149. addi $s3,$s3,1
  150. move $v0,$s0
  151.  
  152. lw $s0,0($sp) #restore from stack
  153. lw $s2, 8($sp)
  154. lw $s3, 12($sp) #s1 VERGETEN
  155. lw $s4, 16($sp)
  156. lw $s5, 20($sp)
  157. lw $s6, 4($sp)
  158. lw $ra,24($sp)
  159. addi $sp, $sp, 28 # remove callframe from stack
  160.  
  161. jr $ra
  162.  
  163. selectionSort:
  164. #s0 = a
  165. #s1 = length
  166. #s2 = i
  167. #s3 = mini
  168.  
  169. addi $sp, $sp, -20 #make room on stack for 6
  170. sw $s0, 0($sp) #save on stack
  171. sw $s1, 4($sp)
  172. sw $s2, 8($sp)
  173. sw $s3, 12($sp)
  174. sw $ra,24($sp)
  175.  
  176. move $s0,$a0
  177. move $s1,$a1
  178.  
  179. for2:
  180. li $s2,0
  181. forCompare2:
  182. addi $t0,$s1,-1
  183. blt $s2,$t0,forBody2
  184. j endFor2
  185. forBody2:
  186. move $a0,$s0
  187. move $a1,$s2
  188. move $a2,$t0
  189. jal indexMinimum
  190. move $s3,$v0
  191.  
  192. move $a2,$s3
  193. jal swap
  194. addi $s2,$s2,1 #i = i + 1
  195.  
  196. j forCompare2
  197.  
  198. endFor2:
  199.  
  200. lw $s0, 0($sp)
  201. lw $s1, 4($sp)
  202. lw $s2, 8($sp)
  203. lw $s3, 12($sp)
  204. lw $ra,24($sp)
  205. addi $sp, $sp, 20
  206.  
  207. jr $ra
  208. endselectionSort:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement