MARS

O MCU PIC32 como já foi referido tem um “core” MIPS. Para melhor se estudar o seu assembly, iremos usar um simulador chamado MARS (MIPS Assembler and Runtime Simulator).
Este simulador foi já apresentado nas aulas teóricas (slides 44 a 53 sobre Arquitectura do Conjunto de Instruções) pretendendo-se aqui usá-lo, primeiro para simular o programa Fibonacci.asm, e depois para desenvolver um conjunto de programas que:

Peça 2 números inteiros ao utilizador e imprima o resultado da sua adição

        .data
input:  .asciiz "Introduza um numero: "
res:    .asciiz "Resultado da soma: "

        .text
        ...
        
        li $v0, 10 # termina o programa
        syscall

Peça 2 números inteiros ao utilizador e imprima o número com maior valor absoluto

        .data
        ...

        .text
        ...

        li   $v0, 10
        syscall
	
        # abs $a0, $a0
abs:    ...

        jr $ra

Imprima todos os números ímpares pertencentes a um vetor contendo 10 números presente na memória

        .data
vec:    .word 1, 2, 4, 6, -3, 7, 0, -2, 9, 9
        ...

        .text
        ...
			
        li   $v0, 10
        syscall

Imprima uma string presente na memória, mas com os seus caracteres todos em maiúsculas

        .data
str:    .asciiz "Hoje (dia 19) chove muito?\n"
newstr: .asciiz "                           "

        .text
        ...
	
        la   $a0, newstr
        li   $v0, 4
        syscall

        li   $v0, 10
        syscall

Ordene e imprima um vetor com 10 números inteiros gerados aleatoriamente (syscall c/ $v0 = 41 ou 42)

        .data
vec:    .word 0: 10
        ...
	
        .text
        ...
	
        li $v0, 10
        syscall
	
        .data
        ...

        .text
print:  ...

        jr $ra

Programas adicionais:

  • Pede um número inteiro e imprime-o em formato binário (sem recorrer ao syscall c/ $v0 = 35)
  • Pede um número inteiro e imprime-o em formato hexadecimal (sem recorrer ao syscall c/ $v0 = 34)
  • Pede um número inteiro em formato hexadecimal, imprimindo-o de seguida em binário
  • Toca uma pequena música (por exemplo o “Parabéns a Você“) recorrendo ao syscall ($v0 = 31/33)

Importante: Obtenha os parâmetros/resultados de cada serviço syscall indo à opção Help do menu Help, ou simplesmente carregando na tecla F1!