Advertisement
Guest User

Untitled

a guest
Apr 24th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.28 KB | None | 0 0
  1. #ta funcionando no caso da q x0 < x1 e y0 > y1
  2. #no caso esse codigo prova isso
  3.  
  4. .data
  5. width: .word 320
  6. height: .word 240
  7. dois: .float 2.0
  8. zero: .float 0.0
  9. .text
  10.  
  11. main:
  12.  
  13.  
  14. li $a0, 20
  15. li $a1, 200
  16.  
  17. li $a2 , 100
  18. li $a3, 20
  19. jal desenhaReta
  20.  
  21. li $a0,100
  22. li $a1,20
  23.  
  24. li $a2,300
  25. li $a3,200
  26. jal desenhaReta
  27.  
  28. li $a0, 20
  29. li $a1,200
  30. li $a2,300
  31. li $a3,200
  32. jal desenhaReta
  33. li $v0,10
  34. syscall
  35.  
  36. #############################
  37. # Função que desenha a reta
  38. # Parametros : a0 : x0 , a1 : y0, a2:x1,a3:y1
  39. # VALOR DE RETORNO 1 sucesso, 0 falha. -> implementar ainda
  40. desenhaReta:
  41. #empilha
  42. addi $sp,$sp,-4
  43. sw $ra,0($sp)
  44.  
  45. #descobrir o quadrante
  46. slt $t8,$a0,$a2 # x < x1
  47. bne $t8,$zero, x0menorx1
  48. x0maiorx1:
  49. add $s5,$zero,$a0
  50. add $s6,$zero,$a1
  51.  
  52. add $a0,$a2,$zero
  53. add $a1,$a3,$zero
  54.  
  55. add $a2,$s5,$zero
  56. add $a3,$s6,$zero
  57.  
  58. x0menorx1:
  59. slt $t9,$a3,$a1 # if ( y1 < y0)?t0 = 1:0
  60. bne $t9,$zero,primeiroQuadrante # x < x1, y1 < y0
  61. j primQuadrInverti
  62.  
  63. primQuadrInverti:
  64. sub $t0, $a2,$a0 # dx t0 = a2 - a0
  65. sub $t1, $a3,$a1 # dy t1 = a3 - a1
  66.  
  67. mtc1 $t0, $f0 #f0 agora tem o valor de t0
  68. cvt.s.w $f0,$f0
  69. mtc1 $t1, $f1 #f1 agora tem o valor de t1
  70. cvt.s.w $f1,$f1
  71.  
  72. #pinta primeiro pixel, como o primeiro pixel vai ser o valor de a0,a1 e eles ja estao no lugar certo.
  73. #eh so chamar a função
  74. addi $sp,$sp,-8
  75. sw $t0,0($sp)
  76. sw $t1,4($sp)
  77. jal ponto
  78. lw $t0,0($sp)
  79. lw $t1,4($sp)
  80. addi $sp,$sp,8
  81.  
  82.  
  83.  
  84. # a partir daqui editar.
  85. #descobrir qual a direcao rapida.
  86. lwc1 $f10,dois #preciso do 2.0
  87. slt $at, $t0,$t1 # se t0 for menor que t1 , y é a direção rápida
  88.  
  89. bne $at, $zero, yehrapida1
  90.  
  91. xehrapida1:
  92. li $s2, 0 #vari aux dizendo que x é pos rapida
  93. div.s $f2, $f0,$f10 #F2 recebe o (erro) atual = direção rapida/ 2 nesse caso eh dx / 2 já q $f0 é dx nesse caso.
  94. j loop1
  95. yehrapida1:
  96. li $s2, 1 # vari aux dizendo que y é pos rápida
  97. div.s $f2, $f1,$f10 #F2 recebe o (erro) atual = direção rapida/ 2 nesse caso eh dy / 2 já q $f1 é dy nesse caso.
  98. j loop1
  99. #aqui que vai pintar os pontos.
  100. loop1:
  101.  
  102. #fazer sair do loop
  103. slt $at,$a2,$a0 # se x2 < x1 sai
  104. bne $at,$zero, saiDoLoop1
  105. slt $at,$a3,$a1 # se y1 < y0 sai do loop.
  106. bne $at,$zero,saiDoLoop1
  107.  
  108.  
  109.  
  110. #se nao saiu cont
  111. beq $s2,$zero,xPosRapida1 #checa qual eh a direcao rapida
  112. #caso y pos rapida
  113. addi $a1,$a1,1
  114. sub.s $f2,$f2, $f0 #aqui a pos rapida vai ser dy, fazemos erro - pos lenta no caso dx
  115. lwc1 $f10,zero
  116. c.lt.s $f2,$f10
  117. bc1t andoPosLentaX1
  118. j naoAndoNaPosLentaX1
  119. andoPosLentaX1:
  120. addi $a0,$a0,1
  121. add.s $f2,$f2,$f1 #erro + pos rapida
  122. jal ponto
  123. j loop1
  124. naoAndoNaPosLentaX1:
  125. jal ponto
  126. j loop1
  127.  
  128. xPosRapida1:
  129. addi $a0,$a0,1 # anda na pos rapida .
  130. sub.s $f2,$f2, $f1 # aqui a pos rapida é dx , fazemos erro - pos lenta no caso dy
  131. lwc1 $f10,zero
  132. c.lt.s $f2,$f10 # comparar se o erro eh negativo se f2 (erro ) < 0 (fp = 1)
  133. bc1t andoPosLentay1 #se o erro foi negativo anda na pos lenta no caso y
  134. j naoAndoPosLentay1
  135. andoPosLentay1:
  136. addi $a1,$a1,1
  137. add.s $f2,$f2,$f0
  138. jal ponto
  139. j loop1
  140. naoAndoPosLentay1:
  141. jal ponto
  142. j loop1
  143. saiDoLoop1:
  144. lw $ra,0($sp)
  145. addi $sp,$sp,4
  146. jr $ra
  147.  
  148. ##editar até aqui
  149.  
  150.  
  151.  
  152.  
  153. #inicioCod Primeiro Quadrante
  154. primeiroQuadrante:
  155.  
  156. sub $t0, $a2,$a0 #calcula dx = a2 - a0 salva em $t0
  157. sub $t1, $a1,$a3 #calcula dy = a3, - a1 salva em $t1
  158.  
  159. mtc1 $t0, $f0 #f0 agora tem o valor de t0
  160. cvt.s.w $f0,$f0
  161. mtc1 $t1, $f1 #f1 agora tem o valor de t1
  162. cvt.s.w $f1,$f1
  163.  
  164. #pinta primeiro pixel, como o primeiro pixel vai ser o valor de a0,a1 e eles ja estao no lugar certo.
  165. #eh so chamar a função
  166. addi $sp,$sp,-8
  167. sw $t0,0($sp)
  168. sw $t1,4($sp)
  169. jal ponto
  170. lw $t0,0($sp)
  171. lw $t1,4($sp)
  172. addi $sp,$sp,8
  173.  
  174. #descobrir qual a direcao rapida.
  175. lwc1 $f10,dois #preciso do 2.0
  176. slt $at, $t0,$t1 # se t0 for menor que t1 , y é a direção rápida
  177.  
  178. bne $at, $zero, yehrapida
  179.  
  180. xehrapida:
  181. li $s2, 0 #vari aux dizendo que x é pos rapida
  182. div.s $f2, $f0,$f10 #F2 recebe o (erro) atual = direção rapida/ 2 nesse caso eh dx / 2 já q $f0 é dx nesse caso.
  183. j loop
  184. yehrapida:
  185. li $s2, 1 # vari aux dizendo que y é pos rápida
  186. div.s $f2, $f1,$f10 #F2 recebe o (erro) atual = direção rapida/ 2 nesse caso eh dy / 2 já q $f1 é dy nesse caso.
  187. j loop
  188. #aqui que vai pintar os pontos.
  189. loop:
  190.  
  191. #fazer sair do loop
  192. slt $at,$a2,$a0 # se x2 < x1 sai
  193. bne $at,$zero, saiDoLoop
  194. slt $at,$a1,$a3 # se y0 < y1 sai do loop.
  195. bne $at,$zero,saiDoLoop
  196.  
  197.  
  198.  
  199. #se nao saiu cont
  200. beq $s2,$zero,xPosRapida #checa qual eh a direcao rapida
  201. #caso y pos rapida
  202. addi $a1,$a1,-1
  203. sub.s $f2,$f2, $f0 #aqui a pos rapida vai ser dy, fazemos erro - pos lenta no caso dx
  204. lwc1 $f10,zero
  205. c.lt.s $f2,$f10
  206. bc1t andoPosLentaX
  207. j naoAndoNaPosLentaX
  208. andoPosLentaX:
  209. addi $a0,$a0,1
  210. add.s $f2,$f2,$f1 #erro + pos rapida
  211. jal ponto
  212. j loop
  213. naoAndoNaPosLentaX:
  214. jal ponto
  215. j loop
  216.  
  217. xPosRapida:
  218. addi $a0,$a0,1 # anda na pos rapida .
  219. sub.s $f2,$f2, $f1 # aqui a pos rapida é dx , fazemos erro - pos lenta no caso dy
  220. lwc1 $f10,zero
  221. c.lt.s $f2,$f10 # comparar se o erro eh negativo se f2 (erro ) < 0 (fp = 1)
  222. bc1t andoPosLentay #se o erro foi negativo anda na pos lenta no caso y
  223. j naoAndoPosLentay
  224. andoPosLentay:
  225. addi $a1,$a1,-1
  226. add.s $f2,$f2,$f0
  227. jal ponto
  228. j loop
  229. naoAndoPosLentay:
  230. jal ponto
  231. j loop
  232. saiDoLoop:
  233. lw $ra,0($sp)
  234. addi $sp,$sp,4
  235. jr $ra
  236.  
  237. ##########################
  238. # FUNÇÃO QUE DESENHA PIXEL
  239. # PARÂMETROS : a0 = x; a1 = y ; a2 = cor
  240. # retorna 1 sucesso, retorna 0 erro - > ainda tem de implementar.
  241.  
  242.  
  243. ponto:
  244. lw $t0, width #largura em t0
  245. lw $t1, height #altura em t1
  246.  
  247. slti $t2,$a0,0 #se x < 0 sai da função
  248. bne $t2, $zero, saida_ponto
  249.  
  250. slti $t2,$a1,0 #se y < 0 sai da função
  251. bne $t2,$zero, saida_ponto
  252.  
  253. slt $t2, $a0, $t0 # se x >= width : sai da função
  254. beq $t2, $zero, saida_ponto
  255.  
  256. slt $t2,$a1,$t1 #se y>= weight : sai da função
  257. beq $t2,$zero, saida_ponto
  258.  
  259. mul $t0,$a1,$t0 #faz y * 320 e coloca em t0
  260. add $t0,$t0,$a0 #faz y * 320 + x e coloca em t0
  261.  
  262. addi $t0, $t0, 0xFF000000 # faz 0xFF000000 + y *320 + x e coloca em t0
  263. # li $a2, 0XF # depois retirar so pra debug
  264. sb $a2 , 0($t0) #desenha o ponto de cor a2(byte:= BBGGGRR) na tela (a0,a1:=x,y)
  265. saida_ponto:
  266. jr $ra
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement