TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

Assemblers, Linkeditores e Carregadores

Por:   •  1/4/2017  •  Trabalho acadêmico  •  2.131 Palavras (9 Páginas)  •  422 Visualizações

Página 1 de 9

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

  1. 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]


  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.


  1. 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.

...

Baixar como (para membros premium)  txt (15.1 Kb)   pdf (294.8 Kb)   docx (60.3 Kb)  
Continuar por mais 8 páginas »
Disponível apenas no TrabalhosGratuitos.com