Vous êtes sur la page 1sur 3

ArquitecturadeComputadores

DEPARTAMENTODEENGENHARIAELECTROTCNICAEDECOMPUTADORES
FACULDADEDECINCIAETECNOLOGIA
UNIVERSIDADEDECOIMBRA

Lab5
LinguagemAssemblyparaMIPSesimuladorSPIM

Objectivo: Inicializao programao em assembly para MIPS com recurso ao


simuladorSPIM

1. InstalaodoSPIM
O SPIM um simulador do processador MIPS que permite executar programas em
assembly para MIPS32. Tem algumas funcionalidades simples de debugger e um conjunto
bsicodefunesdesistemasoperativoparaentrada/sada.OSPIMnoexecutaficheiros
binrios(compilados).
NapginadacadeiraencontraolinkparaoSPIM1,ondepodeencontrarversespara
diferentesplataformaseinstruesdeinstalao.NosPCsdoslaboratriosestinstaladaa
verso PCSPIM para Microsoft Windows, semelhante verso XPSIM em Linux. O
documento Getting Started with PCSpim2 descreve o funcionamento da verso PCSPIM.
Como referncia do conjunto de instrues MIPS32 e do SPIM tem na mesma pgina o
documentoAppendixA:Assemblers,Linkers,andtheSPIMSimulator3.

2. CorrerprogramasnoSPIM
OSPIMumsimuladorqueleexecutaprogramasescritosemlinguagemassembly
MIPS32, disponibilizando um debugger simples e um conjunto mnimo de servios do
sistemaoperativo.OSPIMnoexecutaprogramasbinrios.
OsprogramasemassemblyMIPSparacorreremnoSPIMdevemficaremficheirosde
textocomaextenso*.s.Aexecuodoprogramatemincionolabelmain:(talcomoem
C) e termina com jr $ra. O registo $ra fica sempre com o endereo de retorno ao
chamarumafuno,eomainteminadamesmaformaquequalqueroutrafuno.
Depois de iniciar o PCSIM4, deve carregar o seu programa no boto Load ou menu
File/Load. No menu Simulator existem diversas ferramentas que permitem controlar a
execuo do programa, assim como tambm alterar registos e memria. A janela do
programaestdivididaemquatropainis,sendoapresentadosnopaineldecimaosvalores

SPIMAMIPS32Simulator:http://pages.cs.wisc.edu/~larus/spim.html
http://pages.cs.wisc.edu/~larus/PCSpim.pdf(MSWindowsversion)
3
http://pages.cs.wisc.edu/~larus/HP_AppA.pdf
4
Ao instalar em Windows o PCSPIM deve verificar se, depois de iniciar o programa, no menu
Simulator/Settings tem Load exception file C:\Programas\PCSpim\exceptions.s. Tenha em ateno que em
plataformasWindows64bits,deverprocuraremC:\Programas(x86)
2

ACLEI

1/3

1.ano/2.sem.,2009/2010,DEEC2010

Lab5AC

DEEC/FCTUC

de todos os registos; os dois painis imediatamente abaixo apresentam as instrues do


programa e os dados, respectivamente; o ltimo painel dedicado s mensagens do
PCSpim. Para informaes mais detalhadas consulte o documento Getting Started with
PCSpim.
Para testar a sua instalao execute o programa lab5_hello.s, que deve escrever a
fraseHelloLab5naconsolaeterminar.Leiacomcuidadooprogramaparaperceberoseu
funcionamento.AltereapenasumainstruodoprogramaparaescreverHelloLab6.

3. UmpequenoprogramaparaMIPS
Escrevaumpequenoprogramalab5_3.sque,dadososvaloresem$s0e$s1,coloque
nos registos temporrios $t0 a $t4 os seguintes valores (considere que os valores tm
menosde32bits):
$t0
$t1
$t2
$t3
$t4

=
=
=
=
=

$s0
$s1
$t0 + $t1
2 $t2
$t0 $t1

#permetro
#rea

Paratestaroprograma,recorraaoSimulator/Setparacolocarnsregistos$s0e$s1os
valoresiniciais,etesteoprogramapassoapasso(podecolocarumbreakpointnoinciodo
programaedepoisfazerSingleStep).

4. DebugdeumprogramaparaMIPS
Descubraoserrosnociclodoprogramalab5_4.s.Ociclodeviacopiarumasequncia
de inteiros a partir do endereo de memria $a0 para uma zona a partir do endereo de
memria$a1,parandoaolerumvalorazero.Onmerodeinteiroscopiados(atencontrar
ozero,semcontarcomozero),deveficarem$v0.
OprogramacorrespondecompilaodoseguinteprogramaemC:
#include <stdio.h>
int source[] = {2, 1, 4, 8, 5, 9, 0};
int dest[10];
int main ( ) {
int k;
for (k=0; source[k]!=0; k++) {
dest[k] = source[k];
}
printf ("%d values copied\n", k);
return 0;
}

Crieumaversocorrigidadoprograma,lab5_4ok.s,etestenovamente.
Altereagoraocdigoobtidodeformaaapenasfaaacontagemdosnmerospares
contadoseguardecomolab3_4par.s.
ACLEI

2/3

1.ano/2.sem.,2009/2010,DEEC2010

Lab5AC

DEEC/FCTUC

5. CompilarCmoparaMIPSassembly
ConvertaparaassemblyetestenoSPIMosseguintesprogramasemC:

1)
if($s3!=0)
$s1=$s0;
else
$s1=2;

2)
if($s0>0)
printf(OK);
else
printf(No);

Dica:Analiseoprogramainicialdetesteparavercomoescrevernaconsola.

3)
if($s1>8)
$s1=$s1+15;
else
$s1=$s1-8;

4)
for($s1=0;$s1<=10;$s1++){
printf(Conta %d \n,$s1);
}

Dica:Analiseoprogramainicialdetesteparavercomoescrevernaconsola.

ACLEI

3/3

1.ano/2.sem.,2009/2010,DEEC2010

Vous aimerez peut-être aussi