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!