aula 23: noções de compilação, montagem, link-edição, e...

32
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego Passos Universidade Federal Fluminense Fundamentos de Arquiteturas de Computadores Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 1 / 30

Upload: others

Post on 17-Jul-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Aula 23: Noções de Compilação, Montagem, Link-edição, eInterpretação

Diego Passos

Universidade Federal Fluminense

Fundamentos de Arquiteturas de Computadores

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 1 / 30

Page 2: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Revisão

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 2 / 30

Page 3: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Nas Aulas Anteriores. . .

Falamos sobre linguagens de montagem.▶ Linguagens de baixo nível.▶ Forte correspondência com as instruções do processador.▶ Facilitam tarefa de desenvolver programas.

⋆ Não é preciso “escovar” bits.

Definimos uma linguagem de montagem para o nosso processador.E vimos como usá-la para escrever programas simples.

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 3 / 30

Page 4: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Na Aula de Hoje. . .

Vamos falar sobre o processo de tradução de um código-fonte em linguagem de altonível para as instruções executadas pelo processador.Vamos discutir as várias etapas deste processo.

▶ Compilação.▶ Montagem.▶ Link-edição.▶ Carregamento.

Discussão apenas introdutória.

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 4 / 30

Page 5: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Motivação e Visão Geral

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 5 / 30

Page 6: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Por Que Linguagens de Alto Nível?

O advento das linguagens de montagem simplificou a tarefa de programação.▶ Programador não era mais forçado a lidar diretamente com os bits das instruções.▶ Complicadores, como endereços de saltos, eram tratados automaticamente.

⋆ Através de labels com nomes intuitivos.

Houve algum ganho em portabilidade também.▶ Se o conjunto de instruções e a linguagem de montagem fossem compatíveis, código podia

ser aproveitado.

Mas isso é suficiente?

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 6 / 30

Page 7: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Por Que Linguagens de Alto Nível? (II)

Programar no nível de instruções de máquina ainda é árduo.▶ Instruções muito elementares.▶ Tarefas complexas requerem longas sequências de instruções.▶ Trechos de código podem facilmente gerar efeitos colaterais.

⋆ Nem sempre desejados ou esperados.

Depuração e manutenção do código também são problemáticas.▶ Códigos longos e com baixa legibilidade.▶ Código não é facilmente mapeável para os algoritmos implementados.

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 7 / 30

Page 8: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Por Que Linguagens de Alto Nível? (III)

Idealmente, gostaríamos de um linguagem que:▶ Fosse mais compacta: código-fonte menor.▶ Fosse mais legível: representação mais direta dos algoritmos.▶ Possuísse macro-comandos: tarefas comuns descritas em “uma linha”.▶ Permitisse abstrações: utilização de conceitos/estruturas mais abstratas, distantes do

hardware real.▶ Permitisse fácil portabilidade: mesmo código-fonte, diferentes processadores.

Estas necessidades deram origem às Linguagens de Alto Nível.

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 8 / 30

Page 9: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Linguagens de Alto Nível: Exemplos

int factorial(int n) {if (n == 0)

return 1;else

return n * factorial (n - 1);}

(defun factorial (n)(if (= n 0)

1(* n (factorial (- n 1))) ) )

function fact(n: integer): longint;begin

if (n = 0) thenfact := 1

elsefact := n * fact(n - 1);

end;

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 9 / 30

Page 10: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Linguagens de Alto Nível: Código-Fonte vs. Código Executável

Os “comandos” de uma linguagem de alto nível são muito complexos para osprocessadores.É preciso “quebrá-los” em instruções mais básicas.A tarefa de transformar um código-fonte em linguagem de alto nível para um códigoexecutável é automatizada.

▶ Feita por outros programas já prontos.Normalmente, atribuímos esta tarefa a um programa chamado de compilador.

▶ Mas esta afirmação não é correta.▶ É uma simplificação de um processo mais complexo.

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 10 / 30

Page 11: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Processo de Geração do Executável

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 11 / 30

Page 12: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Detalhando as Etapas

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 12 / 30

Page 13: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Processo de Geração do Executável: Compilação

Primeira fase do processo.Consiste da tradução da linguagem de alto nível para a linguagem de montagem doprocessador.

▶ Mas os bits das instruções ainda não são gerados.A compilação, por sua vez, é dividida em etapas:

▶ Análise léxica.▶ Análise sintática.▶ Análise de escopo e tipos.▶ Geração de código.▶ Otimização.

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 13 / 30

Page 14: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Processo de Geração do Executável: Compilação (II)

As fases de análise (léxica, sintática, escopo e tipos) verificam se o código-fonte é válido.Nesta fase, são acusados erros como:

▶ Caracteres inválidos (erro léxico).▶ Falta de ponto-e-vírgula (erro sintático).▶ Variável não declarada (erro de escopo).▶ Incompatibilidade de tipos (erro de tipo).

⋆ e.g., tentar atribuir um valor real a uma variável do tipo string.

Em caso de erros, o compilador não é capaz de “entender” o programa.▶ Tradução é impossível.

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 14 / 30

Page 15: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Processo de Geração do Executável: Compilação (III)

A geração de código é onde a tradução em si ocorre.▶ A semântica do código-fonte é analisada pelo compilador.▶ Sequências de instruções na linguagem de montagem são geradas, correspondendo à mesma

semântica.Código em linguagem de montagem deve necessariamente ter a mesma semântica docódigo em alto nível.

▶ Fazer tudo o que o código-fonte original descreve.▶ E apenas o que ele descreve.

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 15 / 30

Page 16: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Processo de Geração do Executável: Compilação (IV)

A última etapa da compilação é a otimização.Compilador verifica se código em linguagem de montagem pode ser melhorado.

▶ Sem alterar sua semântica.Exemplos de técnicas de otimização de código:

▶ Expandir repetições.▶ Alterar ordem de instruções para evitar flushes do pipeline.▶ Detectar (e excluir) “código morto”.▶ Alterar ordem de acesso à memória para melhorar acerto da cache.

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 16 / 30

Page 17: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Processo de Geração do Executável: Montagem

Uma vez gerado traduzido da linguagem de alto nível para a linguagem de montagem,código precisa ser montado.Isto é, algum programa precisa traduzi-lo da representação textual para os bits dasinstruções.Este programa é chamado de montador.

▶ Ou assembler, em inglês.Mas a saída do montador ainda não é o código executável final.

▶ É o chamado código-objeto.

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 17 / 30

Page 18: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Processo de Geração do Executável: Montagem (II)

Dentre as tarefas do montador, podemos citar:▶ Substituir mnemônicos e outros identificadores textuais por correspondentes numéricos (e.g.,

opcodes).▶ Substituir labels por endereços de memória numéricos.▶ Reservar espaço de memória para instruções e dados.▶ Converter constantes numéricas para representações binárias.▶ Examinar correção das instruções.

⋆ e.g., se constantes numéricas não são grandes demais.⋆ e.g., se identificadores dos registradores são válidos.

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 18 / 30

Page 19: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Processo de Geração do Executável: Link-Edição

Programas em linguagens de alto nível raramente são auto-contidos.▶ Isto é, nem todas as “instruções” a serem executadas se encontram descritas no código-fonte.

É comum usarmos bibliotecas.▶ Conjuntos de funções externas.▶ Disponíveis para facilitar a escrita dos programas.▶ e.g., funções para impressão de mensagens em tela.

Em algum ponto da geração do código executável, alguém precisa substituir estasreferências pelas instruções correspondentes.

▶ Papel do ligador ou linkeditor.▶ Ou ainda linker, em inglês.

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 19 / 30

Page 20: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Processo de Geração do Executável: Link-Edição (II)

Linkeditor recebe como entrada conjunto de arquivos de código-objeto.Embora individualmente cada arquivo não seja auto-contido, em conjunto eles precisamser.

▶ Isto é, todas as referências precisam ser resolvidas para sequências de instruções presentes noconjunto.

Linkeditor pega os trechos relevantes de cada arquivo e monta um único arquivo.▶ O Arquivo Executável.

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 20 / 30

Page 21: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

O Loader

Após a link-edição, o programa executável é armazenado na forma de uma arquivo.Este arquivo normalmente é armazenado em alguma memória não-volátil.

▶ HD, pendrive, cartão de memória. . .Antes de executarmos o programa, precisamos carregar as instruções do arquivo para aMP.

▶ Tarefa realizada por um programa especial, chamado loader.▶ Cada SO possui seu próprio loader.

Tecnicamente, esta etapa não faz parte do processo de geração do executável.▶ Mas ela pode auxiliar em um caso particular.▶ Chamado de ligação dinâmica.

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 21 / 30

Page 22: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Ligação Dinâmica vs. Estática

Quando o link-editor inclui o código de uma função externa no executável gerado,dizemos que houve uma ligação estática.Nem sempre ele faz isso.

▶ Algumas vezes, é interessante não fazer esta inclusão.Ao invés disso, usamos a chamada ligação dinâmica.

▶ O executável gerado possui apenas uma referência à função externa necessária.▶ O loader, ao carregar o executável, carrega também o código da biblioteca que implementa a

função externa.▶ Processo ocorre apenas quando o programa é executado.▶ E precisa ser refeito a cada nova execução.

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 22 / 30

Page 23: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Ligação Dinâmica vs. Estática (II)

Mas por que quereríamos usar ligação dinâmica?

Uma das principais vantagens é a redução do tamanho do arquivo executável.▶ Se adicionarmos o código de todas as funções externas, o executável aumenta.

Algumas funções/bibliotecas são comuns a vários programas em um mesmo computador.▶ e.g., quantos programas em Pascal não usam a função println()?

Ao invés de replicar o código destas funções em todos os programas, guardamos estecódigo na forma de uma Biblioteca Compartilhada.

▶ Arquivos .dll no windows e .so no Linux.

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 23 / 30

Page 24: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Ligação Dinâmica vs. Estática (II)

Mas por que quereríamos usar ligação dinâmica?Uma das principais vantagens é a redução do tamanho do arquivo executável.

▶ Se adicionarmos o código de todas as funções externas, o executável aumenta.Algumas funções/bibliotecas são comuns a vários programas em um mesmo computador.

▶ e.g., quantos programas em Pascal não usam a função println()?Ao invés de replicar o código destas funções em todos os programas, guardamos estecódigo na forma de uma Biblioteca Compartilhada.

▶ Arquivos .dll no windows e .so no Linux.

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 23 / 30

Page 25: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Interpretação

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 24 / 30

Page 26: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Interpretação

Programas em linguagens como C e Pascal precisam ser traduzidos para formatosexecutáveis.Mas nem toda linguagem funciona assim.Em algumas linguagens, usamos o conceito de interpretador.

▶ Chamadas de Linguagens Interpretadas.Estas linguagens não são previamente traduzidas.

▶ Ao contrário, um programa especial, chamado interpretador, lê o código-fonte e o executadiretamente.

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 25 / 30

Page 27: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Interpretação (II)

Embora seja um processo diferente, o interpretador guarda semelhanças com umcompilador.

▶ Fases de análise léxica, sintática e de escopo e tipo são também executadas.▶ Mas o interpretador faz isso linha a linha (ou bloco a bloco) durante a execução.

Há várias linguagens interpretadas bastante utilizadas.Exemplos:

▶ Python.▶ Perl.▶ TCL.▶ Bash, sh, e similares.▶ Matlab.▶ Javascript.▶ PHP.▶ . . .

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 26 / 30

Page 28: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Linguagens Interpretadas vs. Compiladas

Programas em linguagens interpretadas apresentam vantagens:▶ São normalmente bastante portáveis.

⋆ Se o interpretador existe, o programa irá rodar.▶ Podem ser pequenos, comparados com correspondentes compilados.

⋆ Muito da complexidade recai sobre o interpretador.

Mas há desvantagens?

▶ Execução é mais lenta, por ocorrer concomitantemente com a interpretação.▶ Requer mais memória, por depender do carregamento do interpretador.▶ Alguns erros facilmente detectáveis via compilação podem demorar a se manifestar na

execução.

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 27 / 30

Page 29: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Linguagens Interpretadas vs. Compiladas

Programas em linguagens interpretadas apresentam vantagens:▶ São normalmente bastante portáveis.

⋆ Se o interpretador existe, o programa irá rodar.▶ Podem ser pequenos, comparados com correspondentes compilados.

⋆ Muito da complexidade recai sobre o interpretador.

Mas há desvantagens?▶ Execução é mais lenta, por ocorrer concomitantemente com a interpretação.▶ Requer mais memória, por depender do carregamento do interpretador.▶ Alguns erros facilmente detectáveis via compilação podem demorar a se manifestar na

execução.

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 27 / 30

Page 30: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Usar Assembly ou Linguagem de Alto Nível?

Como um programador, em que linguagem você deve programar?▶ Em uma linguagem de alto nível?▶ Ou diretamente na linguagem de montagem (assembly)?

Na enorme maioria das vezes, a resposta é fácil.Linguagens de alto nível apresentam muitas vantagens:

▶ Maior legibilidade.▶ Maior portabilidade.▶ Maior modularidade.▶ Código-fonte menor.▶ Melhores abstrações.▶ . . .

Então para que estudamos linguagem de montagem?

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 28 / 30

Page 31: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Usar Assembly ou Linguagem de Alto Nível? (II)

Em certos nichos específicos de programação, a linguagem de montagem ainda é umaescolha comum.Alguns possíveis motivos:

▶ Programas compilados ainda precisam ser traduzidos para instruções.⋆ Logo, precisamos de compiladores e de quem os escreva.

▶ Em algumas plataformas, é a única linguagem disponível.⋆ Já foi mais comum, mas ainda acontece.

▶ Permite controle sobre exatamente quais instruções serão executadas.⋆ Importante em certos códigos particulares.⋆ Ocorre, por exemplo, em certas partes do código de um SO.

▶ Implementação diretamente em linguagem de montagem pode ser mais eficiente.⋆ e.g., código menor, programa mais rápido.

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 29 / 30

Page 32: Aula 23: Noções de Compilação, Montagem, Link-edição, e ...diego/disciplinas/2015_1/FAC/...Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação Diego

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Assembly e Desempenho

É preciso cuidado ao fazer afirmações sobre a eficiência de programas em assembly vs.linguagens de alto nível.Assembly certamente permite mais controle sobre o código executável final.

▶ Mas isso pode ser bom ou ruim.

Um programador experiente em assembly pode ser capaz de gerar um código maiseficiente para uma tarefa particular.Por outro lado, métodos de otimização de código em compiladores se tornam cada vezmais eficazes.

▶ É comum que código gerado por um compilador seja mais eficiente que aquele escrito emassembly por um “programador médio”.

Diego Passos (UFF) Compilação, Montagem, Link-edição, Interpretação FAC 30 / 30