anúncios

Mostrando postagens com marcador Assembly MIPS. Mostrar todas as postagens
Mostrando postagens com marcador Assembly MIPS. Mostrar todas as postagens

sábado, 16 de outubro de 2021

Conhecendo o QtSpim

O que é QtSpim?

O Spim é o simulador da linguagem Assembly MIPS. O QtSpim é uma ferramenta gráfica para o Spim.

A versão atual até a data de publicação deste post é 9.1.22, no entanto, dependendo da data que estiver seguindo esse howto, verificar a versão atual

O presente post é explicado na distribuição com base Debian

Instando o QtSpim na distro base Debian

Download do .deb

$ wget https://sourceforge.net/projects/spimsimulator/files/qtspim_9.1.22_linux64.deb

Executar o arquivo .deb via DPKG para instalação

$ sudo dpkg -i qtspim_9.1.22_linux64.deb

Abrir o QtSpim pelo terminal

$ qtspim &

Também encontra disponível no ambiente gráfico que utiliza na distro derivada do Debian.

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!"

Fig. 1 Screenshot do QtSpim

Para executar um programa em Assembly MIPS no QtSpim, no menu File>Reinitialize and Load File seleciona o arquivo com extensão .s ou .asm no diretório que salvou.

Register Panel

O Register Panel mostra o conteúdo de todos os registradores MIPS. Observe que existe duas abas nesse painel, uma para os registradores de ponto flutuante e outra para os registradores de propósito geral (R1-R31), junto com registradores de propósito especial, como contador de programa.

Memory Panel

O Memory Panel mostra duas abas: Data e Text. Na aba Text mostra o conteúdo do programa em memória.

Na aba Data mostra o conteúdo de memória de dados. Isso inclui as variáveis e os dados da matriz que você cria, junto com o conteúdo da pilha.

Feito!

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!