Escolar Documentos
Profissional Documentos
Cultura Documentos
Edson Moreno
edson.moreno@pucrs.br
http://www.inf.pucrs.br/~emoreno
Visão geral
Fluxo da construção até a execução de um programa
Compiladores
Responsável pela tradução de um programa descrito em linguagem de
alto nível para
Montadores (assembler)
Responsáveis pela tradução do programa escrito em linguagem assembly
Resultado é um programa em linguagem de máquina
Ligadores (linker / Link-editor)
Responsável por unir diferentes partes de um programa
Permite modularizar o desenvolvimento de um programa
Carregadores (loader)
Responsável pela transferência de um programa para a MP
Proposta de uso dos mecanismos
Arquitetura
Montador e Carregador integrados
Montador
Código Fonte / Memória
Carregador
Proposta de uso dos mecanismos
Arquitetura
Montador e Carregador independentes
Carregador
Executável
(SO)
Proposta de uso dos mecanismos
Arquitetura
Montador, Ligador e Carregador independentes
Ligador
Carregador
Executável Memória
SO
Máquina hipotética
Arquitetura
Acumulador (16bits)
PC (16 bits)
Memória de 216 palavras de 16bits
3 formatos de instrução
Conjunto de instruções
Montador (Assembler)
Função
Traduzir programas escritos em linguagem de montagem
(assembly) para linguagem de máquina
Conceitos básicos
Sintaxe típica de programas de montagem
[rótulo] [operação] [operando1] [, operando2] ; comentário
Rótulo
Marcador empregado para definir um endereço da área de código
Operação
Opcodes simbólicos: mnemônico que representa uma instrução
Pseudo instrução: Operação que orienta a atuação do montador
Operandos
Registradores, constantes ou endereços de memória
Montador
Função básica
Substituir Opcodes / mnemônicos por instruções opcodes numéricos
Segue uma tabela de associações
Relaciona o mnemonico com a instrução alvo
Indica
Símbolos externos que foram utilizados pelo módulo
Onde foram referenciados
Ligador
Utiliza informações para correções necessárias
Deve conhecer o formato do arquivo objeto
Problema
Uma referência não resolvida é um erro?
Para o algoritmo básico do montador sim
Mas pode não ser...
O que fazer?
Considerar todas as referências não resolvidas
Desvantagem é que um erro de montagem somente é detectado na ligação
Incluir diretivas de montagem
Obrigam o programador a declarar explicitamente o que está fazendo o
símbolo
Diretivas
EXTERN
#MAIN.ASM #FUNC.ASM
.text .text
main:
li $v0 ,5 .globl print_value
syscall
sw $v0, valor($zero) print_value:
jal print_value lw $a0, valor($zero)
li $v0,10 li $v0, 1
syscall syscall
jr $ra
.data
.globl valor .data
valor: .word 1 .extern valor 4
Ligadores
Ligação pode ser realizada de forma
Estática
Realiza duas passagens
Primeira passagem
o Recolhe informações das tabelas de definição
Segunda passagem
o Copia código objeto para executável
o Consulta tabela de uso e resolve referências
Em tempo de carga
Referência a um módulo externo faz com que o carregador
Busque módulo faltante e realize a ligação
Em tempo de execução
Exemplo de emprego deDLLs
Carregador (Loader)
Função
Responsável por copiar um programa para a MP e preparar sua
execução
Tarefas principais
Verificar se o programa existe
Dimensionar a quantidade de memória necessária
Solicitar ao SO a quantidade de memória necessária
Copiar o código para a memória
Ajustar os endereços do código executável
Carregador
Tipicamente integrado com o SO
Tipos de carregadores
Absoluto
Relocador
Dinâmico
Carregador Absoluto
Considera que programa é carregado sempre no mesmo
endereço
Referências específicas a um endereço
Referências definidas em tempo de projeto
Pelo programador ou pelo compilador / montador
Solução:
Trabalhar com endereços relativos a ponto conhecido
E.g. início do programa
Solução
Executar relocação no momento em que a posição for referenciada
Endereços devem ser relativos ao início do módulo na memória
Usa registrador específico (registrador de base)