Início > Arquitetura de Computadores > Compilador, montador, ligador e carregador

Compilador, montador, ligador e carregador

 

  • Tradução

    • Compiladorproduz linguagem de montagem a partir da tradução do código fonte (relação 1:N);
      • Pré-processamento
        • substitui as macros e anotações (annotations) por código fonte;
        • identifica o posicionamento original das linhas de código para sua referência em mensagens de aviso/erro;
      • Análise → cria uma representação intermediária do código fonte em estruturas de programação (tokens, tabela de símbolos e árvore sintática);
        • Análise léxica (scanner)
          • processamento do código fonte para divisão das instruções em símbolos (tokens);
          • verifica-se a pertinência da entrada em relação ao alfabeto da linguagem;
          • despreza comentários e espaços em branco;
          • produz a tabela de símbolos (tokens) com palavras reservadas, delimitadores e identificadores;
          • os símbolos (tokens) são conversíveis para linguagem de montagem;
        • Análise sintática (parser)
          • a tabela de símbolos (tokens) também pode ser produzida nesta fase;
          • processamento da tabela de símbolos para organização em árvore sintática (árvore hierárquica ou de derivação);
          • a árvore sintática determina a sequência de execução;
        • Análise semântica
          • processamento da árvore sintática para identificação de incoerências semânticas;
          • tipos de variáveis incompatíveis, verifica erros de significado, compatibilidade entre operandos e operadores nas expressões, etc;
      • Síntese (não ocorre em linguagens interpretadas) → prepara as instruções em linguagem de montagem a partir da representação intermediária;
        • Geração de código intermediário
        • Otimização do código
        • Geração do código em linguagem de montagem
    • Montador (assembler)
      • produz código objeto (módulo-objeto ou programa-objeto) a partir da tradução da linguagem de montagem (relação 1:1);
      • converte cada instrução em linguagem de montagem em uma instrução equivalente em linguagem de máquina, sendo dependente da arquitetura;
      • verifica se a sintaxe está correta e resolve as referências simbólicas em endereços reais de memória;
      • substitui o mnemônico pelo código da operação (opcode) em binário, com respectivos operandos;
    • Ligador (link editor)

      • produz código de máquina (código executável, módulo de carga) a partir da ligação de um ou mais códigos objetos (bibliotecas, rotinas);
      • examina o código objeto e substitui as referências externas não resolvidas por código de rotinas ou chamada e passagem de endereços de dados;
      • Ligação estática → incorporado ao executável resultante, o código objeto de rotinas é embutido dentro do executável gerado;
      • Ligação dinâmica → referenciado em execução, o código objeto de rotinas é referenciado, sendo acessado durante a execução;
    • Carregador (loader)
      • tarefa do sistema operacional para carregar o executável em memória, para o espaço de endereçamento de um novo processo, e executá-lo;
      • Carregador absoluto → o executável possui referências a endereços da memória real;
      • Carregador relocável → o executável faz referência a endereços de memória virtual, relativos a zero, sendo realocados pelo carregador para endereços reais;

 

 

 

 

 

Anúncios
  1. Nenhum comentário ainda.
  1. No trackbacks yet.

Deixe um comentário

Faça o login usando um destes métodos para comentar:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s