Вы находитесь на странице: 1из 4

DEP. DE ENG.

ELECTROTCNICA E DE COMPUTADORES
FACULDADE DE CINCIAS E TECNOLOGIA UNIVERSIDADE DE COIMBRA

Sistemas de Microprocessadores

Lab 1 Linguagem C e Compilao de Programas


Neste primeiro trabalho de laboratrio pretende-se dar uma breve introduo linguagem C, e dar uma viso do processo de converso de um programa em cdigo executvel.

1. Utilizao das mquinas mips.deec.uc.pt


O laboratrio tem dois servidores com base na arquitectura MIPS, que correm uma distribuio adequada de LINUX. Na primeira aula prtica, o seu professor ajud-lo- a criar uma conta onde ir trabalhar. Para se ligar ao servidor e transferir ficheiros precisa de utilizar respectivamente ssh (secure shell) e sftp. Se for utilizador Linux/Mac, para se ligar ao servidor faa

ssh mips1.deec.uc.pt (se estiver for da LAN do DEEC)


ou

ssh mips1.labs.deec.uc.pt (se estiver dentro da LAN do DEEC) ssh mips2.deec.uc.pt (se estiver for da LAN do DEEC) ssh mips2.labs.deec.uc.pt (se estiver dentro da LAN do DEEC)
conforme o servidor em que for trabalhar. Se for utilizador Windows, dever instalar os clientes ssh e sftp grtis PuTTY (http://www.putty.org/) e WinSCP (http://winscp.net), respectivamente. Estes clientes fazem exactamente o mesmo que os comandos Linux/Mac, mas usando uma interface com janelas. Como vai estar a trabalhar num servidor remoto, s tem controlo por linha de comando de terminal (no h rato). Assim, e de forma a editar os seus ficheiros de cdigo, dever usar uma das seguintes estratgias: 1. Pode editar os ficheiros localmente com o seu editor preferido (e usando rato), e transferi-los de e para o MIPS usando sftp. O WinSCP, inclusivamente, tem um editor de texto simples que actualiza remotamente o ficheiro em edio sempre que fizer save basta fazer double-click no ficheiro em causa na janela do WinSCP para o comear a editar. 2. Ter simultaneamente abertos dois terminais. Um terminal para comandos (gcc, correr executveis, etc.), e o outro terminal para editar ficheiros. Ter que usar um editor de texto localmente instalado. Recomendamos o emacs (ver comandos em material de apoio).

SMP-MEEC

Pg. 1/4

1. ano, 2. sem., 2012/13, DEEC 2013

Lab1 SMP

DEEC-FCTUC

2. Para treinar em casa utilizadores Windows


Se o seu PC tem sistema operativo Windows, e se este tiver pelo menos 1GB de memria, e o aluno no tiver oportunidade de se ligar aos servidores remotamente, pode instalar uma mquina Linux virtual. Se for ao site http://www.virtualbox.org/ poder criar um CD com a imagem do sistema Linux-Kubuntu, que ir ser instalado na caixa virtual que ir correr no seu sistema operativo. A partir daqui, poder seguir as indicaes dadas na seco que se segue.

3. Para treinar em casa utilizadores de Linux/Mac


O compilador de C da GNU j vem com a maior parte das distribuies de Linux. Para verificar a instalao faa o download do ficheiro com cdigo fonte sum_v1.c (no material da cadeira no Inforestudante) e coloque-o numa directoria; abra uma janela de terminal e coloque-se na directoria onde tem o ficheiro; crie um executvel escrevendo o seguinte comando:

gcc sum_v1.c -o sum_v1


Corra o programa chamando ./sum_v1. ( ./ essencial para que o programa corra!). Correu tudo bem? Ento est pronto para comear os laboratrios da disciplina.

4. Realizao do trabalho
Para este trabalho dever ter os ficheiros sum_v1.c e sum_v2.c, bem como todo o restante material de apoio. 1) Analise, compile e teste sum_v1.c no PC do laboratrio utilizando a flag -o para definir o nome do ficheiro de sada (neste caso um executvel). Por segurana deve guardar os seus trabalhos no servidor dos alunos no final da aula. 2) Agora utilize o compilador gcc com as flags '-E', '-S' e '-c'. No primeiro caso, algo ser escrito no ecr, enquanto nos restantes os resultados sero guardados nos ficheiros sum_v1.s e sum_v1.o, respectivamente, na mesma directoria que o ficheiro original. Leia o que aparecer no ecr e abra esses ficheiros com o editor de texto, verificando o seu contedo com ateno. Consulte os slides para conseguir explicar os resultados que obteve. 3) Concentremo-nos agora no ficheiro sum_v1.s. Edite o ficheiro e localize a instruo addu. Troque addu por subu e guarde as alteraes. Compile o ficheiro modificado at ao fim. Corra o executvel e explique os resultados observados. 4) O cdigo em sum_v1.c faz uso das funes printf() e scanf() das livrarias standard do C. Consulte as man pages (http://linuxmanpages.com/man3, que contm o ndice geral, http://linuxmanpages.com/man3/printf.3.php e tambm

SMP-MEEC

Pg. 2/4

1. ano, 2. sem., 2012/13, DEEC 2013

Lab1 SMP

DEEC-FCTUC

http://linuxmanpages.com/man3/scanf.3.php) para saber mais sobre estas funes. Altere o programa de forma ao resultado da soma ser escrito em hexadecimal. Faa a soma de dois nmeros negativos e explique o valor em hexadecimal que v impresso no ecr (representao em complementos de 2). 5) Analise, compile e teste sum_v2.c. Observe as diferenas que existem entre o cdigofonte dos dois programas. 6) Imagine que pretende disponibilizar a funo soma() para ser utilizada por mltiplos programas. Para tal deve criar um header file soma.h com a declarao da funo, e soma.c com o cdigo da funo: soma.h:

int soma(int
soma.c:

, int

);

int soma(int a, int b){ return a+b; };


O header file permite indicar a existncia de uma funo que recebe dois inteiros e devolve um inteiro, e deve ser invocado ao inicio do programa com #include soma.h, para que o pr-processador junte essas linhas ao cdigo passado ao compilador. Com essa informao, mesmo sem o cdigo da funo, podemos compilar o programa. Na fase de ligao (linkage, ou em portugus tcnico, linkagem) o cdigo-objecto tem que ser disponibilizado. 7) Crie uma nova verso do programa, sum_v3.c, que recorra funo soma() indicada pelo header file soma.h. Compile separadamente soma.o e sum_v3.o a partir de soma.c e sum_v3.c, fazendo depois a ligao com:

gcc sum_v3.o soma.o o sum_v3.exe


8) Para evitar ter que repetidamente escrever comandos longos e ter em conta as dependncias dos ficheiros, podemos recorrer ferramenta Make. Num makefile so especificados as dependncias e linhas de comando para compilao, bastando fazer make na linha de comando. O make s vai re-compilar os componentes necessrios, tendo em conta a data dos ficheiros. Para o exemplo anterior seria:

sum_v3: sum_v3.o soma.o gcc -o sum_v3 sum_v3.o soma.o sum_v3.o: sum_v3.c soma.h gcc -c sum_v3.c soma.o: soma.c gcc -c soma.c

SMP-MEEC

Pg. 3/4

1. ano, 2. sem., 2012/13, DEEC 2013

Lab1 SMP

DEEC-FCTUC

Crie o makefile com as linhas acima indicadas, grave com o nome makefile, e teste com o comando make. (Para mais informaes sobre o uso da ferramenta Make, consulte http://mrbook.org/tutorials/make/ e http://en.wikipedia.org/wiki/Makefile.)

9) Faa agora uma funo adicional, como fez para a soma, incluindo ficheiro de cdigofonte e respectivo header file. Esta funo dever receber um valor como argumento e escrever no ecr a sua converso para hexadecimal. Modifique agora o cdigo sum_v3.c (e o makefile) de forma a escrever no ecr cada uma das parcelas e o resultado da soma em hexadecimal. 10) Da mesma forma, acrescente agora uma nova funo (sempre com cdigo-fonte em ficheiro separado) que implemente uma potncia, c=ab, recorrendo a um ciclo. Faa trs verses diferentes dessa funo, cada uma usando um tipo de ciclo diferente (for, while e do-while).

SMP-MEEC

Pg. 4/4

1. ano, 2. sem., 2012/13, DEEC 2013

Вам также может понравиться