Apostila simplificada do QtSPIM Introdução O QtSPIM é

Propaganda
Apostila simplificada do QtSPIM
Introdução
O QtSPIM é um simulador que executa programas de computadores RISC (Conjunto de Instruções
Reduzido) MIPS R2000/3000. Ele pode carregar e executar arquivos contendo a linguagem
assembly dessa arquitetura.
Você pode obter esse simulador em:
– Para Windows: http://repo.jeiks.net/QtSpim.zip
– Para Linux (faça tudo como root:
– adicione em “/etc/apt/sources.list” a linha:
deb http://repo.jeiks.net jeiks main
– e execute os comandos:
apt-get update
apt-get install qtspim
Sobre a sintaxe Assembly
Os comentários iniciam com a cerquilha (#). Tudo à partir desse sinal até o fim da linha são
ignorados.
Os identificadores (assim como variáveis em outros programas) devem ser uma sequência de
caracteres, underline ( _ ) e pontos ( . ) e não podem iniciar com um número.
Rótulos podem ser declarados colocando-os no início da linha seguidos do sinal de dois pontos ( : ).
As strings devem ser escritas dentro de aspas duplas ( " )
Os caracteres especiais que podem ser utilizados dentro de strings são:
– \n → quebra de linha (Enter);
– \t → tabulação (TAB);
– \" → aspas duplas.
Obs.: Utilize somente caracteres sem acento.
O código de seu programa deve ser organizado em seções, onde deve-se escrever a diretiva
necessária e depois seu código:
.data
→ abriga os itens que devem ser armazenados no segmento de dados.
.text
→ abriga as instruções que deverão ser executadas no seu programa.
Para facilitar a programação, existem as seguintes diretivas, que podem ser armazenadas após
".data" e antes de ".text":
.ascii "str"
→ Armazena a string "str" na memória, sem terminá-la com "\0" (NULL)
.asciiz "str"
→ Armazena a string "str\0" na memória, terminando-a com "\0" (NULL)
.byte 1, 2, ..., N
→ Armazena os N valores sucessivos (1,2,...,N) de bytes na memória
.globl sym
→ Declara sym como global, permitindo-o ser utilizado por outros arquivos
(também pode ser utilizada após a diretiva ".text")
.spcace n
→ Armazena n bytes de espaço neste segmento de memória
.word 1, 2, ..., N
→ Armazena as N palavras (1,2,...,N) sucessivamente na memória
(também pode ser utilizada após a diretiva ".text")
Além disso, seu programa pode fazer chamadas de sistema. Para utilizá-las, deve-se definir o
número da chamada dentro de "$v0" e inserir seus argumentos ou obter seus resultados à partir de
um padrão. Os principais são apresentados na tabela abaixo:
Serviço
Código da chamada
Argumentos
Imprimir inteiro
1
$a0 = inteiro
Imprimir string
4
$a0 = endereço da string
Ler inteiro
5
Ler string
8
exit
10
Retorno
Inteiro dentro de $v0
$a0 = onde será salva
$a1 = tamanho a ler
Exemplo: imprimir na tela.
As principais instruções a serem utilizadas no simulador são (O Src pode ser um registrador ou um
imediato: inteiro de 16 bits):
li Registrador, Inteiro # define o Registrador igual ao inteiro
la Registrador, rótulo # define o Registrador com o valor do endereço do rótulo
syscall
# faz a chamada de sistema
add
# Define Rdest igual à (Reg - Src)
Rdest, Reg, Src
addi Rdest, Reg, Imed
# Define Rdest igual à (Reg - Imediato)
sub
Rdest, Reg, Src
# Define Rdest igual à (Reg - Src)
slt
Rdest, Reg, Src
# Define Rdest igual à 1 se (Reg < Src)
slti Rdest, Reg, Imed
# Define Rdest igual à 1 se (Reg < Imediato)
beq
Reg, Src, Rótulo
# Salta para o endereço de Rótulo se (Reg == Src)
bne
Reg, Src, Rótulo
# Salta para o endereço de Rótulo se (Reg != Src)
jr
Reg
jal
Rótulo # Salta incondicionalmente para a instrução do endereço de Rótulo
jalr Reg
# Salta incondicionalmente para a instrução do endereço de Rótulo
# Salta incondicionalmente p/ a instrução do endereço dentro de Reg
Obs.: jal e jalr salvam em $ra o valor do endereço da instrução de retorno
Mais um exemplo: fazer um laço de 1 à 100, imprimindo os números na tela
Mais exemplos na próxima apostila.
Abraços
Download