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:
- Segmento de pilha (Stack)
- Segmento de dados: armazena as variáveis
- Segmento de texto: armazena as instruções
- 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
syscallPara 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$v0e então fazer a chamada de sistema (syscall).