Diferença entre compilador e assembler

Autor: Laura McKinney
Data De Criação: 1 Abril 2021
Data De Atualização: 6 Poderia 2024
Anonim
Diferença entre compilador e assembler - Tecnologia
Diferença entre compilador e assembler - Tecnologia

Contente


Compilador e Assembler desempenha um papel importante na execução de um programa. Alguns compiladores geram diretamente o código executável em vez do código de montagem. O compilador pega o código-fonte pré-processado e o converte no código de montagem. O montador pega o código de montagem do compilador e o converte no código de máquina realocável. Neste artigo, discuti as diferenças entre compilador e montador com a ajuda do gráfico de comparação mostrado abaixo, basta dar uma olhada.

  1. Gráfico de comparação
  2. Definição
  3. Principais diferenças
  4. Conclusão

Gráfico de comparação

Base para ComparaçãoCompilador Montador
BasicGera o código da linguagem assembly ou diretamente o código executável.Gera o código da máquina realocável.
EntradaCódigo fonte pré-processado.Código da linguagem Assembly.
Fases / passesAs fases de compilação são analisador lexical, analisador de sintaxe, analisador semântico, geração intermediária de código, otimização de código e geração de código.O Assembler faz duas passagens sobre a entrada fornecida.
SaídaO código de montagem gerado pelo compilador é uma versão mnemônica do código de máquina.O código de máquina realocável gerado por um assembler é representado por código binário.


Definição de Compilador

o compilador é um programa de computador que lê o programa escrito no idioma de origem e o converte em equivalente linguagem assembly e encaminha o código da linguagem assembly para o Montador. Enquanto a tradução do código fonte para o código assembly, o compilador também relata o erro no código-fonte para seu usuário.

Os compiladores também são classificados como passagem única, passagem múltipla, carregamento e transferência, depuração e otimização. A classificação é feita com base em qual função um compilador executa e como ele foi construído. Apesar dessas complexidades, a tarefa básica do compilador permanece a mesma.

A compilação é realizada em duas partes, parte de análise e parte de síntese. o parte de análise quebra o código fonte em partes constituintes e forma a representação intermediária do código fonte. o parte de síntese forma o código de destino a partir da representação intermediária.


A compilação é realizada nas seguintes fases:

Analisador lexical, analisador de sintaxe, analisador semântico, gerador intermediário de código, otimizador de código, gerador de código, tabela de símbolos e manipulador de erros.

  • o analisador lexical lê os caracteres do código fonte e os agrupa no fluxos de tokens. Cada token representa a sequência lógica de caracteres como palavra-chave, identificadores, operadores. A sequência de caracteres que forma um token é chamada leme.
  • o analisador de sintaxe analisa o token obtido do analisador lexical e agrupa os tokens em um estrutura hierárquica.
  • o analisador semântico verifica o código fonte quanto a erro semântico.
  • Gerador de código intermediário gera o representação intermediária do código fonte
  • o otimizador de código otimiza o código intermediário para um código de máquina em execução mais rápida.
  • o gerador de código finalmente gera o código de destino que é um código de máquina realocável ou código de montagem.
  • o tabela de símbolos é uma estrutura de dados que contém o registro para cada identificador no código-fonte.
  • Manipulador de erro detecta o erro em cada fase e lida com esses erros.

Definição de Montador

Alguns compiladores executam a tarefa do assembler e geram diretamente um código de máquina realocável em vez do código de montagem, que é passado diretamente para o vinculador / carregador. o montador toma como entrada o código de montagem gerado pelo compilador e o converte em código de máquina realocável.

Vamos ver como o código da máquina é diferente do código da montagem. Código de montagem é o mnemônico versão do código da máquina. Isso significa que o código de montagem usa nomes para representar operações e até dá nomes aos endereços de memória. Por outro lado, o Código da máquina usa códigos binários para representação de operações e endereços de memória.

Até a forma mais simples de montador executa dois passes sobre a entrada. o primeiro passe detecta todos os identificadores no código de montagem que indica o local de armazenamento e armazene-os no tabela de símbolos (além da tabela de símbolos dos compiladores). o local de armazenamento é atribuído para o identificador encontrado na primeira passagem.

No segunda passagem, a entrada é digitalizada novamente e, desta vez, a código de operação são traduzido dentro de sequência de bits representando essa operação no código da máquina. A segunda passagem também traduz identificadores no endereços definido na tabela de símbolos. Assim, o segundo passe gera o código de máquina realocável.

  1. A principal diferença entre compilador e montador é que o compilador gera código de montagem e alguns compiladores também podem gerar diretamente código executável, enquanto que o montador gera código de máquina realocável.
  2. O compilador toma como entrada o código pré-processado gerado pelo pré-processador. Por outro lado, o montador leva código de montagem como entrada.
  3. A compilação ocorre em duas fases que são fase de análise e fase de síntese. Na fase de análise, a entrada passa por analisador lexical, analisador de sintaxe, analisador semântico considerando que a análise da síntese ocorre através de gerador de código intermediário, otimizador de código, gerador de código. Por outro lado, o assembler passa a entrada através duas fases. A primeira fase detecta os identificadores e atribui endereços a eles na segunda fase, o código do assembly é convertido em código binário.
  4. O código de montagem gerado pelo compilador é um versão mnemônica do código da máquina. No entanto, o código de máquina realocável gerado pelo assembler é um código relocável binário.

Conclusão:

O assembler pode não ser necessário, pois alguns compiladores geram diretamente código executável. Se o assembler for usado, será necessário o vinculador para vincular todas as bibliotecas internas às funções de biblioteca usadas no código-fonte.