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.