0% acharam este documento útil (0 voto)
69 visualizações3 páginas

Apostila SPIM

Este documento fornece uma introdução ao simulador QtSPIM, que executa programas na linguagem assembly MIPS. Ele explica como obter o simulador, detalha a sintaxe básica da linguagem assembly como rótulos, comentários e strings, e apresenta diretivas e instruções importantes como li, la, syscall, add e beq. Finalmente, fornece um exemplo de laço para imprimir números de 1 a 100.

Enviado por

Zua Dos Santos
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
69 visualizações3 páginas

Apostila SPIM

Este documento fornece uma introdução ao simulador QtSPIM, que executa programas na linguagem assembly MIPS. Ele explica como obter o simulador, detalha a sintaxe básica da linguagem assembly como rótulos, comentários e strings, e apresenta diretivas e instruções importantes como li, la, syscall, add e beq. Finalmente, fornece um exemplo de laço para imprimir números de 1 a 100.

Enviado por

Zua Dos Santos
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 3

Apostila simplificada do QtSPIM

Introduo
O QtSPIM um simulador que executa programas de computadores RISC (Conjunto de Instrues
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 (faa 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 comentrios iniciam com a cerquilha (#). Tudo partir desse sinal at o fim da linha so
ignorados.
Os identificadores (assim como variveis em outros programas) devem ser uma sequncia de
caracteres, underline ( _ ) e pontos ( . ) e no podem iniciar com um nmero.
Rtulos podem ser declarados colocando-os no incio 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 so:
\n quebra de linha (Enter);
\t tabulao (TAB);
\" aspas duplas.
Obs.: Utilize somente caracteres sem acento.
O cdigo de seu programa deve ser organizado em sees, onde deve-se escrever a diretiva
necessria e depois seu cdigo:
.data
abriga os itens que devem ser armazenados no segmento de dados.
.text
abriga as instrues que devero ser executadas no seu programa.
Para facilitar a programao, existem as seguintes diretivas, que podem ser armazenadas aps
".data" e antes de ".text":
.ascii "str"
Armazena a string "str" na memria, sem termin-la com "\0" (NULL)

.asciiz "str"
Armazena a string "str\0" na memria, terminando-a com "\0" (NULL)
.byte 1, 2, ..., N
Armazena os N valores sucessivos (1,2,...,N) de bytes na memria
.globl sym
Declara sym como global, permitindo-o ser utilizado por outros arquivos
(tambm pode ser utilizada aps a diretiva ".text")
.spcace n
Armazena n bytes de espao neste segmento de memria
.word 1, 2, ..., N
Armazena as N palavras (1,2,...,N) sucessivamente na memria
(tambm pode ser utilizada aps a diretiva ".text")
Alm disso, seu programa pode fazer chamadas de sistema. Para utiliz-las, deve-se definir o
nmero da chamada dentro de "$v0" e inserir seus argumentos ou obter seus resultados partir de
um padro. Os principais so apresentados na tabela abaixo:
Servio

Cdigo da chamada

Argumentos

Imprimir inteiro

$a0 = inteiro

Imprimir string

$a0 = endereo da string

Ler inteiro

Ler string

exit

10

Retorno

Inteiro dentro de $v0


$a0 = onde ser salva
$a1 = tamanho a ler

Exemplo: imprimir na tela.

As principais instrues a serem utilizadas no simulador so (O Src pode ser um registrador ou um


imediato: inteiro de 16 bits):
li Registrador, Inteiro # define o Registrador igual ao inteiro
la Registrador, rtulo # define o Registrador com o valor do endereo do rtulo

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, Rtulo

# Salta para o endereo de Rtulo se (Reg == Src)

bne

Reg, Src, Rtulo

# Salta para o endereo de Rtulo se (Reg != Src)

jr

Reg

jal

Rtulo # Salta incondicionalmente para a instruo do endereo de Rtulo

jalr Reg

# Salta incondicionalmente para a instruo do endereo de Rtulo

# Salta incondicionalmente p/ a instruo do endereo dentro de Reg

Obs.: jal e jalr salvam em $ra o valor do endereo da instruo de retorno

Mais um exemplo: fazer um lao de 1 100, imprimindo os nmeros na tela

Mais exemplos na prxima apostila.


Abraos

Você também pode gostar