Académique Documents
Professionnel Documents
Culture Documents
DEPARTAMENTODEENGENHARIAELECTROTCNICAEDECOMPUTADORES
FACULDADEDECINCIAETECNOLOGIA
UNIVERSIDADEDECOIMBRA
Lab5
LinguagemAssemblyparaMIPSesimuladorSPIM
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
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