Programação em Assembly MIPS no QtSpim
Lara Teixeira Oliveira
você vai aprender
Como fazer um programa em Assembly MIPS para o QtSpim
Como simular o programa no QtSpim
pré-requisitos
Programação Básica em Assembly
Download do QtSpim(Simulador de MIPS)
exercício proposto
O objetivo deste tutorial é ensinar a programar em Assembly MIPS para o simulador de assembly QtSpim. Dessa forma, vamos propor o seguinte código em C#
Como podemos ver, o programa apenas recebe um número de entrada e imprime na tela seu sucessor. Vamos fazer então, passo a passo, o programa em assembly.
passo 1: int numero, sucessor
Abra um editor de texto de sua preferência, pois o QtSpim é apenas um simulador de assembly, e vamos começar.
Sabemos que no assembly não é necessário declarar variáveis. Mas podemos passar alguns dados para que o QtSpim utilize-os no programa. Nesse caso, vamos alocar na memória dois endereços, um para 'numero' e um para 'sucessor', e vamos passar a string "Digite um numero" para ser impressa.
O '.data' representa a parte do programa onde estarão os dados a serem utilizados pelo QtSpim. É como se fosse uma declaração de variáveis, onde a variável 'mensagem' contém a string "Digite um numero\n", a variavel 'numero' contém o inteiro "1" e a variável sucessor contém o inteiro "1". O '.word' e o '.asciiz' são os tipos das variáveis, sendo '.word' para inteiros e '.asciiz' para strings no formato ASCII.
passo 2: Console.WriteLine("Digite um numero")
A tarefa agora é imprimir a mensagem "Digite um numero" no console.
O '.text' representa a parte do programa onde estará o código a ser executado. O 'main' funciona como um identificador para o bloco ser chamado nas funções de pulo. O comando 'li' significa "Load Immediate", e é utilizado nesse caso para passar uma instrução ao syscall pelo registrador $v0. Cada instrução tem um código específico, e o código '4' se refere a imprimir uma string no console. O comando 'la' significa "Load Adress" e está passando para o registrador argumento '$a0', o endereço de memória onde está armazenado a 'mensagem'. Quando chamamos o 'syscall' ele interpreta que é para imprimir uma mensagem no console e recebe como argumento a 'mensagem'.
passo 3: numero = int.Parse(Console.ReadLine())
A tarefa agora é receber do usuário um número inteiro digitado no teclado.
Usamos o comando 'li' mais uma vez para passar a instrução para o 'syscall'. O código '5' se refere à leitura de um inteiro. Chamamos o 'syscall' para executar a leitura e logo depois usamos o 'sw', que significa "Store Word", para armazenar o valor lido no teclado na posição da memória onde declaramos o nosso 'numero'.
passo 4: sucessor = num + 1;
A tarefa agora é calcular o sucessor do número lido.
Incrementamos então o número recebido em 1, armazenamos em $t0 e vamos salvá-lo na posição da memória onde declaramos o nosso 'sucessor'
passo 5: Console.Write(sucessor)
A tarefa agora é imprimir o nosso resultado.
Usamos o comando 'li' mais uma vez para passar a instrução para o 'syscall'. O código '1' se refere à impressão de um inteiro no console. Usamos o comando 'move' para mover o valor de $t0(sucessor) para o registrador argumento $a0. Quando chamamos o 'syscall', ele interpreta que deve imprimir um inteiro no console e recebe como argumento o sucessor calculado($t0). Para finalizarmos o programa usamos 'jr $ra'.
O programa final então fica:
Podemos usar '#' para comentários. Para salvar o programa, salve o arquivo no modo sem extensão, e adicione um '.s' ao final do nome do arquivo. E vamos para a simulação.
simulação no QtSpim
Ao instalar o QtSpim e executá-lo, temos a tela inicial.
Para entender um pouco melhor o que temos na tela, acesse o tutorial indicado nos links úteis.
Para executar o nosso programa, clique em "Load File"
Selecione o seu programa no diretório onde ele foi salvo.
Podemos notar que foi adicionado algumas linhas de código na tela adicional. Isso é o QtSpim transformando o código criado em linguagem Pure Assembly para a simulação. Agora é só clicar no "Run/Continue" para executar o nosso programa.
Temos então no Console, o nosso programa funcionando.
Comentários