Created
November 6, 2012 16:13
-
-
Save RichardCSantana-zz/4025740 to your computer and use it in GitHub Desktop.
Calculadora com loop (Arquitetura Mips)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.data | |
$soma: .asciiz "soma: \n" #declara variavel soma como 'soma: \n' | |
$subtracao: .asciiz "\nsubtracao: \n" #declara variavel subtracao como 'subtracao: \n' | |
$multiplicacao: .asciiz "\nmultiplicacao: \n" #declara variavel multiplicacao como 'multiplicacao: \n' | |
$divisao: .asciiz "\ndivisao: \n" #declara variavel divisao como 'divisao: \n' | |
$message1: .asciiz "\nInsira o primeiro valor:\n" | |
$message2: .asciiz "\nInsira o segundo valor:\n" | |
$message3: .asciiz "\nEscolha a operação:\n1-Soma\n2-Subtracao\n3-Multiplicacao\n4-Divisao\n" | |
$message4: .asciiz "\nDeseja fazer uma nova operação:\n1-Sim\n2-Nao\n" | |
.text | |
main: | |
loop: | |
li $v0,4 #comando de impressão de inteiro na tela | |
la $a0, $message1 #coloca o texto message1 para ser impresso | |
syscall # efetua a chamada ao sistema | |
li $v0, 5 #le entrada do usuário | |
syscall #faz chamada ao sistema | |
move $s0, $v0 # move conteúdo de $v0 para $s0 | |
li $v0,4 #comando de impressão de inteiro na tela | |
la $a0, $message2 #coloca o texto message2 para ser impresso | |
syscall # efetua a chamada ao sistema | |
li $v0, 5 #le entrada do usuário | |
syscall # efetua a chamada ao sistema | |
move $s1, $v0 # move conteúdo de $v0 para $s1 | |
li $v0,4 #comando de impressão de inteiro na tela | |
la $a0, $message3 #coloca o texto message3 para ser impresso | |
syscall # efetua a chamada ao sistema | |
li $v0, 5 #le entrada do usuário | |
syscall # efetua a chamada ao sistema | |
move $s2, $v0 # move conteúdo de $v0 para $s2 | |
beq $s2,1,somaOp #verifica se $s2 é igual a 1 se for desvia para somaOP | |
beq $s2,2,subtracaoOp #verifica se $s2 é igual a 2 se for desvia para subtracaoOP | |
beq $s2,3,multiplicacaoOp #verifica se $s2 é igual a 3 se for desvia para multiplicacaoOP | |
beq $s2,4,divisaoOp #verifica se $s2 é igual a 4 se for desvia para divisaoOP | |
j termina #desvia para termina | |
somaOp: | |
li $v0,4 #comando de impressão de inteiro na tela | |
la $a0, $soma #coloca o texto soma para ser impresso | |
syscall # efetua a chamada ao sistema | |
add $s2, $s0, $s1 #soma os valores dos registradores $s0 e $s1 e insere o resultado no registrador $s2 | |
j imprime #desvia para imprime | |
subtracaoOp: | |
li $v0,4 #comando de impressão de inteiro na tela | |
la $a0, $subtracao #coloca o texto subtração para ser impresso | |
syscall # efetua a chamada ao sistema | |
sub $s2, $s0, $s1 #subtrai os valores dos registradores $s0 e $s1 e insere o resultado no registrador $s2 | |
j imprime #desvia para imprime | |
multiplicacaoOp: | |
li $v0,4 #comando de impressão de inteiro na tela | |
la $a0, $multiplicacao #coloca o texto multiplicacao para ser impresso | |
syscall # efetua a chamada ao sistema | |
mul $s2, $s0, $s1 #multiplica os valores dos registradores $s0 e $s1 e insere o resultado no registrador $s2 | |
j imprime #desvia para imprime | |
divisaoOp: | |
li $v0,4 #comando de impressão de inteiro na tela | |
la $a0, $divisao #coloca o texto divisao para ser impresso | |
syscall # efetua a chamada ao sistema | |
div $s2, $s0, $s1 #divide os valores dos registradores $s0 e $s1 e insere o resultado no registrador $s2 | |
j imprime #desvia para imprime | |
imprime: | |
li $v0,1 #comando de impressão de inteiro na tela | |
la $a0, ($s2) #coloca o registrador $s2 para ser impresso | |
syscall # efetua a chamada ao sistema | |
li $v0,4 #comando de impressão de inteiro na tela | |
la $a0, $message4 #coloca o texto message4 para ser impresso | |
syscall # efetua a chamada ao sistema | |
li $v0, 5 #le entrada do usuário | |
syscall # efetua a chamada ao sistema | |
move $s3, $v0 # move conteúdo de $v0 para $s2 | |
beq $s3,1,loop #verifica se $s3 é igual a 1 se for desvia para loop | |
j termina #desvia para termina | |
termina: | |
li $v0, 10 # comando de exit | |
syscall # efetua a chamada ao sistema |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment