Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
chieppe7 committed Apr 29, 2020
2 parents 97905b0 + 9e0ebad commit 1bd0b01
Showing 1 changed file with 170 additions and 1 deletion.
171 changes: 170 additions & 1 deletion main.asm
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
.data
.align 0

continue: .asciiz "\nPressione <ENTER> para continuar\n"

title: .asciiz "\nEscolha a opção\n"
op_1: .asciiz " 1 - soma\n"
op_2: .asciiz " 2 - subtrai\n"
Expand All @@ -35,6 +37,8 @@ op_0: .asciiz " 0 - quit\n"
error: .asciiz "Opcao invalida\n"
error2: .asciiz "Numero invalido\n"

newline: .asciiz "\n"

.text
.globl main

Expand Down Expand Up @@ -82,6 +86,8 @@ ler_op:

add $t9, $v0, $zero #armazenar op

beq $t9, $zero, quit

bltz $t9, invalid_op #op negativa

addi $t8, $zero, 10
Expand All @@ -99,8 +105,14 @@ ler_arg:#leitura do primeiro argumento
blt $t8, $t9, exec_op

ler_arg2: #leitura do segundo argumento, se necessário
beq $t9, $t8, ler_float #no calculo do imc, lemos a altura em ponto flutuante

addi $v0, $zero, 5
syscall

ler_float:
addi $v0, $zero, 6
syscall

exec_op:#preparação para chamada das funções do menu
#argumentos dos procedimentos
Expand All @@ -112,6 +124,27 @@ exec_op:#preparação para chamada das funções do menu

addi $t8, $zero, 2
beq $t8, $t9, exec_subtr

addi $t8, $zero, 3
beq $t8, $t9, exec_multi

addi $t8, $zero, 4
beq $t8, $t9, exec_divi

addi $t8, $zero, 5
beq $t8, $t9, exec_expo

addi $t8, $zero, 6
beq $t8, $t9, exec_calc_imc

addi $t8, $zero, 7
beq $t8, $t9, exec_raiz # se operação for 7, raiz

addi $t8, $zero, 9
beq $t8, $t9, exec_fatorial

addi $t8, $zero, 8
beq $t8, $t9, exec_tabuada # se operação for 8, tabuada

exec_soma:
jal soma
Expand All @@ -122,7 +155,126 @@ soma: #soma dois valores
add $v0, $a0, $a1

jr $ra
exec_fatorial:
jal fatorial

j print_result

fatorial:
add $t0, $zero, $a0

addi $v0, $zero, 1
fat_loop:
beq $t0, $zero, end_fat

mult $v0, $t0
mflo $v0

addi $t0, $t0, -1

j fat_loop
end_fat:
jr $ra

exec_calc_imc:
jal calc_imc

j print_float
calc_imc:
mtc1 $a0, $f1
cvt.s.w $f1,$f1

mul.s $f0, $f0, $f0
div.s $f0, $f1, $f0

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 print_continue

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:
jal subtr

Expand Down Expand Up @@ -194,6 +346,13 @@ expo:
jr $ra


print_float:
add.s $f12, $f30, $f0
addi $v0, $zero, 2
syscall

j print_continue

print_result:
#impressão do resultado de uma função
add $a0, $v0, $zero
Expand All @@ -207,6 +366,16 @@ invalid_op2:

j main

print_continue:
la $a0, continue
addi $v0, $zero, 4
syscall

addi $v0, $zero, 12
syscall

j main

invalid_op:
#tratamento de opções inválidas
la $a0, error
Expand All @@ -219,4 +388,4 @@ invalid_op:
quit:
#fim do programa
addi $v0, $zero, 10
syscall
syscall

0 comments on commit 1bd0b01

Please sign in to comment.