COMPILADORES
10
Prof. Marcos
ASSEMBLERS
A montagem (assembly) é realizada para
traduzir / converter um programa que está
em linguagem de montagem para seu
equivalente em linguagem binária através do
montador (assembler).
ASSEMBLERS
Basicamente, suas funções são:
Substituir os nomes simbólicos de operação
e operandos;
Reservar espaço de memória para
armazenamento das instruções, dados e
blocos auxiliares;
Converter valores de constantes para
código binário;
ASSEMBLERS
Módulo Objeto
Artefato produzido pelo montador.
Última etapa da compilação;
Contém a estrutura necessária para que o
programa possa ser executado.
No mínimo, o código de máquina
ASSEMBLERS
Módulo Objeto - Formato
Estrutura de Informação que é gerada pelo
montador e depende muito da forma que o
módulo objeto é utilizado:
Algumas possibilidades;
Montagem e carregamento combinados;
Carregamento absoluto;
Carregamento com ajustes de referências.
ASSEMBLERS
Montagem e Carregamento
Combinados
Programador é responsável por definir
endereços de memória, principal nos quais
código e dados serão executados;
O módulo objeto gerado pelo montador já é
escrito diretamente na sua posição de
memória e ao encerrar a montagem, o
montador transfere a execução (JUMP)
para o início do código da aplicação.
ASSEMBLERS
Montagem e Carregamento
Combinados – Desvantagens
Responsabilidade do programador de
manter endereços;
O programa montador ocupa memória que
poderia ser usada na execução do programa
de aplicação;
Cada execução demanda nova montagem,
mesmo que nenhuma alteração tenha
ocorrido.
ASSEMBLERS
Montagem e Carregamento
Absoluto
Também esquema absoluto;
Separa montagem do carregamento;
Montador cria módulo objeto em disco;
Carregador transfere módulo objeto do
disco para a memória principal;
Módulo objeto deve conter informação para
sua operação.
ASSEMBLERS
Montagem e Carregamento
Absoluto
Módulo objeto deve conter informação
sobre endereço de memória principal no
qual deve ser carregado;
ASSEMBLERS
Montagem e Carregamento
Absoluto – Limitações
Programador é responsável por manter um
registro dos endereços;
Não há flexibilidade para execução do
código;
Se posição de memória não estiver
disponível, programa não pode
ser executado.
ASSEMBLERS
Montagem e Carregamento
Com ajustes a referências
Não fixar endereços na programação;
Referências relativas ao início do código;
Cabe ao carregador encontrar espaço de
memória para o carregamento;
Após definida essa posição, realizar a
transferência e os ajustes nas referências.
LINKEDITORES
Um código objeto não é imediatamente
executável, pois ainda há código binário a
ser incluído no programa, como uma
chamada às bibliotecas;
Este processo de interpretação da chamada
de uma rotina e a respectiva conexão do
código-objeto do programa com o códigoobjeto da rotina chamada denomina-se
ligação;
LINKEDITORES
Um linkeditor/ligador é um programa que
reúne módulos compilados e arquivos (de
dados ou de bibliotecas) para criar um
programa executável;
O funcionamento do programa ligador
consiste em examinar todo o código objeto,
gerado após a compilação, e procurar as
referências externas não resolvidas;
LINKEDITORES
Procurando suas respectivas localizações
nas bibliotecas indicadas nos comandos de
execução do programa;
Ao encontrar a rotina chamada em uma das
bibliotecas, o ligador substitui a linha de
chamada pelo código objeto da rotina;
LINKEDITORES
O processo de compilação e de ligação são
fases distintas e independentes do
procedimento global de execução de um
programa e também geram produtos
distintos;
CARREGADORES
Há outro tipo de ligador chamado
carregador ou loader que realiza a ligação e
em seqüência imediata a execução do
código de máquina, sem gerar o código
executável permanente (Interpretar).
CARREGADORES
Carregador de ligação direta
Forma mais simples de operação: em dois
passos:
Resolução dos endereços;
Transferência e ajustes.
CARREGADORES
Desvantagens
O Código do carregador torna-se mais
complexo;
Como o carregador compartilha memória
com a execução da aplicação, quanto mais
simples for, melhor;
Separar as atividades de ligação daquelas
do carregamento,
CARREGADORES
Carregamento e ligação dinâmicos
Se um módulo já tiver sido carregado para a
memória por uma outra aplicação, o mesmo
endereço pode ser utilizado.
Download

Document