Advertisement
Guest User

Untitled

a guest
May 26th, 2015
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.81 KB | None | 0 0
  1. # lab4
  2.  
  3. .data
  4. coordinates_dialog:
  5. .asciiz "Podaj ilosc wspolrzednych: "
  6. coordinates_input:
  7. .asciiz "Podaj wspolrzedne: \n"
  8. # cztery słowa:
  9. # [0] - adres tablicy porzadku,
  10. # [1] - adres tablicy wartości,
  11. # [2] - adres normalnie zapisanego wektora
  12. # [3] - wielkość wektora wartości
  13. vector1_table:
  14. .align 2
  15. .space 16
  16. vector2_table:
  17. .align 2
  18. .space 16
  19. .text
  20. li $v0, 4
  21. la $a0, coordinates_dialog
  22. syscall
  23.  
  24. li $v0, 5
  25. syscall
  26. move $s0, $v0 # s0 zawiera ilość współrzędnych wektorów
  27.  
  28. # -- alokacja pamięci na wektory w postaci zwykłej
  29.  
  30. mulo $s1, $s0, 4 # ilość bajtów potrzebnych do zapisania wektorów (słowa)
  31. li $v0, 9 # rezerwuje pamięć na zapisanie wektora 1 (postać zwykła)
  32. move $a0, $s1
  33. syscall
  34.  
  35. la $t0, vector1_table
  36. addi $t0, $t0, 8 # przechodzi do [2]
  37. sw $v0, ($t0)
  38.  
  39. li $v0, 9 # rezerwuje pamięć na zapisanie wektora 2 (postać zwykła)
  40. move $a0, $s1
  41. syscall
  42.  
  43. la $t0, vector2_table
  44. addi $t0, $t0, 8 # przechodzi do [2]
  45. sw $v0, ($t0)
  46.  
  47. # -- alokacja pamięci na wektory porządku
  48.  
  49. # dla wektora 1
  50. li $v0, 9
  51. move $a0, $s0 # rezerwujemy n bajtów (n - wymiar wektora) dla wektora porządku
  52. syscall
  53.  
  54. la $t0, vector1_table # przechodzi do vector1_table[0]
  55. sw $v0, ($t0) # zapisuje adres wektora porządku
  56.  
  57. #dla wektora 2
  58. li $v0, 9
  59. move $a0, $s0 # rezerwujemy n bajtów (n - wymiar wektora) dla wektora porządku
  60. syscall
  61.  
  62. la $t0, vector2_table # przechodzi do vector2_table[0]
  63. sw $v0, ($t0) # zapisuje adres wektora porządku
  64.  
  65.  
  66. # --- wprowadzanie współrzędnych wektorów
  67.  
  68. # wektor 1
  69.  
  70. li $v0, 4
  71. la $a0, coordinates_input
  72. syscall
  73.  
  74. la $t0, vector1_table
  75. # addi $t0, $t0, 8
  76. lw $t1, 8($t0) # adres na przechowanie współrzędnych wektora [2]
  77. lw $t3, ($t0) # adres tablicy porzadku [0]
  78. # lw $t4, 4($t0) # adres tablicy wartości [1]
  79.  
  80. li $t0, 0 # licznik pętli
  81. li $t2, 0 # wielkość wektora wartości
  82.  
  83. Vector1_Loop:
  84. bge $t0, $s0, Vector1_End # jeśli już zapisano wszystkie współrzędne -> branch
  85.  
  86. li $v0, 5
  87. syscall
  88.  
  89. sgt $t5, $v0, 0 # wartość dla wektora porządku
  90. add $t2, $t2, $t5 # zwiększ wielkość wektora wartości
  91.  
  92. sw $v0, ($t1) # zapisz wartość z wektora zwykłego
  93. sb $t5, ($t3) # zapisz wartość dla wektora porządku
  94.  
  95. addi $t1, $t1, 4 # zwiększ adres kolejnej komórki pamięci wektora zwykłego
  96. addi $t3, $t3, 1 # zwiększ adres kolejnej komórki dla wektora porządku
  97. addi $t0, $t0, 1 # zwiększ licznik
  98. j Vector1_Loop
  99.  
  100. Vector1_End:
  101.  
  102. # --- zapisuję wektor wartości wektora 1
  103. li $v0, 9
  104. mulo $a0, $t2, 4 # ilość bajtów potrzebnych do wektora wartości
  105. syscall
  106.  
  107. la $t0, vector1_table
  108. sw $v0, 4($t0) # zapisuje adres wektora wartości do pamieci
  109. sw $t2, 12($t0) # zapisuje wielkość wektora wartości
  110.  
  111. lw $t1, 8($t0) # adres wektora zwykłego
  112. move $t3, $v0 # adres wektora wartości
  113.  
  114. li $t0, 0 # licznik wektora zwykłego
  115.  
  116. Values1_Loop:
  117. bge $t0, $s0, Values1_End
  118.  
  119. lw $t2, ($t1)
  120.  
  121. beqz $t2, Values1_Proceed
  122. # zapisz wartość do wektora wartości
  123. sw $t2, ($t3)
  124. addi $t3, $t3, 4 # kolejna komórka wektora wartości
  125.  
  126. Values1_Proceed:
  127.  
  128. addi $t1, $t1, 4 # kolejna wartość wektora zwykłego
  129. addi $t0, $t0, 1
  130. j Values1_Loop
  131.  
  132. Values1_End:
  133.  
  134. # wektor 2
  135.  
  136. li $v0, 4
  137. la $a0, coordinates_input
  138. syscall
  139.  
  140. la $t0, vector2_table
  141. lw $t1, 8($t0) # adres na przechowanie współrzędnych wektora [2]
  142. lw $t3, ($t0) # adres tablicy porzadku [0]
  143.  
  144. li $t0, 0 # licznik pętli
  145. li $t2, 0 # wielkość wektora wartości
  146.  
  147. Vector2_Loop:
  148. bge $t0, $s0, Vector2_End # jeśli już zapisano wszystkie współrzędne -> branch
  149.  
  150. li $v0, 5
  151. syscall
  152.  
  153. sgt $t5, $v0, 0 # wartość dla wektora porządku
  154. add $t2, $t2, $t5 # zwiększ wielkość wektora wartości
  155.  
  156. sw $v0, ($t1) # zapisz wartość z wektora zwykłego
  157. sb $t5, ($t3) # zapisz wartość dla wektora porządku
  158.  
  159. addi $t1, $t1, 4 # zwiększ adres kolejnej komórki pamięci wektora zwykłego
  160. addi $t3, $t3, 1 # zwiększ adres kolejnej komórki dla wektora porządku
  161. addi $t0, $t0, 1 # zwiększ licznik
  162. j Vector2_Loop
  163.  
  164. Vector2_End:
  165.  
  166. # --- zapisuję wektor wartości wektora 2
  167. li $v0, 9
  168. mulo $a0, $t2, 4 # ilość bajtów potrzebnych do wektora wartości
  169. syscall
  170.  
  171. la $t0, vector2_table
  172. sw $v0, 4($t0) # zapisuje adres wektora wartości do pamieci
  173. sw $t2, 12($t0) # zapisuje wielkość wektora wartości
  174.  
  175. lw $t1, 8($t0) # adres wektora zwykłego
  176. move $t3, $v0 # adres wektora wartości
  177.  
  178. li $t0, 0 # licznik wektora zwykłego
  179.  
  180. Values2_Loop:
  181. bge $t0, $s0, Values2_End
  182.  
  183. lw $t2, ($t1)
  184.  
  185. beqz $t2, Values2_Proceed
  186. # zapisz wartość do wektora wartości
  187. sw $t2, ($t3)
  188. addi $t3, $t3, 4 # kolejna komórka wektora wartości
  189.  
  190. Values2_Proceed:
  191.  
  192. addi $t1, $t1, 4 # kolejna wartość wektora zwykłego
  193. addi $t0, $t0, 1
  194. j Values2_Loop
  195.  
  196. Values2_End:
  197.  
  198. # -- wyświetlanie wektorów
  199. # -- wektor porzadku 1
  200. li $v0, 11
  201. li $a0, 40
  202. syscall # "("
  203. la $t0, vector1_table
  204. lw $t1, ($t0)
  205.  
  206. li $t2, 0 # licznik petli
  207.  
  208. Display1_Loop:
  209. bge $t2, $s0, Display1_End
  210.  
  211. li $v0, 1
  212. lb $a0, ($t1)
  213. syscall
  214.  
  215. addi $t1, $t1, 1
  216. addi $t2, $t2, 1
  217.  
  218. bge $t2, $s0, Display1_End
  219. li $v0, 11
  220. li $a0, 44
  221. syscall # ","
  222.  
  223. j Display1_Loop
  224. Display1_End:
  225.  
  226. li $v0, 11
  227. li $a0, 41
  228. syscall # ")"
  229.  
  230. # -- wektor wartości 1
  231. li $v0, 11
  232. li $a0, 40
  233. syscall # "("
  234.  
  235. lw $t1, 4($t0) # adres wektora wartości
  236. lw $t2, 12($t0) # wielkość wektora wartości
  237.  
  238. li $t3, 0 # licznik pętli
  239.  
  240. Display1_Values_Loop:
  241. bge $t3, $t2, Display1_Values_End
  242.  
  243. li $v0, 1
  244. lw $a0, ($t1)
  245. syscall
  246.  
  247. addi $t1, $t1, 4
  248. addi $t3, $t3, 1
  249.  
  250. bge $t3, $t2, Display1_Values_End
  251. li $v0, 11
  252. li $a0, 44
  253. syscall # ","
  254.  
  255. j Display1_Values_Loop
  256. Display1_Values_End:
  257.  
  258. li $v0, 11
  259. li $a0, 41
  260. syscall # ")"
  261.  
  262. li $v0, 11
  263. li $a0, 10 # "\n"
  264. syscall
  265.  
  266. # -- wektor 2
  267. # -- wektor porzadku 2
  268. li $v0, 11
  269. li $a0, 40
  270. syscall # "("
  271. la $t0, vector2_table
  272. lw $t1, ($t0)
  273.  
  274. li $t2, 0 # licznik petli
  275.  
  276. Display2_Loop:
  277. bge $t2, $s0, Display2_End
  278.  
  279. li $v0, 1
  280. lb $a0, ($t1)
  281. syscall
  282.  
  283. addi $t1, $t1, 1
  284. addi $t2, $t2, 1
  285.  
  286. bge $t2, $s0, Display2_End
  287. li $v0, 11
  288. li $a0, 44
  289. syscall # ","
  290.  
  291. j Display2_Loop
  292. Display2_End:
  293.  
  294. li $v0, 11
  295. li $a0, 41
  296. syscall # ")"
  297.  
  298. # -- wektor wartości 1
  299. li $v0, 11
  300. li $a0, 40
  301. syscall # "("
  302.  
  303. lw $t1, 4($t0) # adres wektora wartości
  304. lw $t2, 12($t0) # wielkość wektora wartości
  305.  
  306. li $t3, 0 # licznik pętli
  307.  
  308. Display2_Values_Loop:
  309. bge $t3, $t2, Display2_Values_End
  310.  
  311. li $v0, 1
  312. lw $a0, ($t1)
  313. syscall
  314.  
  315. addi $t1, $t1, 4
  316. addi $t3, $t3, 1
  317.  
  318. bge $t3, $t2, Display2_Values_End
  319. li $v0, 11
  320. li $a0, 44
  321. syscall # ","
  322.  
  323. j Display2_Values_Loop
  324. Display2_Values_End:
  325.  
  326. li $v0, 11
  327. li $a0, 41
  328. syscall # ")"
  329.  
  330. # iloczyn skalarny
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement