Advertisement
Guest User

Untitled

a guest
Nov 30th, 2015
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.07 KB | None | 0 0
  1. .data
  2. inputFile: .asciiz "input.bmp"
  3. outputFile: .asciiz "output.bmp"
  4. header: .align 2
  5. .space 54
  6.  
  7. width: .align 2
  8. .word
  9.  
  10. height: .align 2
  11. .word
  12.  
  13. offset: .align 2
  14. .word
  15.  
  16. .text
  17. #OTWORZ PLIK
  18. li $v0, 13
  19. la $a0, inputFile
  20. li $a1, 0
  21. li $a2, 0
  22. syscall
  23. move $t0, $v0
  24. #CZYTAJ Z PLIKU BMP
  25. move $a0, $t0
  26. la $a1, header
  27. li $a2, 54
  28. li $v0, 14
  29. syscall
  30.  
  31.  
  32. lh $t7, header+18#szerokosc
  33. sw $t7, width #przechowujemy szerokoϾ w RAMie
  34. lh $t6, header+22#wysokosc
  35. sw $t6, height #przechowujemy wysokoϾ w RAMie
  36. mul $t5, $t7, $t6#ilosc pixeli
  37. andi $t4, $t7, 3#offset
  38. sw $t4, offset #przechowujemy padding w ram
  39.  
  40. mul $t5, $t5, 3 #bit *3
  41. mul $t4, $t4, $t6 #offset * wysokosc
  42. add $t5, $t5, $t4 #offset size + map size
  43.  
  44. move $a0, $t5
  45. li $v0, 9 #syscall 9 (sbrk)
  46. syscall
  47. la $t1, ($v0)
  48. # t1 - adres bufera bmp
  49.  
  50. #CZYTAJ Z PLIKU BMP reszte
  51. move $a0, $t0
  52. la $a1, ($t1)
  53. move $a2, $t5
  54. li $v0, 14
  55. syscall
  56.  
  57. move $a0, $t0
  58. li $v0, 16
  59. syscall
  60.  
  61.  
  62.  
  63. #############################KOD#####################################
  64.  
  65. #czyszczenie rejestrów
  66. li $t2, 0
  67. li $t6, 0
  68. li $t3, 0
  69. li $t4, 0
  70. move $t3, $t7 #wczytuje z szeroko?? do rejestru t3
  71. la $s1, ($t1) #kopiuje adres do $s na razie just in case
  72.  
  73.  
  74.  
  75.  
  76. loop_begin:
  77. lbu $t4, ($t1) #wczytuje do rejestru pyxel (B channel)
  78. beq $t4, 255, equal_white_w #je?li bia?y
  79. beq $t4, 0x00, equal_black_w #je?li czarny
  80.  
  81. equal_white_w:
  82. sub $t3, $t3, 1 #odejmuje 1 od szeroko?ci
  83. beqz $t3, load_next_row #je?eli wysoko?? == 0, ?aduje kolejny wiersz
  84. addi $t1, $t1, 3 #przesuwa wska?nik pliku na nast?pny pixel
  85. b loop_begin
  86.  
  87. equal_black_w:
  88. sub $t3, $t3, 1 #odejmuje 1 od szeroko?ci
  89. addi $t6, $t6, 1 #dodaje 1 do szeroko?ci KWADRATU
  90. beqz $t3, measure_height #je?eli wysoko?? == 0, ?aduje kolejny wiersz
  91. addi $t1, $t1, 3 #przesuwa wska?nik pliku na nast?pny pixel
  92. lbu $t4, ($t1) #wczytuje do rejestru nast?pny pyxel (B channel)
  93. beq $t4, 0xff, measure_height #je?li bia?y
  94. b loop_begin
  95.  
  96. load_next_row:
  97. lb $t2, offset #?aduje padding do rejestru $t2
  98. add $t1, $t1, $t2 #przesuwa wska?nik pliku na pierwszy pixel w nowym wierszu
  99. li $t3, 0
  100. move $t3, $t7 #wczytuje z RAMu szeroko?? do rejestru t3
  101. b loop_begin
  102.  
  103. measure_height:
  104. move $a0, $t6 #wypisz bok kwadratury
  105. li $v0, 1
  106. syscall
  107.  
  108. circle_specs:
  109. srl $s3, $t6, 1 #promieñ
  110. move $s4, $s3, #x0
  111. move $s5, $s3, #y0
  112.  
  113.  
  114. move_pointer_to_first_black:
  115. move $t4, $t6 #szerokoϾ kwadratu zapisywana w t4
  116.  
  117. loop_mp:
  118. sub $t1, $t1, 3 #pointer po zmierzeniu szerokoœci jest na koñcu kwadratu
  119. sub $t4, $t4, 1
  120. beqz $t4, draw #w pêtli przesuwamy go na pocz¹tix
  121. b loop_mp
  122.  
  123.  
  124. draw: #rysuje samplix pixel
  125. #sample#
  126. li $s7, 0xff
  127. sb $s7, ($t1)
  128. #sample#
  129.  
  130. la $t3, ($t1)
  131.  
  132. ################ liczymy szerokoϾ x 3 + offser ###################
  133. move $t4, $t7
  134. add $t7, $t7, $t4 #xdddddddd
  135. add $t7, $t7, $t4
  136. add $t7, $t7, $t2
  137.  
  138.  
  139. draw_circle:
  140.  
  141. ## variables preparation ##
  142. li $s2, 0
  143. sub $s2, $s2, $s3 # x = -r
  144. li $s6, 0 # y = 0
  145. li $t4, 0
  146. sub $t4, $t4, $s3
  147. sub $t4, $t4, $s3 # -2*r
  148. li $s7, 2
  149. add $s7, $s7, $t4 # err = 2 - 2*r
  150. ############################
  151.  
  152.  
  153.  
  154.  
  155. ############### DO ###################
  156. set_pixel_1:
  157. sub $t2, $s4, $s2 #xm-x
  158. add $t4, $s5, $s6 #ym+y
  159.  
  160. move $a0, $t2 #argiument X
  161. move $a1, $t4 #argiument Y
  162. jal set_pixel #wywo³anie funkcji
  163. la $t1, ($t3) #wracamy na poczatek kwadratu
  164.  
  165. set_pixel_2:
  166. sub $t2, $s4, $s6 #xm-y
  167. sub $t4, $s5, $s2 #ym-x
  168.  
  169. move $a0, $t2 #argiument X
  170. move $a1, $t4 #argiument Y
  171. jal set_pixel #wywo³anie funkcji
  172. la $t1, ($t3) #wracamy na poczatek kwadratu
  173.  
  174. set_pixel_3:
  175. add $t2, $s4, $s2 #xm+x
  176. sub $t4, $s5, $s6 #ym-y
  177.  
  178. move $a0, $t2 #argiument X
  179. move $a1, $t4 #argiument Y
  180. jal set_pixel #set3
  181. la $t1, ($t3) #wracamy na poczatek kwadratu
  182.  
  183. set_pixel_4:
  184. add $t2, $s4, $s6 #xm+y
  185. add $t4, $s5, $s2 #ym+x
  186.  
  187. move $a0, $t2 #argiument X
  188. move $a1, $t4 #argiument Y
  189. jal set_pixel #set3
  190. la $t1, ($t3) #wracamy na poczatek kwadratu
  191.  
  192. ############### ustawienie parametrów i waruneczki #########################3
  193.  
  194. move $s3, $s7 # r = err
  195.  
  196. beq $s3, $s6 , r_smaller #if (r <= y)
  197. blt $s3, $s6 , r_smaller #if (r <= y)
  198. b next_if
  199.  
  200. r_smaller:
  201.  
  202. addi $s6, $s6, 1 # ++y
  203. move $t4, $s6
  204. sll $t4, $t4, 1 # t4 = ++y*2
  205. addi $t4, $t4, 1 # t4 = ++y*2+1
  206. add $s7, $s7, $t4 # err += t4
  207.  
  208. next_if:
  209. bgt $s3, $s2, r_greater #r > x
  210. bgt $s7, $s6, r_greater #err > y
  211. b end_if
  212.  
  213. r_greater:
  214. addi $s2, $s2, 1 # ++x
  215. move $t4, $s2
  216. sll $t4, $t4, 1 # t4 = ++x*2
  217. addi $t4, $t4, 1 # t4 = ++x*2+1
  218. add $s7, $s7, $t4 # err += t4
  219.  
  220. end_if:
  221.  
  222. ##############################################################
  223.  
  224. ##################### BIG LOOOP PART ###############
  225.  
  226. bloop_begin:
  227. bltz $s2, bloop
  228. b end_all
  229.  
  230. bloop:
  231.  
  232. set_pixel_l1:
  233. sub $t2, $s4, $s2 #xm-x
  234. add $t4, $s5, $s6 #ym+y
  235.  
  236. move $a0, $t2 #argiument X
  237. move $a1, $t4 #argiument Y
  238. jal set_pixel #wywo³anie funkcji
  239. la $t1, ($t3) #wracamy na poczatek kwadratu
  240.  
  241. set_pixel_l2:
  242. sub $t2, $s4, $s6 #xm-y
  243. sub $t4, $s5, $s2 #ym-x
  244.  
  245. move $a0, $t2 #argiument X
  246. move $a1, $t4 #argiument Y
  247. jal set_pixel #wywo³anie funkcji
  248. la $t1, ($t3) #wracamy na poczatek kwadratu
  249.  
  250. set_pixel_l3:
  251. add $t2, $s4, $s2 #xm+x
  252. sub $t4, $s5, $s6 #ym-y
  253.  
  254. move $a0, $t2 #argiument X
  255. move $a1, $t4 #argiument Y
  256. jal set_pixel #set3
  257. la $t1, ($t3) #wracamy na poczatek kwadratu
  258.  
  259. set_pixel_l4:
  260. add $t2, $s4, $s6 #xm+y
  261. add $t4, $s5, $s2 #ym+x
  262.  
  263. move $a0, $t2 #argiument X
  264. move $a1, $t4 #argiument Y
  265. jal set_pixel #set3
  266. la $t1, ($t3) #wracamy na poczatek kwadratu
  267.  
  268. ############### ustawienie parametrów i waruneczki #########################3
  269.  
  270. move $s3, $s7 # r = err
  271.  
  272. beq $s3, $s6 , r_smaller #if (r <= y)
  273. blt $s3, $s6 , r_smaller #if (r <= y)
  274. b next_if
  275.  
  276. rl_smaller:
  277.  
  278. addi $s6, $s6, 1 # ++y
  279. move $t4, $s6
  280. sll $t4, $t4, 1 # t4 = ++y*2
  281. addi $t4, $t4, 1 # t4 = ++y*2+1
  282. add $s7, $s7, $t4 # err += t4
  283.  
  284. nextl_if:
  285. bgt $s3, $s2, r_greater #r > x
  286. bgt $s7, $s6, r_greater #err > y
  287. b end_if
  288.  
  289. rl_greater:
  290. addi $s2, $s2, 1 # ++x
  291. move $t4, $s2
  292. sll $t4, $t4, 1 # t4 = ++x*2
  293. addi $t4, $t4, 1 # t4 = ++x*2+1
  294. add $s7, $s7, $t4 # err += t4
  295.  
  296. endl_if:
  297. b bloop_begin
  298. ##############################################################
  299.  
  300.  
  301.  
  302. ####################################################
  303.  
  304.  
  305.  
  306. ############### set pixel function ##################
  307. set_pixel:
  308. move_up:
  309. beqz $a1, move_right
  310. subi $a1, $a1, 1
  311. add $t1, $t1, $t7
  312.  
  313. b move_up
  314.  
  315. move_right:
  316. beqz $a0, end_s
  317. subi $a0, $a0, 1
  318. addi $t1, $t1, 3
  319.  
  320. b move_right
  321. end_s:
  322. li $t4, 0xff
  323. sb $t4, ($t1)
  324. jr $ra
  325. #########################################################
  326.  
  327. end_all:
  328. ##############################
  329. #otworz drugi
  330. li $v0, 13
  331. la $a0, outputFile
  332. li $a1, 1
  333. li $a2, 0
  334. syscall
  335.  
  336. move $t0, $v0
  337. #zapisz header
  338. move $a0, $t0
  339. la $a1, header
  340. li $a2, 54
  341. li $v0, 15
  342. syscall
  343.  
  344. #zapisz buffer2
  345. move $a0, $t0
  346. la $a1, ($s1) #### tu zmieniæ na t9
  347. move $a2, $t5
  348. li $v0, 15
  349. syscall
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement