Commit 0e3ea2fe authored by Eduardo de Santana Medeiros Alexandre's avatar Eduardo de Santana Medeiros Alexandre
Browse files

apendice

parent 1f653bdf
[[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.
......@@ -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
......
......@@ -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
////
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment