Tutorial MARS
Tutorial MARS
Tutorial MARS
Fundamentação 1
O MARS (MIPS Assembler and Runtime Simulator) é um
programa simulador do processador MIPS 32 bits especialmente 2
desenvolvido para fins educacionais. Este simulador caracteriza-se
por ser uma máquina virtual, isto é, um programa que implementa a
arquitetura de um determinado processador (no caso o MIPS) em uma
arquitetura distinta (em nosso caso o IA-32), sendo semelhante ao 3
simulador SPIM. O simulador MARS pode ser obtido acessando o
seguinte endereço:
Figura 1. Janela de Edição do MARS
http://courses.missouristate.edu/KenVollmar/MARS/
Nas Figuras 1 e 2, as principais características da interface do Exercícios para o Entendimento do MARS
MARS são ilustradas, sendo elas: A seguir são propostos exercícios para entendimento da interface do
1. Menus e Atalhos. MARS, fixação das instruções e aprendizagem de conceitos gerais de
organização de computadores. Cabe salientar que os valores
2. Modo de visualização: edição ou execução. numéricos escritos em linguagem de montagem são, por default,
3. Editor: para a programação da linguagem de montagem. decimais. Para a introdução de valores hexadecimais deve-se
preceder o valor or exemplo, 0x89AACF1B).
4. Outros Atalhos: principais menus e atalhos que possibilitam a
montagem das instruções simbólicas, a execução do código Sugestão
binário e a configuração da velocidade de execução. programas dos exercícios a serem resolvidos.
5. Registers: mostra os valores armazenados nos registradores de
propósito geral do MIPS. Exercício 1: Leitura/Escrita de um byte na memória
6. Text Segment: corresponde à área de memória onde é alocado o a) Crie um novo arquivo no editor do MARS (selecione o menu File
código do programa. Abaixo do título Bkpt (break point), é New) com o seguinte código:
possível selecionar a linha de código na qual deseja-se inserir
.text # Define o início do Text Segment
uma parada de execução.
.globl main # Define o início do código do usuário
7. Labels: apresenta os endereços de memória que correspondem main: # Label que define o início do código do usuário
aos endereços simbólicos (labels) usados no código. add $s0,$zero,$gp # Copia o valor de $gp no registrador $s0
8. Data Segment: mostra os valores armazenados na memória. O lw $t0, 0($s0) # Copia a palavra da posição de memória [$s0] p/ $t0
conteúdo visualizado dependerá do contexto selecionado sw $t1, 4($s0) # Copia a o valor de $t1 para a posição de memória
através da combo-box no rodapé da janela Data Segment. Por indicada por [$s0+4]
exemplo, a opção .data refere-se ao segmento de dados estáticos Observações:
usados pelo programa aplicativo. Já a opção sp refere-se ao O símbolo #
segmento de dados dinâmicos que armazena a estrutura de comentário e será ignorado pelo montador.
dados chamada de pilha (stack), que é crucial no suporte à O registrador $gp (global pointer) é utilizado para o acesso ao
chamada de procedimentos e, na opção .kdata refere-se ao segmento de dados estáticos do programa aplicativo (normalmente
segmento de dados de uso reservado para o núcleo (kernel) do ele é inicializado pelo sistema operacional para apontar para o meio
sistema operacional. O usuário comum desenvolve programas do segmento de dados estáticos).
aplicativos e, por isso, deve trabalhar na área de dados na região
.data.
9. Message: contém as mensagens geradas pelo MARS para o
usuário.
6 7 5
9
Figura 2. Janela de Execução do MARS.
1
b) Salve o seu programa com a extensão .s, .asm ou .txt usando o
menu File Save As. Por exemplo, Exemplo1.txt. A seguir, selecione a
. Nesse momento, o simulador MARS muda
para o modo execução, mostrando a janela Text Segment com o
conteúdo digitado na coluna mais à direita, conforme mostrado na
Figura 3.
Figura 4. Visualização do valor inicial atribuído ao registrador $gp.
Endereço de memória (32 bits)
Código de máquina (32 bits)
Código simbólico básico