Exercício 5 - Utilização do console do SPIM para entrada e saída de dados

 

Objetivo: Implementar um programa para o cálculo da média das notas. O usuário pode entrar com quantas notas quiser no console. Para facilitar o cáculo, utilizaremos a divisão inteira (div), ou seja, o resultado será apenas a parte inteira da média.

Para trabalharmos com o console do SPIM, utilizaremos os Serviços de Sistema que ele fornece.

.data
msg1: .asciiz "\nEntre o numero de avaliações da disciplina: "
msg2: .asciiz "\nEntre um valor para a nota "
msg3: .asciiz ": "
msg4: .asciiz "\nA média das notas é: "
.text
.globl main
main:
add $t0, $zero, $zero # Limpa o conteúdo de $t0
add $t1, $zero, $zero # Limpa o conteúdo de $t1
numnotas:
li $v0, 4 # Codigo SysCall p/ escrever strings
la $a0, msg1 # Parametro (string a ser escrita)
syscall
li $v0, 5 # Codigo SysCall p/ ler inteiros
syscall # Inteiro lido vai ficar em $v0
add $s0, $v0, $zero # Armazena em $s0 o número de notas
loopnotas:
addi $t0, $t0, 1 # Incrementa $t0 - contador de notas
li $v0, 4 # Codigo SysCall p/ escrever strings
la $a0, msg2 # Parametro (string a ser escrita)
syscall
li $v0, 1 # Codigo SysCall p/ escrever inteiros
add $a0, $zero, $t0 # Parametro (inteiro a ser escrito)
syscall
li $v0, 4 # Codigo SysCall p/ escrever strings
la $a0, msg3 # Parametro (string a ser escrita)
syscall
li $v0, 5 # Codigo SysCall p/ ler inteiros
syscall # Inteiro lido vai ficar em v0
add $t1, $t1, $v0 # Soma a nota ao total
bne $t0, $s0, loopnotas # Enquanto não preencher todas as notas, loop
Calcula:
div $t1, $s0 # Divide o total pelo numero de notas
mflo $t2 # Move o resultado para $t2
li $v0, 4 # Codigo SysCall p/ escrever strings
la $a0, msg4 # Parametro (string a ser escrita)
syscall
li $v0, 1 # Codigo SysCall p/ escrever inteiros
add $a0, $zero, $t2 # Parametro (inteiro a ser escrito)
syscall
li $v0, 5 # Apenas para esperar um [ENTER]
syscall

 

Salve o arquivo com o nome de "exercicio5.s" e abra-o no SPIM. Execute-o (F5). O SPIM deverá abrir a janela do Console para a entrada de dados.