Assemblers, Linkeditores e Carregadores
Por: raySantana • 1/4/2017 • Trabalho acadêmico • 2.131 Palavras (9 Páginas) • 452 Visualizações
UNIVERSIDADE PAULISTA – UNIP
Rayane Alves Santana – B9141J-7
Assemblers, Linkeditores e Carregadores
Compensação de faltas
Turma: CC7P30
Brasília – 2016
UNIVERSIDADE PAULISTA – UNIP
Ciência da Computação
Compensação de Faltas
Aluna: Rayane Alves Santana
Matrícula: B9141J-7
Compiladores e Computabilidade
Brasília – DF / 2016
7º Semestre
Sumário
1 Introdução 4
2 Montadores (Assemblers) 5
3 Ligador ou Linkeditor 7
4 Loaders (Carregadores) 9
5 Conclusão 11
6 Bibliografia 12
Assemblers, Linkeditores e Carregadores
Introdução
O compilador é um programa que traduz o código escrito em uma linguagem de alto nível (código-fonte) para um código semanticamente equivalente a uma linguagem de mais baixo nível (código-objeto). Porém para se compilar um arquivo não é necessário apenas o compilador, mas também o linkeditores, o assemblers e o carregador.
O compilador traduz o código-fonte para o assembly. É nessa fase que se verifica se o código-fonte possui erros de semântica ou de sintaxe.
Assembly traduz o código assembler criado pelo compilador para a linguagem de máquina (código-objeto).
Linker é o responsável por fazer a ligação entre os módulos do programa, para gerar um único executável. Também adiciona ao código-objeto bibliotecas e funções de outros programas além de inserir código para lidar com o Sistema Operacional. O linker resolve as pendências de rótulos em partes do programa. É nessa etapa que o código-objeto é traduzido para a linguagem de máquina.
Loader ou carregador carrega o programa executável na memória principal para ser executado.
[pic 1]
Montadores (Assemblers)
Traduz literalmente os mnemônicos do Assembly, implementando-os em linguagem de montagem para todas as instruções da máquina e modos de endereçamento, além de traduzir comandos em linguagem de montagem válidos (pseudo-instruções ou diretivas de execução) para seus equivalentes em linguagem de máquina. Por exemplo, programa fonte sob a forma de mnemônicos (linguagem de máquina simplificada), cuja extensão pode ser traduzida para um programa em binário pronto para a execução na RAM (linguagem de máquina).
A montagem é um processo simples, porém tedioso e propenso a erros quando feito manualmente. Montadores comerciais geralmente possuem as seguintes características:
- O programador pode especificar explicitamente as posições de dados e programas durante a execução.
- Valores de dados na memória podem ser inicializados antes da execução do programa.
- Rótulos simbólicos (labels) podem ser usados para representar endereços e constantes.
- Variáveis podem ser definidas num programa em linguagem de montagem e usadas posterirormente em outros programas.
- Sub-rotinas (semelhantes às funções em linguagem de alto nível) podem ser definidas uma vez e serem chamadas onde e quantas vezes for necessário.
- Permitem a definição de macros, ou seja, trechos em código de máquina, que podem ser definidas uma vez e, depois, instanciadas quando necessário, implicando na substituição da chamada a macro por seu código equivalente. Portanto, trata-se de uma forma resumida de escrever o programa, mas que não implica num código de máquina menor.
A maioria dos montadores leem os programas fonte duas vezes, e são chamados de montadores de dois passos (etapas de montagem). O primeiro passo determina o endereço de todos os itens de dados e instruções de máquina, para selecionar quais palavras binárias (instruções conforme serão escritas na RAM) serão geradas para cada linha de código fonte.
Os endereços dos itens de dados e instruções são determinados por meio do uso de um contador de programa para a montagem, chamado contador de instrução (program counter ou instruction counter). O contador de instrução gerencia o endereço da instrução executada e dos itens de dados a ela associados durante a montagem, que geralmente é inicializada com 0 (zero). No início do primeiro passo, é incrementado de acordo com o tamanho de cada instrução.
Durante este passo, o montador também efetua quaisquer operações aritméticas em tempo de montagem, e insere as definições de todos os rótulos de funções e variáveis e as constantes, em uma tabela chamada Tabela de Símbolos (TS).
Figura 1. Sequência típica para geração de um programa em linguagem de máquina.
[pic 2]
Fonte: Estrela; Herrmann, 2016.
A razão principal para exigir uma segunda passagem do montador é permitir que símbolos possam ser usados no programa antes de serem definidos. Após a primeira passagem, o montador terá identificado todos os símbolos e os colocar na TS. Na segunda passagem, gerará código de máquina, inserindo os identificadores dos símbolos os quais são conhecidos agora.
Ligador ou Linkeditor
A compilação separada permite que um programa seja dividido em partes que são armazenadas em arquivos diferentes. Cada arquivo contém uma coleção logicamente relacionada de sub-rotinas e estruturas de dados que formam um módulo de um programa maior. Um arquivo pode ser compilado e montado independente de outros arquivos, de modo que as mudanças em um módulo não exigem a recompilação do programa inteiro. A compilação separada necessita da etapa adicional de link-edição para combinar os arquivos-objeto de módulos separados e consertar suas referências não resolvidas.
...