anúncios

terça-feira, 12 de outubro de 2021

Conhecendo o MARS

O que é MARS?

O MARS é um ambiente de desenvolvimento integrado (IDE) destinado a estudos da arquitetura MIPS, assim pode estudar a linguagem Assembly MIPS com a IDE MARS. Geralmente é utilizado na disciplina de Arquitetura e Organização de Computadores no curso Bacharelado em Ciência da Computação, o qual segue o livro do Patterson, Organização e Arquitetura de Computadores.

O MARS foi desenvolvido em Java e a partir do release 4.0, contém 155 instruções básicas da arquitetura MIPS, aproximadamente 370 pseudo-instruções, 17 funções syscalls para o console e entrada e saída de dados, outras 22 funções syscalls para outros usos como o MIDI output, para as saídas de mídia, geração de números aleatórios.

A linguagem Assembly é o que no mundo da computação, chamamos de linguagem de montagem. É basicamente faz o intermediário entre as linguagens de programação que nós usuários usamos e o que o computador interpreta.

Download do MARS

Pré-requisito: Precisa ter o JRE instalado no computador.

Uma vez tendo o JRE instalado no computador, faça o download do JAR MARS e execute no terminal, onde salvou o arquivo JAR MARS, conforme segue:

PS: Até a data de publicação deste post, a versão atual do MARS é 4.5, então dependendo da data que esteja seguindo esse post, adapte pela respectiva versão.

$ java -jar Mars4_5.jar

Vamos fazer o primeiro programa em Assembly MIPS?

HelloWorld.asm

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

.data
showHelloWorld: .asciiz "Hello World em Assembly MIPS!"

O que faz esse código?

Podemos ver as diretivas e novos elementos. Temos a instrução la, que vai nos servir para armazenar o endereço de algum elemento em um registrador específico. Nesse caso, estamos pegando o endereço do rótulo 'showHelloWorld'. Um rótulo é como se fosse uma marcação daquele endereço específico. E com essa marcação, podemos acessar esse endereço por esse rótulo.

Depois, temos a primeira syscall. Uma syscall é uma chamada do sistema, literalmente falando. Como ela funciona? Essa chamada do sistema tem dois registradores padrão de argumentos. O $a0 e o $v0. Para essa syscall, que é de imprimir uma string no console, enviamos o endereço da string que queremos imprimir para $a0 e o código da operação enviamos para $v0. Esse código da operação podemos consultar no Help apertando F1 e indo na aba Syscalls. Após enviarmos os valores para os registradores de argumento da syscall, fazemos uma chamada com o comando syscall no nosso código.

Também temos uma nova diretiva, o .asciiz, que é a diretiva responsável por representar os caracteres da string a seguir em ASCII com a terminação '\0'.

Fora os novos elementos do código, é visível que ele está melhor estruturado, separando o que é do segmento de texto e o que é do segmento de dados.

Após compilar o nosso código, na nossa tela de execução teremos algo diferente. O nosso segmento de dados não está mais vazio. Agora, contém nele a nossa string “Hello World em Assembly MIPS!”, que enviamos com a diretiva .asciiz. Podemos executar o programa pressionando o F5 ou através do F7 e ver como o processador faz a execução de cada instrução.

Feito!

Nenhum comentário:

Postar um comentário