Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
FIS01069
Introdução_a_computacao_UFPB
Commits
0e3ea2fe
Commit
0e3ea2fe
authored
Jul 29, 2013
by
Eduardo de Santana Medeiros Alexandre
Browse files
apendice
parent
1f653bdf
Changes
3
Hide whitespace changes
Inline
Side-by-side
livro/capitulos/apendice-pratica-compilacao.asc
0 → 100644
View file @
0e3ea2fe
[[pratica_compilacao]]
[appendix]
== Usando os Softwares Básicos
A ferramenta `cc` é um ambiente completo para a compilação, montagem e
ligação dos programas de usuário desenvolvidos na linguagem C. Nesta
prática iremos identificar cada passo no processo de transformar um código de
alto nível (Linguagem C) em um arquivo binário executável.
NOTE: O `cc` é um compilador da GNU utilizado principalmente no sistem operacional
Linux ou de tipo Unix. Para executá-lo você precisa abrir um terminal e
escrever os comandos indicados nesta prática. Você já deve conhecê-lo da
disciplina 'Introdução a Programação'.
NOTE: Lembre-se de os códigos fontes do livro estão disponíveis para download e
as intruções de como baixá-los estão em <<codigo_fonte>>.
Passo 1:: Escreva em qualquer editor de texto os seguintes textos e salve com o
nome sugerido para cada arquivo:
+
[[src_test_h]]
[source, c]
.code/tradutor/teste.h
-------------------------------------------
include::code/tradutor/teste.h[]
-------------------------------------------
+
[[src_test_c]]
[source, c]
.code/tradutor/teste.c
-------------------------------------------
include::code/tradutor/teste.c[]
-------------------------------------------
+
[[src_main_c]]
[source, c]
.code/tradutor/main.c
-------------------------------------------
include::code/tradutor/main.c[]
-------------------------------------------
+
[TIP]
==================
Caso você tenha baixado o código deste livro, basta entrar na pasta a seguir
onde estes arquivos já existem:
livro/capitulos/code/tradutor
==================
Passo 2:: Usar o Compilador do `cc`. Ele irá processar cada arquivo .c e gerar
um arquivo .s com o código Assembly respectivo.
+
_______________
Linguagem Fonte: Linguagem C
Linguagem Alvo: Assembly
_______________
+
Comando:::: `cc -S main.c teste.c`
Passo 3:: Usar o montador da aplicação `cc`. Ele irá processar cada arquivo .s
e gerar um arquivo .o com o código objeto respectivo.
+
_______________
Linguagem Fonte: Assembly
Linguagem Alvo: Código Objeto
_______________
+
Comando:::: `cc -c main.s teste.s`
+
Os passos 2 e 3 geralmente são realizados juntos, para isso basta realizar o
seguinte comando: `cc -c main.c teste.c` . Gerando assim um arquivo com Código
Objeto (.o) para cada arquivo .c, pulando o código assembly (código
intermediário).
Passo 4:: Usar o ligador do `cc`. Ele irá processar todos os arquivos .o e
ligá-los em um único arquivo binário executável.
+
_______________
Linguagem Fonte: Código Objeto
Linguagem Alvo: Código Binário (Executável)
_______________
+
Comando:::: `cc main.o teste.o -o exec`
+
NOTE: `exec` foi o nome dado ao arquivo executável gerado pelo ligador do `cc`,
logo, o usuário pode escolher qualquer nome para o mesmo.
Passo 5:: Executar o Código Executável. No linux, para carregar um código
executável e colocá-lo em execução basta seguir o seguinte comando:
+
Comando:::: `./exec`
Passo 6:: Modificar o código do arquivo teste.c .
+
.Editar a implementação da função subtrai.
_______________________
Trocar: `return op1 - op2;`
Por: `return op1 + op2;`
_______________________
+
[NOTE]
===============
O conteúdo do arquivo `teste.c` ficará igual a:
[source, c]
.code/tradutor/teste_moficado.c
-------------------------------------------
include::code/tradutor/teste_moficado.c[]
-------------------------------------------
===============
Passo 7:: Compilar apenas o arquivo teste.c
Comando:::: `cc -c teste.c`
Passo 8:: Ligar os códigos objetos novamente.
Comando:::: `cc main.o teste.o -o exec`
Passo 9:: Executar o novo Código Executável. Observar a diferença das
execuções.
Comando:::: ./exec
IMPORTANT: Podemos observar a utilidade do software ligador, pois após o *Passo 6*
não há necessidade de recompilar todos os códigos fonte, apenas o
arquivo `teste.c`, gerando assim um novo arquivo objeto `teste.o` que será ligado
ao arquivo `main.o` (arquivo não modificado) formando o novo código
executável `exec`.
[TIP]
===============
Você pode assistir esta prática no seguinte vídeo:
.Prática de softwares básicos: http://youtu.be/dVL3XQFNY8o
ifdef::livro-pdf[]
["qrcode", size=10, scaledwidth="30%"]
-------------------------
http://youtu.be/dVL3XQFNY8o
-------------------------
endif::livro-pdf[]
ifdef::livro-html[]
+++
<?dbhtml-include href="videos/pratica-softwares-basicos.html"?>
+++
endif::livro-html[]
===============
// Sempre terminar o arquivo com uma nova linha.
livro/capitulos/tradutor.asc
View file @
0e3ea2fe
...
...
@@ -587,156 +587,6 @@ apenas executa a ação dentro de um contexto fixo, anteriormente determinado
pela compilação. Este tempo no processo de análise é conhecido como
"overhead interpretativa".
=== Usando os Softwares Básicos
A ferramenta `cc` é um ambiente completo para a compilação, montagem e
ligação dos programas de usuário desenvolvidos na linguagem C. Nesta
prática iremos identificar cada passo no processo de transformar um código de
alto nível (Linguagem C) em um arquivo binário executável.
NOTE: O `cc` é um compilador da GNU utilizado principalmente no sistem operacional
Linux ou de tipo Unix. Para executá-lo você precisa abrir um terminal e
escrever os comandos indicados nesta prática. Você já deve conhecê-lo da
disciplina 'Introdução a Programação'.
NOTE: Lembre-se de os códigos fontes do livro estão disponíveis para download e
as intruções de como baixá-los estão em <<codigo_fonte>>.
Passo 1:: Escreva em qualquer editor de texto os seguintes textos e salve com o
nome sugerido para cada arquivo:
+
[[src_test_h]]
[source, c]
.code/tradutor/teste.h
-------------------------------------------
include::code/tradutor/teste.h[]
-------------------------------------------
+
[[src_test_c]]
[source, c]
.code/tradutor/teste.c
-------------------------------------------
include::code/tradutor/teste.c[]
-------------------------------------------
+
[[src_main_c]]
[source, c]
.code/tradutor/main.c
-------------------------------------------
include::code/tradutor/main.c[]
-------------------------------------------
+
[TIP]
==================
Caso você tenha baixado o código deste livro, basta entrar na pasta a seguir
onde estes arquivos já existem:
livro/capitulos/code/tradutor
==================
Passo 2:: Usar o Compilador do `cc`. Ele irá processar cada arquivo .c e gerar
um arquivo .s com o código Assembly respectivo.
+
_______________
Linguagem Fonte: Linguagem C
Linguagem Alvo: Assembly
_______________
+
Comando:::: `cc -S main.c teste.c`
Passo 3:: Usar o montador da aplicação `cc`. Ele irá processar cada arquivo .s
e gerar um arquivo .o com o código objeto respectivo.
+
_______________
Linguagem Fonte: Assembly
Linguagem Alvo: Código Objeto
_______________
+
Comando:::: `cc -c main.s teste.s`
+
Os passos 2 e 3 geralmente são realizados juntos, para isso basta realizar o
seguinte comando: `cc -c main.c teste.c` . Gerando assim um arquivo com Código
Objeto (.o) para cada arquivo .c, pulando o código assembly (código
intermediário).
Passo 4:: Usar o ligador do `cc`. Ele irá processar todos os arquivos .o e
ligá-los em um único arquivo binário executável.
+
_______________
Linguagem Fonte: Código Objeto
Linguagem Alvo: Código Binário (Executável)
_______________
+
Comando:::: `cc main.o teste.o -o exec`
+
NOTE: `exec` foi o nome dado ao arquivo executável gerado pelo ligador do `cc`,
logo, o usuário pode escolher qualquer nome para o mesmo.
Passo 5:: Executar o Código Executável. No linux, para carregar um código
executável e colocá-lo em execução basta seguir o seguinte comando:
+
Comando:::: `./exec`
Passo 6:: Modificar o código do arquivo teste.c .
+
.Editar a implementação da função subtrai.
_______________________
Trocar: `return op1 - op2;`
Por: `return op1 + op2;`
_______________________
+
[NOTE]
===============
O conteúdo do arquivo `teste.c` ficará igual a:
[source, c]
.code/tradutor/teste_moficado.c
-------------------------------------------
include::code/tradutor/teste_moficado.c[]
-------------------------------------------
===============
Passo 7:: Compilar apenas o arquivo teste.c
Comando:::: `cc -c teste.c`
Passo 8:: Ligar os códigos objetos novamente.
Comando:::: `cc main.o teste.o -o exec`
Passo 9:: Executar o novo Código Executável. Observar a diferença das
execuções.
Comando:::: ./exec
IMPORTANT: Podemos observar a utilidade do software ligador, pois após o *Passo 6*
não há necessidade de recompilar todos os códigos fonte, apenas o
arquivo `teste.c`, gerando assim um novo arquivo objeto `teste.o` que será ligado
ao arquivo `main.o` (arquivo não modificado) formando o novo código
executável `exec`.
[TIP]
===============
Você pode assistir esta prática no seguinte vídeo:
.Prática de softwares básicos: http://youtu.be/dVL3XQFNY8o
ifdef::livro-pdf[]
["qrcode", size=10, scaledwidth="30%"]
-------------------------
http://youtu.be/dVL3XQFNY8o
-------------------------
endif::livro-pdf[]
ifdef::livro-html[]
+++
<?dbhtml-include href="videos/pratica-softwares-basicos.html"?>
+++
endif::livro-html[]
===============
=== Recapitulando
...
...
livro/livro.asc
View file @
0e3ea2fe
...
...
@@ -22,8 +22,10 @@ include::capitulos/organizacao-computador.asc[]
include::capitulos/tradutor.asc[]
include::capitulos/sistemas-operacionais.asc[]
include::capitulos/redes.asc[]
include::capitulos/apendice-pratica-compilacao.asc[]
include::capitulos/referencias.asc[]
////
Sempre manter uma linha em branco no final
////
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment