Introdução a linguagem assembly MIPS


Como já foi visto anteriormente, nos Microcontrolador MIPS existem 32 registradores e para referenciar um registrador é necessário utilizar o caractere $ antes no nome dele.

Por exemplo para suponha que o nome do registrador seja v0, logo para referenciar ele no código basta escrever $v0.

As operações de leitura e escrita de dados são feitas a partir da especificação de um código de serviço (e cada um é responsável por uma chamada de sistema específica) que deve ser informado para o registrador $v0. Após informar o código de serviço, ele é interpretado pela unidade controladora da CPU e então executar a instrução solicitada no hardware.

A seguir será descrito o processo de codificação e execução de um programa.

#include <stdio.h>
 
int main() {
	printf("Hello World!\n");
	return 0;
}

Este código é compilado para um executável binário.

0100010001110110

Após gerar o binário, o sistema operacional pega essas informações e então faz o alocamento de memória para a execução do programa. O sistema operacional aloca:

  1. Segmento de pilha (Stack)
  2. Segmento de dados: armazena as variáveis
  3. Segmento de texto: armazena as instruções
  4. Heap

O exemplo abaixo mostra um código, em Assembly, imprimindo Hello World no terminal.

.data
# Definição da variável do tipo string com o caractere nulo 
hello: .asciiz "Hello World!"

.text
# Exibir o valor da variável na tela do terminal

# Carregar um valor imediato (4, código de serviço de print de string) para o registrador v0 
li $v0, 4
# Carregar o endereço de uma variável declarada no segmento de dados
la $a0, hello
syscall

Para compilar o código Assembly com o Simulador MARS, basta clicar no ícone de ferramenta:

Em seguida clicar no ícone de “play”:

E então será exibido a saída do programa na aba Run I/O:

Observação

É uma boa prática no final do código indicar que o programa executou com sucesso. Para isso é repassado o código de serviço 10 (exit) para o registrador $v0 e então fazer a chamada de sistema (syscall).

Referências