Skip to content

Commit

Permalink
Adicionado raiz e tabuada
Browse files Browse the repository at this point in the history
  • Loading branch information
Setti7 committed Apr 25, 2020
1 parent 475e1d1 commit 8e644b3
Showing 1 changed file with 96 additions and 2 deletions.
98 changes: 96 additions & 2 deletions main.asm
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ op_0: .asciiz " 0 - quit\n"
error: .asciiz "Opcao invalida\n"

newline: .asciiz "\n"

.text
.globl main

Expand Down Expand Up @@ -107,7 +109,13 @@ exec_op:#preparação para chamada das funções do menu
add $a0, $t0, $zero
addi $t8, $zero, 1
beq $t8, $t9, exec_soma
beq $t8, $t9, exec_soma # se operação for 1, soma
addi $t8, $zero, 7
beq $t8, $t9, exec_raiz # se operação for 7, raiz
addi $t8, $zero, 8
beq $t8, $t9, exec_tabuada # se operação for 8, tabuada
exec_soma:
jal soma
Expand All @@ -118,7 +126,93 @@ soma:
add $v0, $a0, $a1
jr $ra

#------------------------------------------------------------------------------------------
# RAIZ
# v0 = raiz(a0)
#
# Retorna a raiz quadrada do inteiro positivo em $a0
#
# Argumento:
# $a0 - Inteiro positivo para tirar a raiz quadrada.
#
# Resultado:
# $v0 - O piso da raiz quadrada calculada, como um inteiro.
#
# Registradores locais:
# $v0: Número x sendo testado para ver se é a raiz quadrada de n.
# $t0: Raiz de x.
#------------------------------------------------------------------------------------------
exec_raiz:
jal raiz
j print_result

raiz:
li $v0, 0 # x = 0

raiz_loop:
mul $t0, $v0, $v0 # t0 = x*x
bgt $t0, $a0, raiz_end # if (x*x > n) vai para raiz_end
addi $v0, $v0, 1 # x = x + 1
j raiz_loop # vai para raiz_loop
raiz_end:
addi $v0, $v0, -1 # x = x - 1
jr $ra

#------------------------------------------------------------------------------------------
# TABUADA
#
# Printa a tabuada do inteiro $a0
#
# Argumento:
# $a0 - Inteiro positivo.
#
# Resultado:
# Nenhum.
#
# Registradores locais:
# $t0: Número (x) para imprimir a tabuada.
# $t1: Contador (i) até 10.
# $t2: Auxiliar com o valor de 10.
#
# $a0: n = i * x.
#------------------------------------------------------------------------------------------
exec_tabuada:
jal tabuada
j main

tabuada:
move $t0, $a0 # salva x em t0
li $t1, 1 # i = 1
li $t2, 10 # maxValue = 10
# imprime uma nova linha
la $a0, newline
li $v0, 4
syscall

tabuada_loop:
bgt $t1, $t2, tabuada_end # se contador for maior que 10, vai para end
mul $a0, $t0, $t1 # n = i * x
addi $t1, $t1, 1 # i = i + 1
li $v0, 1 # imprime n
syscall
# imprime uma nova linha
la $a0, newline
li $v0, 4
syscall
j tabuada_loop # vai para tabuada_loop
tabuada_end:
jr $ra


exec_subtr:
#TODO
subtr:
Expand All @@ -144,4 +238,4 @@ invalid_op:
quit:
#fim do programa
addi $v0, $zero, 10
syscall
syscall

0 comments on commit 8e644b3

Please sign in to comment.