Advertisement
Guest User

Untitled

a guest
Jun 29th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.10 KB | None | 0 0
  1. .data
  2. baseadd: .word 0xff000000
  3. coordinates: .word 4, 10 , 23, 10 , 9 , 260, 9 , 260 ,230
  4. cor: 0x00
  5. reta1: .word 30, 120, 160, 20
  6. reta2: .word 160, 20, 290, 120
  7. reta3: .word 290, 120, 160, 220
  8. reta4: .word 160, 220, 30, 120
  9. reta5: .word 110,120,210,120
  10. reta6: .word 160,20,160,220
  11. reta7: .word 110,59,110,182
  12. reta8: .word 210,59,210,182
  13. reta9: .word 30,120,290,120
  14. butaolines: .word 0, 239, 319, 0
  15. butaolines2: .word 40, 180, 280, 60
  16. usalines: .word 0,0,319,0
  17. usalines2: .word 160,0,160,18
  18. cords: .word 5, 20, 20, 1,200, 120, 200, 120, 20 , 80,140
  19. .text
  20. j main
  21.  
  22.  
  23. funcao_ponto:
  24. # $a0 = x, $a1 = y
  25.  
  26. #Uso do t0(variaveis) e t1(endere?o)
  27.  
  28. move $s6,$a1
  29. lw $t1,baseadd #retorno recebe end base
  30. #mul $t0,$t0,320 # y *= 320
  31. addi $at, $zero, 320
  32. mult $s6, $at
  33. mflo $s6
  34. add $t1,$t1,$s6
  35. move $s6,$a0 #reg reusado
  36. add $t1,$t1,$s6
  37. sb $a2,0($t1)
  38.  
  39. jr $ra
  40. nop
  41.  
  42.  
  43. funcao_reta:
  44. #a0 = Endereco das coordenadas
  45. #a2 = cor
  46. #t6 = x0 t7=y0 t8=x1 t9=y1
  47. #t0 = dx, t1 = dy, t2 = sx, t3 = sy, t4=err, t5 = e2
  48.  
  49. lw $t6, 0($a0)
  50. lw $t7, 4($a0)
  51. lw $t8, 8($a0)
  52. lw $t9, 12($a0)
  53.  
  54.  
  55. move $t2,$a0
  56. addi $s7,$ra,0
  57. sub $t0,$t8,$t6
  58. addi $t1,$0, 2
  59. move $t3,$t2
  60. move $a0,$t2
  61.  
  62. if_fr_1:
  63. bgt $t0,$zero,else_fr_1
  64. #mul $t0,$t0,-1 #Se s0 negativo troque o sinal
  65. addi $at, $0, -1
  66. nop
  67. mult $t0, $at
  68. nop
  69. mflo $t0
  70.  
  71. addi $t2,$0, -1 #sx = negativo
  72. j endif_fr_1
  73. nop
  74. else_fr_1:
  75. addi $t2,$0, 1 #se s0 pos, dx = 1
  76. endif_fr_1:
  77.  
  78. sub $t1,$t9,$t7 # dy = y1 - y0
  79. nop
  80. if_fr_2:
  81. bgt $t1,$zero,else_fr_2
  82. #mul $t1,$t1,-1 #Se s1 negativo troque o sinal
  83. addi $at, $0, -1
  84. nop
  85. mult $t1, $at
  86. nop
  87. mflo $t1
  88. addi $t3,$0, -1 #dy negativo
  89. j endif_fr_2
  90. nop
  91. else_fr_2:
  92. addi $t3,$0, 1 #se s3 positivo, dy = 1
  93. endif_fr_2:
  94.  
  95. if_fr_3:
  96. bgt $t0,$t1,else_fr_3 #se dx>dy
  97. #mul $t4,$t1,-1 #err = (-dy)
  98. addi $at, $0, -1
  99. nop
  100. mult $t4, $at
  101. nop
  102. mflo $t4
  103. j endif_fr_3
  104. nop
  105. else_fr_3:
  106. move $t4,$t0 #err = dx
  107. endif_fr_3:
  108.  
  109. #div $t4,$t4,2 # err = err/2
  110. sra $t4,$t4,2
  111.  
  112. while_fr_1:
  113. #sw $zero,0($zero)
  114. addi $a0, $t6, 0
  115. addi $a1, $t7, 0
  116. addi $s5, $t1, 0
  117. jal funcao_ponto
  118. nop
  119. addi $t1, $s5, 0
  120.  
  121. bne $t6, $t8, neq_fr_1 # if (x0 == x1 && y0 == y1) break;
  122. bne $t7, $t9, neq_fr_1 # if (x0 == x1 && y0 == y1) break;
  123. j ew_fr_1
  124.  
  125. neq_fr_1:
  126. add $t5, $t4, $zero
  127.  
  128. if_fr_4:
  129. #mul $t0, $t0, -1
  130. addi $at, $0, -1
  131. nop
  132. mult $t0, $at
  133. nop
  134. mflo $t0
  135. nop
  136. ble $t5, $t0, endif_fr_4
  137. sub $t4, $t4, $t1
  138. add $t6, $t6, $t2
  139. endif_fr_4:
  140. #mul $t0, $t0, -1
  141. addi $at, $0, -1
  142. nop
  143. mult $t0, $at
  144. nop
  145. mflo $t0
  146. nop
  147. if_fr_5:
  148. bge $t5, $t1, endif_fr_5
  149. add $t4, $t4, $t0
  150. add $t7, $t7, $t3
  151. endif_fr_5:
  152. j while_fr_1
  153. ew_fr_1:
  154. addi $ra,$s7,0
  155. nop
  156. nop
  157. jr $ra
  158. nop
  159. endreta:
  160.  
  161. preenche:
  162. # $a0 = x, $a1 = y, $a2 = cor
  163. addi $sp,$sp,-4
  164. addi $s7,$ra,0
  165.  
  166. la $t0,baseadd
  167. nop
  168. lw $t0,0($t0)
  169. nop
  170. add $t0,$t0,$a0
  171. nop
  172. #mul $a1,$a1,320
  173. addi $at, $0, 320
  174. nop
  175. mult $a1, $at
  176. nop
  177. mflo $a1
  178. nop
  179. add $t0,$t0,$a1
  180.  
  181. move $t1,$sp
  182. move $t2,$sp
  183. lb $t4,0($t0)
  184. nop
  185. beq $t4,$a2,endpreenche
  186. sb $a2,0($t0)
  187. sw $t0,0($t1)
  188. subi $t1,$t1,4
  189. # $t2 inicio da fila,$t1 fim da fila
  190. # $t5, $t6, $t7 e $s1 limites do bitmap
  191. li $t5, 0xff000000
  192. li $t6, 0xff012C00
  193. addi $t7,$0, 320
  194. addi $t9,$0, 319
  195. bfs:
  196. beq $t1,$sp,endpreenche
  197. addi $t1,$t1,4
  198. nop
  199. lw $t0,0($t1)
  200. #blt $t1,0x10010000,er
  201. # atualiza o ponteiro da fila
  202. divu $t0,$t7
  203. nop
  204. # coloca na fila os enderecos adjacentes a $t0
  205. addi $t0,$t0,1
  206. mfhi $t3
  207. nop
  208. beq $t3,$t9,left
  209. lb $t3,0($t0)
  210. nop
  211. bne $t3,$t4,left
  212. sb $a2,0($t0)
  213. sw $t0,0($t1)
  214. addi $t1,$t1,-4
  215. left: mfhi $t3
  216. addi $t0,$t0,-2
  217. beq $t3,$zero,down
  218. lb $t3,0($t0)
  219. nop
  220. bne $t3,$t4,down
  221. sb $a2,0($t0)
  222. sw $t0,0($t1)
  223. addi $t1,$t1,-4
  224. down: addi $t0,$t0,321
  225. nop
  226. bgt $t0,$t6,up
  227. lb $t3,0($t0)
  228. nop
  229. bne $t3,$t4,up
  230. sb $a2,0($t0)
  231. sw $t0,0($t1)
  232. addi $t1,$t1,-4
  233. up: addi $t0,$t0,-640
  234. nop
  235. bltu $t0,$t5,bfs
  236. lb $t3,0($t0)
  237. nop
  238. bne $t3,$t4,bfs
  239. sb $a2,0($t0)
  240. sw $t0,0($t1)
  241. addi $t1,$t1,-4
  242.  
  243. j bfs
  244. nop
  245. endpreenche:
  246. addi $ra,$s7,0
  247. addi $sp,$sp,4
  248. jr $ra
  249. nop
  250.  
  251. circulo:
  252. # a0 = centro x, a1 = centro y, a2 = cor , a3 = raio
  253. # guarda na pilha registradores preservados que serao utilizados
  254. addi $sp,$sp,-24
  255. addi $s7,$ra,0
  256. sw $s0,4($sp)
  257. sw $s1,8($sp)
  258. sw $s2,12($sp)
  259. sw $s3,16($sp)
  260. sw $s4,20($sp)
  261. sw $s5,0($sp)
  262.  
  263. move $s0,$a0
  264. move $s1,$a1
  265.  
  266. addi $v0,$0, 0
  267. add $a0,$s0,$a3
  268. add $a1,$s1,$a3
  269.  
  270. sub $a0, $s0,$a3
  271. sub $a1, $s1,$a3
  272.  
  273. move $a0,$s0
  274. move $a1,$s1
  275.  
  276. add $s0,$zero,$zero # y inicial
  277. add $s1,$zero,$a3 # x inicial
  278. add $s2,$zero,$zero # erro
  279. add $s3,$zero,$a1 # y
  280. add $s4,$zero,$a0 # x
  281. addi $s5,$0, 320
  282. #mul $a3,$a3,$a3 # raio = raio ao quadrado
  283. mult $a3, $a3
  284. nop
  285. mflo $a3
  286. circloop:
  287. blt $s1,$s0,endcirculo
  288. # colocar pontos simetricamente nos oito octantes do circulo
  289. add $a0,$s4,$s1
  290. add $a1,$s3,$s0
  291. jal funcao_ponto
  292. nop
  293.  
  294. add $a0,$s4,$s0
  295. add $a1,$s3,$s1
  296. jal funcao_ponto
  297. nop
  298.  
  299. sub $a0,$s4,$s0
  300. add $a1,$s3,$s1
  301. jal funcao_ponto
  302. nop
  303.  
  304. sub $a0,$s4,$s1
  305. add $a1,$s3,$s0
  306. jal funcao_ponto
  307. nop
  308.  
  309. sub $a0,$s4,$s1
  310. sub $a1,$s3,$s0
  311. jal funcao_ponto
  312. nop
  313.  
  314. sub $a0,$s4,$s0
  315. sub $a1,$s3,$s1
  316. jal funcao_ponto
  317. nop
  318.  
  319. add $a0,$s4,$s0
  320. sub $a1,$s3,$s1
  321. jal funcao_ponto
  322. nop
  323.  
  324. add $a0,$s4,$s1
  325. sub $a1,$s3,$s0
  326. jal funcao_ponto
  327. nop
  328.  
  329. addi $s0,$s0,1 # incrementa o y
  330. nop
  331.  
  332. #mul $t0,$s0,$s0
  333. mult $s0, $s0
  334. nop
  335. mflo $t0
  336. #mul $t1,$s1,$s1
  337. mult $s1, $s1
  338. nop
  339. mflo $t1
  340. nop
  341. add $t1,$t0,$t1
  342. nop
  343. sub $t2,$t1,$a3 # salva em $t2 o valor y^2 + x^2 - r^2
  344.  
  345. addi $t1,$s1,-1
  346. nop
  347. #mul $t1,$t1,$t1
  348. mult $t1, $t1
  349. nop
  350. mflo $t1
  351. nop
  352. add $t1,$t0,$t1
  353. nop
  354. sub $t3,$t1,$a3 # salva em $t3 o valor y^2 + (x-1)^2 - r^2
  355.  
  356. abs $t2,$t2
  357. abs $t3,$t3
  358.  
  359. nop
  360. blt $t2,$t3,circloop # caso o valor de $t3 seja mais proximo de 0, x recebe x - 1, caso contratio x matem seu valor
  361. addi $s1,$s1,-1
  362. nop
  363. j circloop
  364. nop
  365. errocirc:
  366. endcirculo:
  367. # recuperar da pilha registradores preservados utilizados
  368. addi $ra,$s7,0
  369. lw $s0,4($sp)
  370. lw $s1,8($sp)
  371. lw $s2,12($sp)
  372. lw $s3,16($sp)
  373. lw $s4,20($sp)
  374. lw $s5,0($sp)
  375. addi $sp,$sp,24
  376. nop
  377. jr $ra
  378. nop
  379.  
  380.  
  381. main:
  382. sw $zero,0($zero)
  383. # japao
  384. # pinta a tela de verde
  385. addi $t0,$0, 0xff000000
  386. addi $t1,$0, 0xff012c00
  387. addi $a2,$0, 0xffffffff
  388. tela:
  389. beq $t0,$t1,ee
  390. sw $a2,0($t0)
  391. addi $t0,$t0,4
  392. j tela
  393. ee:
  394. addi $a2,$0, 0x07
  395. addi $a0,$0, 160
  396. addi $a1,$0, 120
  397. addi $a3,$0, 50
  398. jal circulo
  399. la $a0,reta5
  400. addi $a2,$zero,0x07
  401. jal funcao_reta
  402. addi $a0,$0, 160
  403. addi $a1,$0, 119
  404. addi $a2,$0, 0x07
  405. jal preenche
  406. addi $a0,$0, 160
  407. addi $a1,$0, 121
  408. addi $a2,$0, 0x07
  409. jal preenche
  410.  
  411. # Sleep so the image lasts for a second
  412. #addi $a0, $0, 2000
  413. #addi $v0, $0, 32
  414. #syscall
  415. #############################
  416.  
  417. sw $zero,0($zero)
  418. # brasil
  419. brasa:
  420. # pinta a tela de verde
  421. addi $t0,$0, 0xff000000
  422. addi $t1,$0, 0xff012c00
  423. addi $a2,$0, 0x70707070
  424. tela2:
  425. beq $t0,$t1,eee
  426. sw $a2,0($t0)
  427. addi $t0,$t0,4
  428. j tela2
  429. eee:
  430. # losango br
  431.  
  432.  
  433.  
  434. la $a0, reta7
  435. addi $a2, $0, 0x3f
  436. jal funcao_reta
  437. la $a0, reta8
  438. addi $a2, $0, 0x3f
  439. jal funcao_reta
  440. la $a0, reta9
  441. addi $a2, $0, 0x3f
  442. jal funcao_reta
  443. la $a0, reta1
  444. addi $a2, $0, 0x3f
  445. jal funcao_reta
  446. la $a0, reta2
  447. addi $a2, $0, 0x3f
  448. jal funcao_reta
  449. la $a0, reta3
  450. addi $a2, $0, 0x3f
  451. jal funcao_reta
  452. la $a0, reta4
  453. addi $a2, $0, 0x3f
  454. jal funcao_reta
  455. la $a0, reta6
  456. addi $a2, $0, 0x3f
  457. jal funcao_reta
  458.  
  459. #la $a0,losangobrasil
  460. #addi $a2,$0, 0x3f
  461. #jal funcao_poligono
  462. addi $a0,$0, 159
  463. addi $a1,$0, 119
  464. addi $a2,$0, 0x3f
  465. jal preenche
  466. addi $a0,$0, 159
  467. addi $a1,$0, 121
  468. addi $a2,$0, 0x3f
  469. jal preenche
  470. addi $a0,$0, 161
  471. addi $a1,$0, 119
  472. addi $a2,$0, 0x3f
  473. jal preenche
  474. addi $a0,$0, 161
  475. addi $a1,$0, 121
  476. addi $a2,$0, 0x3f
  477. jal preenche
  478. addi $a0,$0, 40
  479. addi $a1,$0, 123
  480. addi $a2,$0, 0x3f
  481. jal preenche
  482. addi $a0,$0, 32
  483. addi $a1,$0, 119
  484. addi $a2,$0, 0x3f
  485. jal preenche
  486. addi $a0,$0, 288
  487. addi $a1,$0, 121
  488. addi $a2,$0, 0x3f
  489. jal preenche
  490. addi $a0,$0, 280
  491. addi $a1,$0, 117
  492. addi $a2,$0, 0x3f
  493. jal preenche
  494. addi $a2,$0, 0x88
  495. addi $a0,$0, 160
  496. addi $a1,$0, 120
  497. addi $a3,$0, 50
  498. jal circulo
  499. la $a0,reta5
  500. addi $a2,$zero,0x88
  501. jal funcao_reta
  502. addi $a0,$0, 160
  503. addi $a1,$0, 119
  504. addi $a2,$0, 0x88
  505. jal preenche
  506. addi $a0,$0, 160
  507. addi $a1,$0, 121
  508. addi $a2,$0, 0x88
  509. jal preenche
  510.  
  511. # Sleep so the image lasts for a second
  512. #addi $a0, $0, 2000
  513. #addi $v0, $0, 32
  514. #syscall
  515.  
  516. #############################
  517. sw $zero,0($zero)
  518. # usa
  519.  
  520. # pinta a tela de verde
  521. addi $t0,$0, 0xff000000
  522. addi $t1,$0, 0xff012c00
  523. addi $a2,$0, 0x07070707
  524. tela3:
  525. beq $t0,$t1,eeee
  526. sw $a2,0($t0)
  527. addi $t0,$t0,4
  528. j tela3
  529. eeee:
  530. # lines br
  531. addi $s0, $0, 12
  532. addi $s1, $0, 0
  533. loop32323:
  534. beq $s1, $s0, endloopppp
  535. la $a0, usalines
  536. lw $t2, 4($a0)
  537. lw $t3, 12($a0)
  538. addi $t2, $t2, 18
  539. addi $t3, $t3, 18
  540. sw $t2, 4($a0)
  541. sw $t3, 12($a0)
  542. la $a2, 0xff
  543. jal funcao_reta
  544.  
  545. la $a0, usalines2
  546. lw $t2, 4($a0)
  547. lw $t3, 12($a0)
  548. addi $t2, $t2, 18
  549. addi $t3, $t3, 18
  550. sw $t2, 4($a0)
  551. sw $t3, 12($a0)
  552. andi $a2,$s1,1
  553. bnez $a2,puli
  554. la $a2, 0xff
  555. jal funcao_reta
  556. puli:
  557.  
  558. addi $s1, $s1, 1
  559. j loop32323
  560. endloopppp:
  561. addi $s0, $0, 6
  562. addi $s1, $0, 0
  563. addi $s3, $0, 0
  564. addi $s4, $0, 0
  565. loop789:
  566. bge $s1, $s0, loope789
  567. add $a0, $s3, $0
  568. addi, $a1, $s4, 19
  569. addi $a2, $0, 0xff
  570. jal preenche
  571. addi $a0, $s3, 161
  572. addi, $a1, $s4, 19
  573. addi $a2, $0, 0xff
  574. jal preenche
  575.  
  576. addi $s1, $s1, 1
  577. addi $s4, $s4, 36
  578. j loop789
  579. loope789:
  580.  
  581. addi $t0,$0, 0xff000000
  582. addi $t1,$0, 0xff0000a0
  583. addi $t3,$0, 0xff009e20
  584. addi $a2,$0, 0x88888888
  585. tela5:
  586. beq $t1, $t3, eeeee
  587. tela4:
  588. beq $t0,$t1,eeede
  589. sw $a2,0($t0)
  590. addi $t0,$t0,4
  591. j tela4
  592. eeede:
  593. addi $t0, $t0, 160
  594. addi $t1, $t1, 320
  595. j tela5
  596. eeeee:
  597.  
  598.  
  599.  
  600. # Sleep so the image lasts for a second
  601. #addi $a0, $0, 2000
  602. #addi $v0, $0, 32
  603. #syscall
  604.  
  605. #######################################
  606.  
  607. # butao
  608.  
  609. sw $zero,0($zero)
  610. # pinta a tela de verde
  611. addi $t0,$0, 0xff000000
  612. addi $t1,$0, 0xff012c00
  613. addi $a2,$0, 0x07070707
  614. tela6:
  615. beq $t0,$t1,deeee
  616. sw $a2,0($t0)
  617. addi $t0,$t0,4
  618. j tela6
  619. deeee:
  620.  
  621. la $a0, butaolines
  622. addi $a2, $0, 0x1f
  623. jal funcao_reta
  624.  
  625. addi $a0, $0, 0
  626. addi $a1, $0, 0
  627. addi $a2, $0, 0x1f
  628. jal preenche
  629.  
  630. la $a0, butaolines2
  631. addi $a2, $0, 0xff
  632. jal funcao_reta
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement