Arquitetura de Computadores - Tutorial SPIM
description
Transcript of Arquitetura de Computadores - Tutorial SPIM
-
ACLEI 1/3 1.ano/2.sem.,2009/2010,DEEC2010
ArquitecturadeComputadoresDEPARTAMENTODEENGENHARIAELECTROTCNICAEDECOMPUTADORES
FACULDADEDECINCIAETECNOLOGIAUNIVERSIDADEDECOIMBRA
Lab5
LinguagemAssemblyparaMIPSesimuladorSPIM
Objectivo: Inicializao programao em assembly para MIPS com recurso aosimuladorSPIM
1. InstalaodoSPIMO SPIM um simulador do processadorMIPS que permite executar programas em
assemblyparaMIPS32.Temalgumas funcionalidades simplesdedebuggereumconjuntobsicode funesdesistemasoperativoparaentrada/sada.OSPIMnoexecutaficheirosbinrios(compilados).
NapginadacadeiraencontraolinkparaoSPIM1,ondepodeencontrarversesparadiferentesplataformaseinstruesdeinstalao.NosPCsdoslaboratriosestinstaladaaverso PCSPIM para Microsoft Windows, semelhante verso XPSIM em Linux. Odocumento Getting StartedwithPCSpim2descreveo funcionamentoda versoPCSPIM.Como referncia do conjunto de instruesMIPS32 e do SPIM tem namesma pgina odocumentoAppendixA:Assemblers,Linkers,andtheSPIMSimulator3.
2. CorrerprogramasnoSPIMOSPIMumsimuladorque leexecutaprogramasescritosem linguagemassembly
MIPS32, disponibilizando um debugger simples e um conjunto mnimo de servios dosistemaoperativo.OSPIMnoexecutaprogramasbinrios.
OsprogramasemassemblyMIPSparacorreremnoSPIMdevemficaremficheirosdetextocomaextenso*.s.Aexecuodoprogramatemincionolabelmain:(talcomoemC) e termina com jr $ra.O registo $ra fica sempre com o endereo de retorno aochamarumafuno,eomainteminadamesmaformaquequalqueroutrafuno.
Depoisde iniciaroPCSIM4,deve carregaro seuprogramanoboto LoadoumenuFile/Load. No menu Simulator existem diversas ferramentas que permitem controlar aexecuo do programa, assim como tambm alterar registos e memria. A janela doprogramaestdivididaemquatropainis,sendoapresentadosnopaineldecimaosvalores
1SPIMAMIPS32Simulator:http://pages.cs.wisc.edu/~larus/spim.html2http://pages.cs.wisc.edu/~larus/PCSpim.pdf(MSWindowsversion)3http://pages.cs.wisc.edu/~larus/HP_AppA.pdf4Ao instalar em Windows o PCSPIM deve verificar se, depois de iniciar o programa, no menuSimulator/Settings tem Loadexception fileC:\Programas\PCSpim\exceptions.s.TenhaematenoqueemplataformasWindows64bits,deverprocuraremC:\Programas(x86)
-
Lab5AC DEEC/FCTUC
ACLEI 2/3 1.ano/2.sem.,2009/2010,DEEC2010
de todos os registos; os dois painis imediatamente abaixo apresentam as instrues doprograma e os dados, respectivamente; o ltimo painel dedicado s mensagens doPCSpim. Para informaes mais detalhadas consulte o documento Getting Started withPCSpim.
Para testar a sua instalao execute o programa lab5_hello.s, que deve escrever afraseHelloLab5naconsolaeterminar.Leiacomcuidadooprogramaparaperceberoseufuncionamento.AltereapenasumainstruodoprogramaparaescreverHelloLab6.
3. UmpequenoprogramaparaMIPSEscrevaumpequenoprogramalab5_3.sque,dadososvaloresem$s0e$s1,coloque
nos registos temporrios $t0 a $t4 os seguintes valores (considere que os valores tmmenosde32bits):
$t0 = $s0 $t1 = $s1 $t2 = $t0 + $t1 $t3 = 2 $t2 #permetro $t4 = $t0 $t1 #rea Paratestaroprograma,recorraaoSimulator/Setparacolocarnsregistos$s0e$s1os
valoresiniciais,etesteoprogramapassoapasso(podecolocarumbreakpointnoinciodoprogramaedepoisfazerSingleStep).
4. DebugdeumprogramaparaMIPSDescubraoserrosnociclodoprogramalab5_4.s.Ociclodeviacopiarumasequncia
de inteirosapartirdoendereodememria$a0paraumazonaapartirdoendereodememria$a1,parandoaolerumvalorazero.Onmerodeinteiroscopiados(atencontrarozero,semcontarcomozero),deveficarem$v0.
OprogramacorrespondecompilaodoseguinteprogramaemC:#include 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.
-
Lab5AC DEEC/FCTUC
ACLEI 3/3 1.ano/2.sem.,2009/2010,DEEC2010
5. CompilarCmoparaMIPSassemblyConvertaparaassemblyetestenoSPIMosseguintesprogramasemC: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