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.