Advertisement
Guest User

Untitled

a guest
Nov 24th, 2014
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.81 KB | None | 0 0
  1. .data
  2.  
  3. komendy_txt: .asciiz "turtle.txt" #
  4. komendy_space: .space 4048 #
  5.  
  6. bitmapa: .asciiz "turtle.bmp" #
  7.  
  8. x: .word 0
  9. naglowek: .space 54
  10.  
  11. bfType: .half 0x4d42 # pocżatek nagłówka
  12. bfSize: .word 57654 #
  13. bfReserved1: .half 0 #
  14. bfReserved2: .half 0 #
  15. bfOffBits: .word 54 #
  16.  
  17. biSize: .word 40 #
  18. biWidth: .word 160 #
  19. biHeight: .word 120 #
  20. biPlanes: .half 1 #
  21. biBitCount: .half 24 #
  22. biCompression: .word 0 #
  23. biSizeImage: .word 0 #
  24. biXPelsPerMeter:.word 0 #
  25. biYPelsPerMeter:.word 0 #
  26. biClrUsed: .word 0 #
  27. biClrImportant: .word 0 #
  28.  
  29. buf: .space 57600 # 160x120, 3 bajty na 1 piksel
  30.  
  31. ustaw: .asciiz "ustaw"
  32. podnies: .asciiz "podnies"
  33. opusc: .asciiz "opusc"
  34. naprzod: .asciiz "naprzod"
  35. obrot: .asciiz "obrot"
  36.  
  37. # sinusy i cosinusy z zakresu
  38. sinus: .word 0, 175, 349, 523, 698, 872, 1045, 1219, 1392, 1564, 1736, 1908, 2079, 2250, 2419, 2588, 2756, 2924, 3090, 3256, 3420, 3584, 3746, 3907, 4067, 4226, 4384, 4540, 4695, 4848, 5000, 5150, 5299, 5446, 5592, 5736, 5878, 6018, 6157, 6293, 6428, 6561, 6691, 6820, 6947, 7071, 7193, 7314, 7431, 7547, 7660, 7771, 7880, 7986, 8090, 8192, 8290, 8387, 8482, 8572, 8660, 8746, 8829, 8910, 8988, 9063, 9135, 9205, 9272, 9336, 9397, 9455, 9511, 9563, 9613, 9659, 9703, 9744, 9781, 9816, 9848, 9877, 9903, 9925, 9945, 9962, 9976, 9986, 9994, 9998
  39. cosinus: .word 10000, 9998, 9994, 9986, 9976, 9962, 9945, 9925, 9903, 9877, 9848, 9816, 9781, 9744, 9703, 9659, 9613, 9563, 9511, 9455, 9397, 9336, 9272, 9205, 9135, 9063, 8988, 8910, 8829, 8746, 8660, 8572, 8482, 8387, 8290, 8192, 8090, 7986, 7880, 7771, 7660, 7547, 7431, 7314, 7193, 7071, 6947, 6820, 6691, 6561, 6428, 6293, 6157, 6018, 5878, 5736, 5592, 5446, 5299, 5150, 5000, 4848, 4695, 4540, 4384, 4226, 4067, 3907, 3746, 3584, 3420, 3256, 3090, 2924, 2756, 2588, 2419, 2250, 2079, 1908, 1736, 1564, 1392, 1219, 1045, 872, 698, 523, 349, 175
  40.  
  41. .text
  42.  
  43. main:
  44.  
  45. #--------ODCZYT Z PLIKU TXT------------------------------------
  46.  
  47. #otwarcie pliku
  48. li $v0, 13
  49. la $a0, komendy_txt
  50. li $a1, 0
  51. li $a2, 0
  52. syscall
  53. move $t0, $v0
  54.  
  55. #odczyt danych z pliku
  56. li $v0, 14
  57. move $a0, $t0
  58. la $a1, komendy_space
  59. li $a2, 4048
  60. syscall
  61.  
  62. #zamkniecie pliku
  63. li $v0, 16
  64. move $a0, $t0
  65. syscall
  66.  
  67. #--------WYPELNIANIE BITMAPY NA BIALO-------------------------------
  68.  
  69. li $t0, 0xFFFFFFFF
  70. la $t2, buf
  71. move $t1, $t2
  72. add $t1, $t1, 57600
  73. zamaluj:
  74. sw $t0, 0($t2)
  75. add $t2, $t2, 4
  76. blt $t2, $t1, zamaluj
  77.  
  78. #------------------------------------------------------------------
  79.  
  80. li $s1, 0 #x
  81. li $s2, 0 #y
  82. li $s3, 0 #kat
  83. li $s4, 0 #ruch
  84. li $s5, 0 #podniesione/opusczone - 0=podniesione
  85.  
  86. #--------USTALANIE KOMENDY----------------------------------------
  87.  
  88. # $t0 - adres danych z pliku .txt
  89. # $t1 - słowo z pod adresu ($t0)
  90. # $t2 - adres komendy
  91. # $t3 - słowo z pod adresu ($t2)
  92. # $t4 - znak spacji
  93. # $s0 - adres poczatku komendy (z pliku .txt)
  94.  
  95. la $t0, komendy_space
  96. move $s0, $t0
  97.  
  98. ustal_komende:
  99. lb $t1, 0($s0)
  100. beqz $t1, exit
  101. move $t0, $s0
  102. la $t2, ustaw
  103.  
  104. ustal_komende_ustaw:
  105. lb $t1, 0($t0)
  106. lb $t3, 0($t2)
  107. addiu $t0, $t0, 1
  108. addiu $t2, $t2, 1
  109. beq $t1, ' ', komenda_ustaw
  110. beq $t1, $t3, ustal_komende_ustaw
  111.  
  112. move $t0, $s0
  113. la $t2, podnies
  114.  
  115. ustal_komende_podnies:
  116. lb $t1, 0($t0)
  117. lb $t3, 0($t2)
  118. addiu $t0, $t0, 1
  119. addiu $t2, $t2, 1
  120. beq $t1, ';', komenda_podnies
  121. beq $t1, $t3, ustal_komende_podnies
  122.  
  123. move $t0, $s0
  124. la $t2, opusc
  125.  
  126. ustal_komende_opusc:
  127. lb $t1, 0($t0)
  128. lb $t3, 0($t2)
  129. addiu $t0, $t0, 1
  130. addiu $t2, $t2, 1
  131. beq $t1, ';', komenda_opusc
  132. beq $t1, $t3, ustal_komende_opusc
  133.  
  134. move $t0, $s0
  135. la $t2, naprzod
  136.  
  137. ustal_komende_naprzod:
  138. lb $t1, 0($t0)
  139. lb $t3, 0($t2)
  140. addiu $t0, $t0, 1
  141. addiu $t2, $t2, 1
  142. beq $t1, ' ', komenda_naprzod
  143. beq $t1, $t3, ustal_komende_naprzod
  144.  
  145. move $t0, $s0
  146. la $t2, obrot
  147.  
  148. ustal_komende_obrot:
  149. lb $t1, 0($t0)
  150. lb $t3, 0($t2)
  151. addiu $t0, $t0, 1
  152. addiu $t2, $t2, 1
  153. beq $t1, ' ', komenda_obrot
  154. beq $t1, $t3, ustal_komende_obrot
  155.  
  156. b exit
  157.  
  158. #-------ODCZYTYWANIE ARGUMENTOW---------------------------
  159.  
  160. odczyt_argumentow:
  161. li $t3, 0
  162. odczyt_argumentow_loop:
  163. lb $t1, 0($t0)
  164. lb $t2, 1($t0)
  165. sub $t1, $t1, '0'
  166. add $t3, $t3, $t1
  167. addiu $t0, $t0, 1
  168. beq $t2, ';', argument_odczytany
  169. beq $t2, ']', argument_odczytany
  170. beq $t2, ',', argument_odczytany
  171. mul $t3, $t3, 10
  172. b odczyt_argumentow_loop
  173.  
  174. argument_odczytany:
  175. jr $ra
  176.  
  177. #---------KOMENDY----------------------------------
  178. komenda_ustaw:
  179. addiu $t0, $t0, 1
  180. jal odczyt_argumentow
  181. move $s1, $t3
  182.  
  183. addiu $t0, $t0, 1
  184. jal odczyt_argumentow
  185. move $s2, $t3
  186.  
  187. addiu $t0, $t0, 3
  188. jal odczyt_argumentow
  189. move $s3, $t3
  190.  
  191. add $t0, $t0, 3
  192. move $s0, $t0
  193.  
  194. beqz $s5, podniesione
  195. jal zamaluj_pixel
  196. podniesione:
  197.  
  198. b ustal_komende
  199.  
  200. komenda_podnies:
  201. add $t0, $t0, 2
  202. move $s0, $t0
  203.  
  204. li $s5, 0
  205.  
  206. b ustal_komende
  207.  
  208. komenda_opusc:
  209. add $t0, $t0, 2
  210. move $s0, $t0
  211.  
  212. li $s5, 1
  213. jal zamaluj_pixel
  214.  
  215. b ustal_komende
  216.  
  217. komenda_naprzod:
  218. jal odczyt_argumentow
  219. move $s4, $t3
  220.  
  221. add $t0, $t0, 3
  222. move $s0, $t0
  223.  
  224. jal wyznacz_wspolrzedne
  225. bnez $s5, algorytm_Bresenhama
  226. jal przemieszczenie_bez_rysowania
  227.  
  228. b ustal_komende
  229.  
  230. komenda_obrot:
  231. jal odczyt_argumentow
  232. add $s3, $s3, $t3
  233.  
  234. add $t0, $t0, 3
  235. move $s0, $t0
  236.  
  237. b ustal_komende
  238.  
  239. #-----------------------------------------------------------
  240.  
  241. wyznacz_wspolrzedne:
  242. wyznacz_kat:
  243. beq $s3, 0, rowny_0
  244. blt $s3, 90, mniejszy_90
  245. beq $s3, 90, rowny_90
  246. blt $s3, 180, mniejszy_180
  247. beq $s3, 180, rowny_180
  248. blt $s3, 270, mniejszy_270
  249. beq $s3, 270, rowny_270
  250. blt $s3, 360, mniejszy_360
  251. beq $s3, 360, rowny_0
  252. add, $s3, $s3, -360
  253. b wyznacz_kat
  254.  
  255. mniejszy_90:
  256. la $t9, sinus
  257. la $t8, cosinus
  258. mul $t7, $s3, 4
  259. add $t9, $t9, $t7
  260. add $t8, $t8, $t7
  261. lw $t0, 0($t9) # sinus
  262. lw $t1, 0($t8) # cosinus
  263. mul $t0, $t0, $s4 # sinus * r
  264. mul $t1, $t1, $s4 # cosinus * r
  265. div $t0, $t0, 10000 # y
  266. div $t1, $t1, 10000 # x
  267. add $s6, $s1, $t1 # x2
  268. add $s7, $s2, $t0 # y2
  269. jr $ra
  270.  
  271. mniejszy_180:
  272. la $t9, sinus
  273. la $t8, cosinus
  274. move $t7, $s3
  275. add $t7, $t7, -90
  276. mul $t7, $t7, 4
  277. add $t9, $t9, $t7
  278. add $t8, $t8, $t7
  279. lw $t0, 0($t9) # sinus
  280. lw $t1, 0($t8) # cosinus
  281. mul $t0, $t0, $s4 # sinus * r
  282. mul $t1, $t1, $s4 # cosinus * r
  283. div $t0, $t0, 10000 # x
  284. div $t1, $t1, 10000 # y
  285. sub $s6, $s1, $t0 # x2
  286. add $s7, $s2, $t1 # y2
  287. jr $ra
  288.  
  289. mniejszy_270:
  290. la $t9, sinus
  291. la $t8, cosinus
  292. move $t7, $s3
  293. add $t7, $t7, -180
  294. mul $t7, $t7, 4
  295. add $t9, $t9, $t7
  296. add $t8, $t8, $t7
  297. lw $t0, 0($t9) # sinus
  298. lw $t1, 0($t8) # cosinus
  299. mul $t0, $t0, $s4 # sinus * r
  300. mul $t1, $t1, $s4 # cosinus * r
  301. div $t0, $t0, 10000 # y
  302. div $t1, $t1, 10000 # x
  303. sub $s6, $s1, $t1 # x2
  304. sub $s7, $s2, $t0 # y2
  305. jr $ra
  306.  
  307. mniejszy_360:
  308. la $t9, sinus
  309. la $t8, cosinus
  310. move $t7, $s3
  311. add $t7, $t7, -270
  312. mul $t7, $t7, 4
  313. add $t9, $t9, $t7
  314. add $t8, $t8, $t7
  315. lw $t0, 0($t9) # sinus
  316. lw $t1, 0($t8) # cosinus
  317. mul $t0, $t0, $s4 # sinus * r
  318. mul $t1, $t1, $s4 # cosinus * r
  319. div $t0, $t0, 10000 # x
  320. div $t1, $t1, 10000 # y
  321. add $s6, $s1, $t0 # x2
  322. sub $s7, $s2, $t1 # y2
  323. jr $ra
  324.  
  325. rowny_0:
  326. add $s6, $s1, $s4
  327. move $s7, $s2
  328. jr $ra
  329. rowny_90:
  330. move $s6, $s1
  331. add $s7, $s2, $s4
  332. jr $ra
  333. rowny_180:
  334. sub $s6, $s1, $s4
  335. move $s7, $s2
  336. jr $ra
  337. rowny_270:
  338. move $s6, $s1
  339. sub $s7, $s2, $s4
  340. jr $ra
  341.  
  342. #-----------------------------------------------------------------------
  343.  
  344. # $t8 = kx
  345. # $t9 = ky
  346. # $t6 = dx
  347. # $t7 = dy
  348. # $t5 = e
  349.  
  350. algorytm_Bresenhama:
  351. ble $s1, $s6, kx_dodatnie # x1 <= x2
  352. li $t8, -1 # ky = -1
  353. sub $t6, $s1, $s6 # dx = x1 - x2
  354. b k02
  355. kx_dodatnie: li $t8, 1 # ky = 1
  356. sub $t6, $s6, $s1 # dx = x2 - x1
  357.  
  358. k02:
  359. ble $s2, $s7, ky_dodatnie # y1 <= y2
  360. li $t9, -1 # ky = -1
  361. sub $t7, $s2, $s7 # dy = y1 - y2
  362. b k05
  363. ky_dodatnie: li $t9, 1 # ky = 1
  364. sub $t7, $s7, $s2 # dy = y2 - y1
  365. k05:
  366. jal zamaluj_pixel
  367.  
  368. ble $t6, $t7, przestawione
  369.  
  370. div $t5, $t6, 2
  371.  
  372. petla_k09_k14: # powtarzaj dx razy
  373. bne $s1, $s6, k09 # x1 != x2
  374. beq $s2, $s7, koniec_malowania # y1 = y2
  375.  
  376. k09:
  377. add $s1, $s1, $t8 # x1 = x1 + kx
  378. bgez $s1, x1_wiekszy_0
  379. add $s1, $s1, 160
  380. add $s6, $s6, 160
  381. x1_wiekszy_0:
  382. ble $s1, 159, x1_mniejszy_159
  383. sub $s1, $s1, 160
  384. sub $s6, $s6, 160
  385. x1_mniejszy_159:
  386. sub $t5, $t5, $t7 # e = e - dy
  387. bgez $t5, k14 # e >= 0
  388. add $s2, $s2, $t9 # y1 = y1 + ky
  389. bgez $s2, y1_wiekszy_0
  390. add $s2, $s2, 120
  391. add $s7, $s7, 120
  392. y1_wiekszy_0:
  393. ble $s2, 119, y1_mniejszy_159
  394. sub $s2, $s2, 120
  395. sub $s7, $s7, 120
  396. y1_mniejszy_159:
  397. add $t5, $t5, $t6 # e = e + dx
  398.  
  399. k14:
  400. jal zamaluj_pixel
  401. b petla_k09_k14
  402.  
  403. przestawione:
  404. div $t5, $t7, 2
  405.  
  406. petla_k18_k23: # powtarzaj dx razy
  407. bne $s1, $s6, k18 # x1 != x2
  408. beq $s2, $s7, koniec_malowania # y1 = y2
  409.  
  410. k18:
  411. add $s2, $s2, $t9 # y1 = y1 + ky
  412. bgez $s2, przest_y1_wiekszy_0
  413. add $s2, $s2, 120
  414. add $s7, $s7, 120
  415. przest_y1_wiekszy_0:
  416. ble $s2, 119, przest_y1_mniejszy_159
  417. sub $s2, $s2, 120
  418. sub $s7, $s7, 120
  419. przest_y1_mniejszy_159:
  420. sub $t5, $t5, $t6 # e = e - dx
  421. bgez $t5, k23 # e >= 0
  422. add $s1, $s1, $t8 # x1 = x1 + kx
  423. bgez $s1, przest_x1_wiekszy_0
  424. add $s1, $s1, 160
  425. add $s6, $s6, 160
  426. przest_x1_wiekszy_0:
  427. ble $s1, 159, przest_x1_mniejszy_159
  428. sub $s1, $s1, 160
  429. sub $s6, $s6, 160
  430. przest_x1_mniejszy_159:
  431. add $t5, $t5, $t7 # e = e + dy
  432.  
  433. k23:
  434. jal zamaluj_pixel
  435. b petla_k18_k23
  436.  
  437. koniec_malowania:
  438. b ustal_komende
  439.  
  440. #-------------------------------------------------------
  441.  
  442. zamaluj_pixel:
  443. la $t0, buf
  444. li $t1, 0
  445.  
  446. move $t2, $s2 # ( 160 * y + x ) * 3
  447. mul $t2, $t2, 160
  448. add $t2, $t2, $s1
  449. mul $t2, $t2, 3
  450.  
  451. add $t0, $t2, $t0 # pixel na czarno
  452. sb $t1, 0($t0)
  453. sb $t1, 1($t0)
  454. sb $t1, 2($t0)
  455.  
  456. jr $ra
  457.  
  458. #-------ZAPIS BITMAPY DO PLIKU I ZAMKNIECIE PROGRAMU---------
  459.  
  460. przemieszczenie_bez_rysowania:
  461. zmienna_x2:
  462. bgez $s6, x2_wieksze_0
  463. add $s6, $s6, 160
  464. b zmienna_x2
  465. x2_wieksze_0:
  466. ble $s6, 159, zmienna_y2
  467. sub $s6, $s6, 160
  468. b zmienna_x2
  469. zmienna_y2:
  470. bgez $s7, y2_wieksze_0
  471. add $s7, $s7, 120
  472. b zmienna_y2
  473. y2_wieksze_0:
  474. ble $s6, 119, x2_y2_poprawne
  475. sub $s6, $s6, 160
  476. b zmienna_y2
  477. x2_y2_poprawne:
  478. move $s1, $s6
  479. move $s2, $s7
  480. jr $ra
  481.  
  482. #-----------------------------------------------------------
  483.  
  484. exit:
  485.  
  486. #utworzenie pliku bmp
  487. li $v0, 13
  488. la $a0, bitmapa
  489. li $a1, 1
  490. li $a2, 0
  491. syscall
  492. move $t0, $v0
  493.  
  494. #zapis naglowka
  495. li $v0, 15
  496. move $a0, $t0
  497. la $a1, bfType
  498. li $a2, 54
  499. syscall
  500.  
  501. #zapis danych z pamięci do pliku
  502. li $v0, 15
  503. move $a0, $t0
  504. la $a1, buf
  505. li $a2, 57600
  506. syscall
  507.  
  508. #zamkniecie pliku bmp
  509. move $a0, $t0
  510. li $v0, 16
  511. syscall
  512.  
  513. #zamkniecie programu
  514. li $v0, 10
  515. syscall
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement