aula 25: noc¸˜oes de compilac¸ ˜ao, montagem, link-edic¸ ˜ao, e...

32
Aula 25: Noc¸˜ oes de Compilac¸˜ ao, Montagem, Link-edic¸˜ ao, e Interpretac¸˜ ao Fernanda Passos Universidade Federal Fluminense Fundamentos de Arquiteturas de Computadores Material baseado nos slides do prof. Diego Passos Fernanda Passos (UFF) Compila¸ ao, Montagem, Link-edi¸ ao, Interpreta¸ ao FAC 1 / 30

Upload: others

Post on 21-Jul-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

Aula 25: Nocoes de Compilacao, Montagem, Link-edicao, eInterpretacao

Fernanda Passos

Universidade Federal Fluminense

Fundamentos de Arquiteturas de Computadores

Material baseado nos slides do prof. Diego Passos

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 1 / 30

Page 2: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

Revisao

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 2 / 30

Page 3: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

Nas Aulas Anteriores. . .

Falamos sobre linguagens de montagem.I Linguagens de baixo nıvel.I Forte correspondencia com as instrucoes do processador.I Facilitam tarefa de desenvolver programas.

F Nao e preciso “escovar” bits.

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

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 3 / 30

Page 4: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

Na Aula de Hoje. . .

Vamos falar sobre o processo de traducao de um codigo-fonte em linguagem de altonıvel para as instrucoes executadas pelo processador.Vamos discutir as varias etapas deste processo.

I Compilacao.I Montagem.I Link-edicao.I Carregamento.

Discussao apenas introdutoria.

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 4 / 30

Page 5: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

Motivacao e Visao Geral

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 5 / 30

Page 6: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

Por Que Linguagens de Alto Nıvel?

O advento das linguagens de montagem simplificou a tarefa de programacao.I Programador nao era mais forcado a lidar diretamente com os bits das instrucoes.I Complicadores, como enderecos de saltos, eram tratados automaticamente.

F Atraves de labels com nomes intuitivos.Houve algum ganho em portabilidade tambem.

I Se o conjunto de instrucoes e a linguagem de montagem fossem compatıveis, codigo podiaser aproveitado.

Mas isso e suficiente?

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 6 / 30

Page 7: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

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

Programar no nıvel de instrucoes de maquina ainda e arduo.I Instrucoes muito elementares.I Tarefas complexas requerem longas sequencias de instrucoes.I Trechos de codigo podem facilmente gerar efeitos colaterais.

F Nem sempre desejados ou esperados.Depuracao e manutencao do codigo tambem sao problematicas.

I Codigos longos e com baixa legibilidade.I Codigo nao e facilmente mapeavel para os algoritmos implementados.

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 7 / 30

Page 8: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

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

Idealmente, gostarıamos de um linguagem que:I Fosse mais compacta: codigo-fonte menor.I Fosse mais legıvel: representacao mais direta dos algoritmos.I Possuısse macro-comandos: tarefas comuns descritas em “uma linha”.I Permitisse abstracoes: utilizacao de conceitos/estruturas mais abstratas, distantes do

hardware real.I Permitisse facil portabilidade: mesmo codigo-fonte, diferentes processadores.

Estas necessidades deram origem as Linguagens de Alto Nıvel.

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 8 / 30

Page 9: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

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;

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 9 / 30

Page 10: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

Linguagens de Alto Nıvel: Codigo-Fonte vs. Codigo Executavel

Os “comandos” de uma linguagem de alto nıvel sao muito complexos para osprocessadores.E preciso “quebra-los” em instrucoes mais basicas.A tarefa de transformar um codigo-fonte em linguagem de alto nıvel para um codigoexecutavel e automatizada.

I Feita por outros programas ja prontos.Normalmente, atribuımos esta tarefa a um programa chamado de compilador.

I Mas esta afirmacao nao e correta.I E uma simplificacao de um processo mais complexo.

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 10 / 30

Page 11: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

Processo de Geracao do Executavel

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 11 / 30

Page 12: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

Detalhando as Etapas

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 12 / 30

Page 13: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

Processo de Geracao do Executavel: Compilacao

Primeira fase do processo.Consiste da traducao da linguagem de alto nıvel para a linguagem de montagem doprocessador.

I Mas os bits das instrucoes ainda nao sao gerados.A compilacao, por sua vez, e dividida em etapas:

I Analise lexica.I Analise sintatica.I Analise de escopo e tipos.I Geracao de codigo.I Otimizacao.

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 13 / 30

Page 14: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

Processo de Geracao do Executavel: Compilacao (II)

As fases de analise (lexica, sintatica, escopo e tipos) verificam se o codigo-fonte e valido.Nesta fase, sao acusados erros como:

I Caracteres invalidos (erro lexico).I Falta de ponto-e-vırgula (erro sintatico).I Variavel nao declarada (erro de escopo).I Incompatibilidade de tipos (erro de tipo).

F e.g., tentar atribuir um valor real a uma variavel do tipo string.Em caso de erros, o compilador nao e capaz de “entender” o programa.

I Traducao e impossıvel.

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 14 / 30

Page 15: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

Processo de Geracao do Executavel: Compilacao (III)

A geracao de codigo e onde a traducao em si ocorre.I A semantica do codigo-fonte e analisada pelo compilador.I Sequencias de instrucoes na linguagem de montagem sao geradas, correspondendo a mesma

semantica.Codigo em linguagem de montagem deve necessariamente ter a mesma semantica docodigo em alto nıvel.

I Fazer tudo o que o codigo-fonte original descreve.I E apenas o que ele descreve.

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 15 / 30

Page 16: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

Processo de Geracao do Executavel: Compilacao (IV)

A ultima etapa da compilacao e a otimizacao.Compilador verifica se codigo em linguagem de montagem pode ser melhorado.

I Sem alterar sua semantica.Exemplos de tecnicas de otimizacao de codigo:

I Expandir repeticoes.I Alterar ordem de instrucoes para evitar flushes do pipeline.I Detectar (e excluir) “codigo morto”.I Alterar ordem de acesso a memoria para melhorar acerto da cache.

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 16 / 30

Page 17: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

Processo de Geracao do Executavel: Montagem

Uma vez gerado traduzido da linguagem de alto nıvel para a linguagem de montagem,codigo precisa ser montado.Isto e, algum programa precisa traduzi-lo da representacao textual para os bits dasinstrucoes.Este programa e chamado de montador.

I Ou assembler, em ingles.Mas a saıda do montador ainda nao e o codigo executavel final.

I E o chamado codigo-objeto.

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 17 / 30

Page 18: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

Processo de Geracao do Executavel: Montagem (II)

Dentre as tarefas do montador, podemos citar:I Substituir mnemonicos e outros identificadores textuais por correspondentes numericos (e.g.,

opcodes).I Substituir labels por enderecos de memoria numericos.I Reservar espaco de memoria para instrucoes e dados.I Converter constantes numericas para representacoes binarias.I Examinar correcao das instrucoes.

F e.g., se constantes numericas nao sao grandes demais.F e.g., se identificadores dos registradores sao validos.

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 18 / 30

Page 19: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

Processo de Geracao do Executavel: Link-Edicao

Programas em linguagens de alto nıvel raramente sao auto-contidos.I Isto e, nem todas as “instrucoes” a serem executadas se encontram descritas no codigo-fonte.

E comum usarmos bibliotecas.I Conjuntos de funcoes externas.I Disponıveis para facilitar a escrita dos programas.I e.g., funcoes para impressao de mensagens em tela.

Em algum ponto da geracao do codigo executavel, alguem precisa substituir estasreferencias pelas instrucoes correspondentes.

I Papel do ligador ou linkeditor.I Ou ainda linker, em ingles.

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 19 / 30

Page 20: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

Processo de Geracao do Executavel: Link-Edicao (II)

Linkeditor recebe como entrada conjunto de arquivos de codigo-objeto.Embora individualmente cada arquivo nao seja auto-contido, em conjunto eles precisamser.

I Isto e, todas as referencias precisam ser resolvidas para sequencias de instrucoes presentes noconjunto.

Linkeditor pega os trechos relevantes de cada arquivo e monta um unico arquivo.I O Arquivo Executavel.

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 20 / 30

Page 21: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

O Loader

Apos a link-edicao, o programa executavel e armazenado na forma de uma arquivo.Este arquivo normalmente e armazenado em alguma memoria nao-volatil.

I HD, pendrive, cartao de memoria. . .Antes de executarmos o programa, precisamos carregar as instrucoes do arquivo para aMP.

I Tarefa realizada por um programa especial, chamado loader.I Cada SO possui seu proprio loader.

Tecnicamente, esta etapa nao faz parte do processo de geracao do executavel.I Mas ela pode auxiliar em um caso particular.I Chamado de ligacao dinamica.

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 21 / 30

Page 22: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

Ligacao Dinamica vs. Estatica

Quando o link-editor inclui o codigo de uma funcao externa no executavel gerado,dizemos que houve uma ligacao estatica.Nem sempre ele faz isso.

I Algumas vezes, e interessante nao fazer esta inclusao.Ao inves disso, usamos a chamada ligacao dinamica.

I O executavel gerado possui apenas uma referencia a funcao externa necessaria.I O loader, ao carregar o executavel, carrega tambem o codigo da biblioteca que implementa a

funcao externa.I Processo ocorre apenas quando o programa e executado.I E precisa ser refeito a cada nova execucao.

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 22 / 30

Page 23: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

Ligacao Dinamica vs. Estatica (II)

Mas por que quererıamos usar ligacao dinamica?

Uma das principais vantagens e a reducao do tamanho do arquivo executavel.I Se adicionarmos o codigo de todas as funcoes externas, o executavel aumenta.

Algumas funcoes/bibliotecas sao comuns a varios programas em um mesmo computador.I e.g., quantos programas em Pascal nao usam a funcao println()?

Ao inves de replicar o codigo destas funcoes em todos os programas, guardamos estecodigo na forma de uma Biblioteca Compartilhada.

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

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 23 / 30

Page 24: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

Ligacao Dinamica vs. Estatica (II)

Mas por que quererıamos usar ligacao dinamica?Uma das principais vantagens e a reducao do tamanho do arquivo executavel.

I Se adicionarmos o codigo de todas as funcoes externas, o executavel aumenta.Algumas funcoes/bibliotecas sao comuns a varios programas em um mesmo computador.

I e.g., quantos programas em Pascal nao usam a funcao println()?Ao inves de replicar o codigo destas funcoes em todos os programas, guardamos estecodigo na forma de uma Biblioteca Compartilhada.

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

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 23 / 30

Page 25: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

Interpretacao

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 24 / 30

Page 26: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

Interpretacao

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

I Chamadas de Linguagens Interpretadas.Estas linguagens nao sao previamente traduzidas.

I Ao contrario, um programa especial, chamado interpretador, le o codigo-fonte e o executadiretamente.

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 25 / 30

Page 27: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

Interpretacao (II)

Embora seja um processo diferente, o interpretador guarda semelhancas com umcompilador.

I Fases de analise lexica, sintatica e de escopo e tipo sao tambem executadas.I Mas o interpretador faz isso linha a linha (ou bloco a bloco) durante a execucao.

Ha varias linguagens interpretadas bastante utilizadas.Exemplos:

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

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 26 / 30

Page 28: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

Linguagens Interpretadas vs. Compiladas

Programas em linguagens interpretadas apresentam vantagens:I Sao normalmente bastante portaveis.

F Se o interpretador existe, o programa ira rodar.I Podem ser pequenos, comparados com correspondentes compilados.

F Muito da complexidade recai sobre o interpretador.Mas ha desvantagens?

I Execucao e mais lenta, por ocorrer concomitantemente com a interpretacao.I Requer mais memoria, por depender do carregamento do interpretador.I Alguns erros facilmente detectaveis via compilacao podem demorar a se manifestar na

execucao.

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 27 / 30

Page 29: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

Linguagens Interpretadas vs. Compiladas

Programas em linguagens interpretadas apresentam vantagens:I Sao normalmente bastante portaveis.

F Se o interpretador existe, o programa ira rodar.I Podem ser pequenos, comparados com correspondentes compilados.

F Muito da complexidade recai sobre o interpretador.Mas ha desvantagens?

I Execucao e mais lenta, por ocorrer concomitantemente com a interpretacao.I Requer mais memoria, por depender do carregamento do interpretador.I Alguns erros facilmente detectaveis via compilacao podem demorar a se manifestar na

execucao.

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 27 / 30

Page 30: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

Usar Assembly ou Linguagem de Alto Nıvel?

Como um programador, em que linguagem voce deve programar?I Em uma linguagem de alto nıvel?I Ou diretamente na linguagem de montagem (assembly)?

Na enorme maioria das vezes, a resposta e facil.Linguagens de alto nıvel apresentam muitas vantagens:

I Maior legibilidade.I Maior portabilidade.I Maior modularidade.I Codigo-fonte menor.I Melhores abstracoes.I . . .

Entao para que estudamos linguagem de montagem?

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 28 / 30

Page 31: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

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

Em certos nichos especıficos de programacao, a linguagem de montagem ainda e umaescolha comum.Alguns possıveis motivos:

I Programas compilados ainda precisam ser traduzidos para instrucoes.F Logo, precisamos de compiladores e de quem os escreva.

I Em algumas plataformas, e a unica linguagem disponıvel.F Ja foi mais comum, mas ainda acontece.

I Permite controle sobre exatamente quais instrucoes serao executadas.F Importante em certos codigos particulares.F Ocorre, por exemplo, em certas partes do codigo de um SO.

I Implementacao diretamente em linguagem de montagem pode ser mais eficiente.F e.g., codigo menor, programa mais rapido.

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 29 / 30

Page 32: Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao, e ...fernanda/2016-1/FAC/aulas/aula25.pdf · Aula 25: Noc¸˜oes de Compilac¸ ˜ao, Montagem, Link-edic¸ ˜ao,

Assembly e Desempenho

E preciso cuidado ao fazer afirmacoes sobre a eficiencia de programas em assembly vs.linguagens de alto nıvel.Assembly certamente permite mais controle sobre o codigo executavel final.

I Mas isso pode ser bom ou ruim.Um programador experiente em assembly pode ser capaz de gerar um codigo maiseficiente para uma tarefa particular.Por outro lado, metodos de otimizacao de codigo em compiladores se tornam cada vezmais eficazes.

I E comum que codigo gerado por um compilador seja mais eficiente que aquele escrito emassembly por um “programador medio”.

Fernanda Passos (UFF) Compilacao, Montagem, Link-edicao, Interpretacao FAC 30 / 30