Pesquisar neste blog

31/12/2020

Projeto saldo de conta bancária em Linguagem MIPS Assembly

# PROJETO DO GERENCIADOR DE DEPÓSITOS E SAQUES

.data # diretiva de dados
sal: .asciiz "Informe o sado Inicial: "
menu: .asciiz "\n### MENU ###\n1 - Mostrar o saldo\n2 - Depositar\n3 - Efeturar o saque\n0 - Sair\nOpção: "
outsal: .asciiz "SALDO = "
outdep: .asciiz "Seu NOVO SALDO após o Depósito é: "
outdep2: .asciiz "Informe seu Depósito: "
outsaq: .asciiz "Seu NOVO SALDO após o Saque é: "
outsaq2: .asciiz "Informe seu Saque: "
out: .asciiz "Sistema Finalizado!\n"

.text # Diretiva de texto
.globl main # Diretiva global
main: # bloco main
li $v0, 4 # Imprimi uma string
la $a0, sal # Carrega sal no registrador a0
syscall
li $v0, 5 # le um número inteiro
syscall # Executa
move $t0, $v0 # Salva o número digitado em t0

rep: # bloco rep
li $v0, 4 # Imprimi uma string
la $a0, menu # Carrega o menu no registrador a0
syscall # executa
li $v0, 5 # le um numero inteiro
syscall
move $t1, $v0 # salv ao número digitado em t1
beq $t1, 0, sair # se t0 for 0, executa o bloco sair
jal opmenu # chama a função opmenu
j rep # cria o laço chamando rep

opmenu: # bloco menu
beq $t1, 1, saldo # se t1 for igual a 1, executa saldo
beq $t1, 2, deposito # se t1 for igual a 2, executado deposito
beq $t1, 3, saque # se t1 for igual a 3, execta saque

saldo: # bloco saldo
li $v0, 4 # Imprimi uma string
la $a0, outsal # Carrega outsal no registrador a0
syscall
li $v0, 1 # Imprimi um inteiro
move $a0, $t0 # Carrega a0 com o registrador t0
syscall
jr $ra # Volta para que o chamou (ja1)

deposito: # bloco deposito
li $v0, 4 # Imprimi uma string
la $a0, outdep2 # Carrega outdep2 no registrador a0
syscall
li $v0, 5 # le um número inteiro
syscall
move $t2, $v0 # Salva o número digitado em t2
add $t0, $t0, $t2 # SOMA t0 = t0 + t2
li $v0, 4 # Imprimi uma string
la $a0, outdep # Carrega otdep no registrador a0
syscall
li $v0, 1
move $a0, $t0 # Carrega o registrador a0 com t0
syscall
jr $ra # volta para que o chamou (ja1)

saque:
li $v0, 4 # Imprimi uma string
la $a0, outsaq2 # Carrega outdsaq2 no registrador a0
syscall
li $v0, 5 # le um número inteiro
syscall
move $t4, $v0 # Salva o número digitado em t4
sub $t0, $t0, $t4 # SUBTRAI t0 = t0 - t4
li $v0, 4 # Imprimi uma string
la $a0, outsaq # Carrega otdep no registrador a0
syscall
li $v0, 1
move $a0, $t0 # Carrega o registrador a0 com t0
syscall
jr $ra # volta para que o chamou

sair: # bloco sair
li $v0, 4
la $a0, out
syscall
li $v0, 10 # Sair do programa
syscall

Simulador: MARS 4.5


Calculadora em linguagem MIPS Assembly

.data
menu: .asciiz "***** MENU *****\n1 - Somar\n2 - Subtrair\n3 - Multiplicar\n4 - Dividir\n0 - SAIR\nOpção: "
n1: .asciiz "Entre com o primeiro número: "
n2: .asciiz "Entre com o segundo número: "
r: .asciiz "Resultado = "
pula: .asciiz "\n\n"

.macro pula_linha # Macro pula linha
li $v0, 4
la $a0, pula # Carrega a string de pula em $a0
li $v0, 4
la $a0, pula
syscall
.end_macro

.macro menu
li $v0, 4
la $a0, menu
syscall
li $v0, 5 # Prepara para ler um número inteiro
syscall
move $t0, $v0 # Salva o número digitado em $t0
.end_macro

.text # Diretiva de dados
.globl principal # Diretiva global

principal: # Função principal
menu # Chama a macro menu
# Condições
beq $t0, 1, somar # se $t0 for digitado 1 vai para o bloco somar
# Bloco somar
beq $t0, 2, subtrair
# bloco subtrair
beq $t0, 3, multiplicar
# bloco multiplicar
beq $t0, 4, dividir

beq $t0, 0, sair
# bloco sair

somar:
# pede o primeiro número
li $v0, 4
la $a0, n1 # Carrega n1 no registrador $a0
syscall
li $v0, 5
syscall
move $t1, $v0 
# pede o segundo número
li $v0, 4
la $a0, n2 # Carregga n2 no registrador
syscall
li $v0, 5
syscall
move $t2, $v0 # Salva o número digitado
add $t3, $t1 $t2 # SOMA: $t3 = t1 + t2
# Mostra o resultado na tela
li $v0, 4
la $a0, r # Carrega r no registrador $a0
syscall
li $v0, 1 # Imprimi m número
la $a0, ($t3) # Carrega o inteiro de $t3 em $a0
syscall
pula_linha # Executa a macro
j principal # Executa o bloco principal

subtrair: # Bloco subtrair
# pede o primeiro número
li $v0, 4 # Imprimi uma string
la $a0, n1 # Carrega n1 no registrador a0
syscall
li $v0, 5 # Lê um número inteiro
syscall
move $t1, $v0 # Salva o número digitado em $t1
# pede o segundo número
li $v0, 4 # Imprimir uma string
la $a0, n2 # Carrega n2 no registrador
syscall
li $v0, 5
syscall
move $t2, $v0 # Salva o número digitado em $t2
sub $t3, $t1, $t2 # SUBTRAI: t3 = t1 - t2
#MOSTRA o resultado na tela
li $v0, 4 # Imprimi uma string
la $a0, r # Carrega no registrador a0
syscall
li $v0, 1 # Imprimi um número
la $a0, ($t3) # Carrega o inteiro 
syscall
pula_linha # Executa a macro pula linha
j principal # Executa o bloco principal

multiplicar: # Bloco multiplicar:
# Pede o primeiro número
li $v0, 4 # Imprimi uma string
la $a0, n1 # Carrega n1 no registrador 
syscall
li $v0, 5 # Le um número inteiro
syscall
la $a0, ($t3) # Carrega o inteiro 
# Pede o segundo número
move $t1, $v0 # Salva o número digitado em $t1
la $a0, n2 # Carrega n2 no registrador 
syscall
li $v0, 5 # Lê um número inteiro
syscall
move $t2, $v0 # Salva o número digitado em $t2
mul $t3, $t1, $t2 # MULTIPLICA: t3 = t1 * t2
#Mostra o resultado na tela
li $v0, 4 # Imprimi uma string
la $a0, r # Carrega r no registrador $a0
syscall
li $v0, 1 # Imprimi um número inteiro
la $a0, ($t3) # Carrega o número inteiro de $t3 em $a0
syscall # Executa
pula_linha # Executa a macro pula_linha
j principal # Executa o bloco principal

dividir: # bloco dividir
# Pede o primeiro número
li $v0, 4 # Imprimi uma string
la $a0, n1 # Carrega n1 no registrador $a0
syscall
li $v0, 5 # Lê um número inteiro
syscall
move $t1, $v0 # Salva o número digitado em t1
# pede o segundo número
li $v0, 4 # Imprimi uma string
la $a0, n2 # Carrega n2 no registrador $a0
syscall
li $v0, 5 # Le um número inteiro
syscall
move $t2, $v0 # Salva o número digitado em t2
div $t3, $t1, $t2 # DIVIDE: t3 = t1 / t2
# Mostra o resultado
li $v0, 4 # Imprimi uma string
la $a0, r # Carrega no registrador a0
syscall
li $v0, 1 # Imprimi uma string
la $a0, ($t3) # Carrega um inteiro em a0
syscall
pula_linha
j principal
# bloco para sair
sair:
li $v0, 10
syscall



Simulador: MARS 4.5