Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 Linguagem de Montagem Renato Ferreira Alessandro Mendes Daniel Macedo 2 Overview n Introdução ao Assembly n Macro e Subrotina n O Processo de Montagem n Linkador e Carregador 3 Introdução n Presente em quase todos computadores modernos n Característica do processador empregado n Linguagem assembly n Abstração simbólica da linguagem de máquina n Implementada por tradução n Tradução direta: assembler n Execução em dois passos n Geração do código de máquina n Execução do novo programa diretamente pelo hardware 4 Características n Linguagem assembly pura n Cada comando corresponde a 1 instrução de máquina n Construção de alto nível n É mais simples programar em assembly do que diretamente em linguagem de máquina n Uso de nomes e endereços simbólicos n Instruções mnemônicas: ADD, SUB ... n Acesso a todas as características do hardware alvo n Tudo que pode ser feito na máquina, pode ser feito em assembly n Restrita à família de processadores alvo 5 Por que Assembly? n Programar em assembly é difícil n Demora mais pra escrever um programa n Depuração e manutenção complicadas n Duas razões: n Desempenho n Acesso 6 Desempenho n Em termos de tamanho n Crítico para sistemas embutidos n Em termos de velocidade n Lei 90 - 10 n Implementar partes críticas em assembly n Experiências práticas: MULTICS n Função reescrita em 3 meses: n 26 vezes menor, 50 vezes mais rápida n Função reescrita em 2 meses: n 20 vezes menor, 40 vezes mais rápida 7 Acesso n Algumas tarefas exigem acesso direto ao hardware n Tratamento de interrupções do hardware n Controladores de dispositivos n Sistemas modernos (Linux) n Acesso às funções do processador para troca de contexto n Boot 8 Razões n Aspecto desempenho n Compiladores atuais são muito eficientes n Geram código de boa qualidade n Homem x máquina n Hardware está ficando muito complicado n Aspecto acesso – motivo mais importante n Estudo de arquiteturas n Assembly está diretamente relacionada ao hardware n Permite entender como a máquina realmente trabalha do ponto de vista do hardware 9 Formato das Instruções n Está diretamente associado ao hardware n Porém, possuem características comuns n Instruções Assembly n Representam os comandos da máquina n 4 campos n Pseudo-instruções n Usadas para reservar espaço para dados n Apenas tipos básicos 10 Exemplos 11 Campo de label n Usado para atribuir um nome simbólico para uma variável ou endereço n Campo opcional n Formato n Posição fixa ou separador n Tamanho fixo ou variável n Nomes de registradores n Declarações implícitas do assembler 12 Campo de operação n Representações simbólicas das instruções do hardware n Critério de quem fez o montador n Intel: MOV n Motorola: MOVE n Sun: ST e LD n Variantes de operações n tamanho do dado tratado 13 Campo de operandos n Especifica os alvos das operações n Endereços n instruções de desvio n Variáveis n posição de memória sendo acessada n Constantes n valores para operações aritméticas n Registradores n variáveis locais do processador 14 Campo de comentário n Usado para acrescentar informações relevantes ao programa n Facilitar a compreensão do mesmo n Programa assembly é praticamente incompreensível sem esse campo n Consumo humano n Formato geral n Indicador de início (;) n Até o final da linha 15 Pseudo-instruções n No campo de operação n Instrução para o montador n Diretivas do montador n Relacionadas com o modo de operação da arquitetura n Não correspondem a instruções de máquina n Alocação de variáveis n Criação de macros e subrotinas n Definição de escopo n Definição de segmentos n Constantes 16 Definição de Macro n Solução para resolver o problema da necessidade de se repetir um bloco de instruções dentro de um programa: n Transformar este bloco em um procedimento. n Chamar este procedimento ao invés de reescrever as instruções. n Necessita ser declarada previamente. n É uma pseudo-instrução. 17 Exemplo 18 Chamada e Expansão n É necessário: n Cabeçalho com o nome da macro; n Bloco de instruções; n Pseudo-instrução indicando o término. n O montador salva a macro em uma tabela e quando esta é chamada, substitui a chamada pelo código. 19 Chamada e Expansão n A expansão ocorre durante o processo de montagem e não durante a execução do programa. n O código gerado pelo exemplo (a) é o mesmo do gerado pelo exemplo (b). n Assembler efetuado em 2 passos: n As definições de macro são salvas e todas as operações são realizadas n Código é processado como se fosse o original. 20 Macros com parâmetros 21 Subrotina n É uma chamada a procedimento. n Onde houver uma chamada, o procedimento é invocado separadamente e ao seu término, retorna para o programa que originou esta chamada. n Ocorre um desvio no código. 22 Macro x Subrotina Programa Subrotina Macro 23 O Processo de Montagem n Tradução imediata nem sempre é possível n Problema de referência posterior n Tradução em dois passos n Alternativa 1: n armazenar as referências em uma tabela n traduzir o programa n solução simples n Alternativa 2: n gerar código intermediário n editar referências desconhecidas n pode ser mais eficiente 24 Passo 1 n Construção da tabela de símbolos n Labels n Valores produzidos por pseudo-instruções n ILC – Instruction Location Counter n Usado para determinar endereço em tempo de execução dos símbolos n Inicializado com 0 n Incrementado do tamanho de cada instrução traduzida 25 Passo 1 Leitura Label Pesquisa tabela de pseudos Inicialização Pesquisa tabela de operandos Obter tamanho da instrução Processar literais Atualizar ILC Determinar espaço p/ dados Tipo ? Executar ação apropriada Guardar label e ILC na tabela de símbolos Finalizar passo 1 e ir ao passo 2 sim não encontrado END outros Constante/ Variável não encontrado 26 Passo 2 n Executar a tradução do programa n Informação extra para o carregador n Leitura sequencial do código n Acessos às tabelas n de instruções n de símbolos n Tratamento e erros n Símbolos desconhecidos 27 Passo 2 leitura pesquisa tabela de pseudos inicialização pesquisa tabela de operandos avaliar operandos montar as instruções imprimir instrução fonte e informações fazer conversão de constantes tipo ? executar ação apropriada finalizar o passo 2 encontrado END outros Constante não encontrado obter tamanho, tipo e código da instrução Determinar espaço p/ dados atualizar LC Variável 28 Tabela de símbolos n Criada no passo 1 para utilização no passo 2 n Informações coletadas sobre símbolos n tamanho do campo n informação de relocação n regras de escopo n Várias maneiras de organizar a tabela n Memória associativa: par (símbolo,valor): n Forma mais simples: vetor de registros n Forma mais esperta: tabela hash 29 Ligação e carga n A maioria dos programas é constituída por maisde um procedimento. n Os montadores traduzem um procedimento por vez, gerando um programa-objeto. n Para um programa rodar, todos os procedimentos devem estar ligados. n Como resolver isto? 30 Linker n Funções: n Alocação: aloca espaço na memória para o programa. n Ligação: une os procedimentos e resolve as referências entre os módulos. n Relocação: ajusta os endereços que dependem da posição do programa na memória. 31 Tradução completa n Constituída de duas fases: n 1. Montagem dos procedimentos. n 2. Ligação dos módulos-objetos. n Ao final, teremos um programa binário executável. 32 Tradução completa 33 Exemplo de ligação 34 Exemplo de ligação 35 Problemas para o linker n Problema da relocação: n Após a ligação dos módulos, os endereços devem ser recalculados n Indicar local do programa na memória no momento da execução n Problema da referência externa: n Definir o endereço dos módulos-objetos. Estrutura de um módulo n Tabela de pontos de entrada n Lista de funções acessíveis externamente ao módulo n Uso de pseudo-instrução EXTERN n Tabela de referências de entrada n Variáveis e símbolos usados no módulo, mas definidos em outro local 36 Estrutura de um módulo n Código traduzido n Instruções de máquina e constantes n Única parte do módulo efetivamente carregada em memória n Dicionário de relocação n Lista de desvios a serem relocados 37 Ligação dinâmica n Módulos de programa que não são ligados ao executável final n Uso 1: código frequentemente acessado por muitos programas n Executáveis menores n Possível compartilhamento de código entre programas n Uso 2: não carregar código raramente utilizado 38 Modalidades de carga dinâmica n Endereçamento indireto n Programa identifica onde o módulo está na memória n Seção do módulo indica localização do desvio no módulo dinâmico 39 Modalidades de carga dinâmica n Carga implícita n Desvios para referências externas geram um trap n Traps chamam o ligador, que carrega o código e resolve as referências externas n Requer bibliotecas de importação: indicam quais módulos o programa emprega, para auxiliar o loader 40 Modalidades de carga dinâmica n Carga explícita n Programa chama o loader n Programa indica dados necessários para o loader identificar a biblioteca 41 Carga dinâmica - Exemplos n Multics n Segmento de ligação n Programas referenciam início do módulo a ser carregado n Carga implícita 42 Carga dinâmica - exemplos n Windows n DLL – Dynamic Link Library n Bibliotecas são compartilhadas entre programas (mapeamento nos endereços virtuais do programa) n Carga explícita ou implícita n UNIX n Shared libraries (libXXX.so) n Carga implícita 43
Compartilhar