Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .data
- width: .word 320
- height: .word 240
- .text
- #algoritmo que desenha a elipse
- #ordem dos argumentos
- # a0 = xcentro, a1 = ycentro, a2 = largura, a3=altura
- main:
- li $a0,150
- li $a1,150
- li $a2,25
- li $a3,25
- li $t0,0x0c # adiciona a cor.
- addi $sp,$sp,-4
- sw $t0,0($sp)
- jal elipse
- li $v0,10
- syscall
- elipse:
- lw $t9 , 0($sp) # carregando parâmetro da cor.
- addi $sp,$sp,4
- addi $sp,$sp,-36
- sw $ra,0($sp)
- sw $s0,4($sp)
- sw $s1,8($sp)
- sw $s2,12($sp)
- sw $s3,16($sp)
- sw $s4,20($sp)
- sw $s5,24($sp)
- sw $s6,28($sp)
- sw $s7,32($sp)
- move $s0,$a0 # s0 = xcentro
- move $s1,$a1# s1 = ycentro
- move $s2,$a2 #s2 = largura da elipse
- move $s3,$a3 #s3 = altura elipse
- move $a2,$t9 # carrega parametro da cor.
- mul $s4,$s2,$s2 # largura²
- mul $s5,$s3,$s3 # altura²
- addi $t7,$zero,4
- mul $s6,$s4,$t7 # largura² * 4
- mul $s7,$s5,$t7 # altura² * 4
- add $t0,$zero,$zero # reservando pro x
- add $t1, $zero, $s3 # y = altura
- add $t2,$zero,$zero # reservando pro sigma
- addi $t7,$zero,2
- addi $t4, $zero,1 # 1
- mul $t5,$s3,$t7 # 2* altura
- sub $t4,$t4,$t5 # ( 1 - 2* altura)
- mul $t4, $t4, $s4 # largura² * ( 1 - 2* altura)
- mul $t5,$s5,$t7 # altura² * 2
- add $t2, $t5, $t4 #sigma = 2*altu2+larg2*(1-2*altura);
- #parar o FOR QUANDO altu2*x <= larg2*y;
- for:
- mul $t4,$s5,$t0 # altura ² * x
- mul $t5,$s4,$t1 #largura2 *y
- bgt $t4,$t5,fimPrimeiroFor
- addi $sp,$sp,-12
- sw $t0,0($sp)
- sw $t1,4($sp)
- sw $t2,8($sp)
- add $a0,$s0,$t0 #xc + x
- add $a1,$s1,$t1 #yc + y
- jal ponto
- lw $t0,0($sp)
- lw $t1,4($sp)
- lw $t2,8($sp)
- addi $sp,$sp,12
- addi $sp,$sp,-12
- sw $t0,0($sp)
- sw $t1,4($sp)
- sw $t2,8($sp)
- sub $a0,$s0,$t0 #xc - x
- add $a1,$s1,$t1 #yc + y
- jal ponto
- lw $t0,0($sp)
- lw $t1,4($sp)
- lw $t2,8($sp)
- addi $sp,$sp,12
- addi $sp,$sp,-12
- sw $t0,0($sp)
- sw $t1,4($sp)
- sw $t2,8($sp)
- add $a0,$s0,$t0 #xc + x
- sub $a1,$s1,$t1 #yc - y
- jal ponto
- lw $t0,0($sp)
- lw $t1,4($sp)
- lw $t2,8($sp)
- addi $sp,$sp,12
- addi $sp,$sp,-12
- sw $t0,0($sp)
- sw $t1,4($sp)
- sw $t2,8($sp)
- sub $a0,$s0,$t0 #xc - x
- sub $a1,$s1,$t1 #yc - y
- jal ponto
- lw $t0,0($sp)
- lw $t1,4($sp)
- lw $t2,8($sp)
- addi $sp,$sp,12
- blt $t2,$zero,else
- addi $t5,$zero,1
- sub $t5,$t5,$t1 # t5 = 1 -y
- mul $t5,$t5, $s6 # larg4* (1-y)
- add $t2,$t2,$t5 # sigma += larg4* (1-y)
- addi $t1,$t1,-1
- j pulaElse
- else:
- addi $t7,$zero,4
- mul $t5,$t0,$t7 # x * 4
- addi $t5,$t5,6
- mul $t5,$t5,$s5 # altura² * (4*x) + 6
- add $t2,$t2,$t5
- pulaElse:
- addi $t0,$t0,1
- j for
- fimPrimeiroFor:
- add $t0,$zero,$s2 # x = largura
- add $t1,$zero,$zero # y = 0
- addi $t4,$zero,1
- sll $t5,$s2,1 #largura * 2
- sub $t5,$t4,$t5 # 1 - (largura * 2)
- mul $t5,$t5,$s5 # altura² * 1 - (largura * 2)
- sll $t4,$s4,1 # largura²*2
- add $t2,$t4,$t5 # sigma = 2*larg2+altu2*(1-2*largura)
- for2:
- mul $t4,$s4,$t1 # larg² * y
- mul $t5,$s5,$t0 # altura ² * x
- bgt $t4,$t5, fimElipse
- addi $sp,$sp,-12
- sw $t0,0($sp)
- sw $t1,4($sp)
- sw $t2,8($sp)
- add $a0,$s0,$t0 #xc + x
- add $a1,$s1,$t1 #yc + y
- jal ponto
- lw $t0,0($sp)
- lw $t1,4($sp)
- lw $t2,8($sp)
- addi $sp,$sp,12
- addi $sp,$sp,-12
- sw $t0,0($sp)
- sw $t1,4($sp)
- sw $t2,8($sp)
- sub $a0,$s0,$t0 #xc - x
- add $a1,$s1,$t1 #yc + y
- jal ponto
- lw $t0,0($sp)
- lw $t1,4($sp)
- lw $t2,8($sp)
- addi $sp,$sp,12
- addi $sp,$sp,-12
- sw $t0,0($sp)
- sw $t1,4($sp)
- sw $t2,8($sp)
- add $a0,$s0,$t0 #xc + x
- sub $a1,$s1,$t1 #yc - y
- jal ponto
- lw $t0,0($sp)
- lw $t1,4($sp)
- lw $t2,8($sp)
- addi $sp,$sp,12
- addi $sp,$sp,-12
- sw $t0,0($sp)
- sw $t1,4($sp)
- sw $t2,8($sp)
- sub $a0,$s0,$t0 #xc - x
- sub $a1,$s1,$t1 #yc - y
- jal ponto
- lw $t0,0($sp)
- lw $t1,4($sp)
- lw $t2,8($sp)
- addi $sp,$sp,12
- blt $t2,$zero,else2
- addi $t5,$zero,1
- sub $t5,$t5,$t0 # t5 = 1 -x
- mul $t5,$t5, $s7 # altura4* (1-x)
- add $t2,$t2,$t5 # sigma += altura4* (1-x)
- addi $t0,$t0,-1
- j pulaElse2
- else2:
- addi $t7,$zero,4
- mul $t5,$t1,$t7 # y * 4
- addi $t5,$t5,6
- mul $t5,$t5,$s4 # altura² * (4*x) + 6
- add $t2,$t2,$t5
- pulaElse2:
- addi $t1,$t1,1
- j for2
- ###
- fimElipse:
- lw $ra,0($sp)
- sw $s0,4($sp)
- lw $s1,8($sp)
- lw $s2,12($sp)
- lw $s3,16($sp)
- lw $s4,20($sp)
- lw $s5,24($sp)
- lw $s6,28($sp)
- lw $s7,32($sp)
- addi $sp,$sp,36
- jr $ra
- ponto:
- lw $t0, width #largura em t0
- lw $t1, height #altura em t1
- slti $t2,$a0,0 #se x < 0 sai da função
- bne $t2, $zero, saida_ponto
- slti $t2,$a1,0 #se y < 0 sai da função
- bne $t2,$zero, saida_ponto
- slt $t2, $a0, $t0 # se x >= width : sai da função
- beq $t2, $zero, saida_ponto
- slt $t2,$a1,$t1 #se y>= weight : sai da função
- beq $t2,$zero, saida_ponto
- mul $t0,$a1,$t0 #faz y * 320 e coloca em t0
- add $t0,$t0,$a0 #faz y * 320 + x e coloca em t0
- addi $t0, $t0, 0xFF000000 # faz 0xFF000000 + y *320 + x e coloca em t0
- sb $a2 , 0($t0) #desenha o ponto de cor a2(byte:= BBGGGRR) na tela (a0,a1:=x,y)
- saida_ponto:
- jr $ra
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement