Compiladores. Geração de Código Objeto

Documentos relacionados
Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Introdução. Geovane Griesang

Compiladores. Otimização de Código

Compiladores. Introdução à Compiladores

Compiladores. Gerência de Memória

Prof. Antonio Almeida de Barros Jr. Prof. Antonio Almeida de Barros Junior

Compiladores. Motivação. Tradutores. Motivação. Tipos de Tradutores. Tipos de Tradutores

16. Compilação no Linux

Linguagens de Programação Classificação

Organização e Arquitetura de Computadores I

OFICINA DA PESQUISA PROGRAMAÇÃO APLICADA À CIÊNCIA DA COMPUTAÇÃO

Compiladores I Prof. Ricardo Santos (cap 1)

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE LÓGICA ARITMÉTICA E AS INSTRUÇÕES EM LINGUAGEM DE MÁQUINA

Procedimentos. Sistemas de Computação

COMPUTADORES COM UM CONJUNTO REDUZIDO DE INSTRUÇÕES. Adão de Melo Neto

Introdução à Computação: Máquinas Multiníveis

Compiladores e Computabilidade

Introdução parte II. Compiladores. Mariella Berger

Introdução aos Compiladores

Conversões de Linguagens: Tradução, Montagem, Compilação, Ligação e Interpretação

PROGRAMAÇÃO I. Introdução

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE LÓGICA ARITMÉTICA E AS INSTRUÇÕES EM LINGUAGEM DE MÁQUINA

1) Considere a situação atual da memória do sistema computacional abaixo discriminada.

Arquiteturas RISC e CISC. Adão de Melo Neto

EA876 - Introdução a Software de Sistema

Arquitetura e Organização de Computadores

Introdução ao Fortran 90

Arquitetura de Computadores. Ciclo de Busca e Execução

Arquiteturas de Computadores. Princípios e exemplos de conjuntos de instruções

Sistemas Operacionais

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE LÓGICA ARITMÉTICA E AS INSTRUÇÕES EM LINGUAGEM DE MÁQUINA

SIMULAÇÃO DE MÁQUINA DE REGISTRADORES COM MÁQUINA DE TURING MULTIFITA

Puca Huachi Vaz Penna

O Funcionamento do Processador

Sistemas Operacionais

Introdução à Computação

III.2 - Princípios de Arquitetura

Noções de compilação

Histórico de desenvolvimento de computadores Prof. Luís Caldas Aula 02 Processador de uso geral

Noções de compilação

Arquitetura e Organização de Computadores

CONJUNTO DE INSTRUÇÕES

Prof. Leonardo Augusto Casillo

Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores

Compiladores. Otimização de código

COMPILAÇÃO. Ricardo José Cabeça de Souza

Arquitetura e Organização de Computadores

Introdução à Programação

Conjunto de Instruções. Alisson Brito

CAP. VII GERAÇÃO DE CÓDIGO

Introdução. (Aula 2) Organização Estruturada de Computadores

Universidade de Brasília Histórico e Introdução

Histórico e Introdução

9. Software de Sistema - Montadores (capítulo 9 do livro texto)

Processadores para computação de alto desempenho

Construção de Compiladores. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2014.

INE5421 LINGUAGENS FORMAIS E COMPILADORES

Infraestrutura de Hardware. Funcionamento de um Computador

William Stallings Arquitetura e Organização de Computadores 8 a Edição

Tecnólogo em Análise e Desenvolvimento de Sistemas. Sistemas Operacionais (SOP A2)

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Síntese. Prof. Geovane Griesang

Conceitos básicos sobre computadores (continuação)

Estruturas de Dados Aula 1: Introdução e conceitos básicos 28/02/2011

Web site. Profa. Patrícia Dockhorn Costa.

PSI3441 Arquitetura de Sistemas Embarcados

Linguagens de Programação

Linguagem de Maquina II. Visão Geral

Universidade Católica de Pelotas Bacharelado em Ciência da Computação Linguagens Formais e Autômatos TEXTO 6 Introdução à Compilação

3. Linguagem de Programação C

Organização de Sistemas de Computadores

Prof. Gustavo Oliveira Cavalcanti

Esta pseudomáquina foi criada em homenagem ao homem de Neandertal, o antecessor do homo sapiens.

SSC510 Arquitetura de Computadores 1ª AULA

Trabalhos Práticos Arquitetura de Computadores I Prof. Fabian Vargas

AULA 03: FUNCIONAMENTO DE UM COMPUTADOR

CAP. VII GERAÇÃO DE CÓDIGO

ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES II AULA 02: PROCESSAMENTO PARALELO: PROCESSADORES VETORIAIS

Introdução (Aula 2) Introdução Arquitetura de Hardware. Organização Estruturada de Computadores. Introdução Conceitos (2) Introdução Conceitos (1)

PARTE II - CONJUNTO DE INSTRUÇÕES ARQUITETURA DE COMPUTADORES ANTONIO RAMOS DE CARVALHO JÚNIOR

Projeto de Compiladores

Linguagens de Programação

Ambiente de desenvolvimento

DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO BACHARELADO EM INFORMÁTICA SISTEMAS OPERACIONAIS I 2 0 SEM/05 Teste 1 Unidade I DURAÇÃO: 50 MINUTOS

Capítulo 8: Memória Principal. Operating System Concepts 8 th Edition

a) Calcule o valor médio de CPI apresentado na execução deste programa P, utilizando-se C1 sem e com otimização.

Arquitetura e Organização de Processadores. Aula 08. Arquiteturas VLIW

3. Linguagem de Programação C

Solução Lista de Exercícios Processadores

Introdução à Computação

Introdução à Computação

ORGANIZAÇÃO DE COMPUTADORES MÓDULO 7

Linguagens e a máquina

Ferramenta para Desenvolvimentode Sistemas EmbarcadosUtilizando Linguagem de Alto Nível p.1/25

Prof. Sandro Wambier

Arquitetura de Computadores I

Arquitetura de Computadores. Conjunto de Instruções

Infraestrutura de Hardware. Instruindo um Computador

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 32. Instituto de C

Ferramentas Programação. UDESC - Prof. Juliano Maia 1

Transcrição:

Compiladores Geração de Código Objeto Cristiano Lehrer, M.Sc.

Atividades do Compilador Arquivo de origem Arquivo de destino Análise Otimização Geração de Código Intermediário Geração de Código Final Síntese Gramáticas Estruturas Internas Compilador

Introdução Os principais requisitos impostos a geradores de código objeto são os seguintes: O código gerado deve ser correto e de alta qualidade. O código deve fazer uso efetivo dos recursos da máquina. O código gerado deve executar eficientemente. O problema de gerar código ótimo é insolúvel (indecidível) como tantos outros. Na prática, devemos contentar-nos com técnicas heurísticas que geram bom código (não necessariamente ótimo).

Considerações Basicamente, quatro aspectos devem ser considerados no projeto de geradores de código: Forma do código objeto a ser gerado: Linguagem absoluta, relocável ou assembly. Seleção das instruções de máquina: A escolha da sequência apropriada pode resultar num código mais curto e mais rápido. Alocação de registradores. Escolha da ordem de avaliação: A determinação da melhor ordem para execução das instruções é um problema insolúvel. Algumas computações requerem menos registradores para resultados intermediários.

Linguagem absoluta: Forma do Código Objeto (1/3) A geração de um programa em linguagem absoluta de máquina tem a vantagem de que o programa objeto pode ser armazenado numa área de memória fixa e ser imediatamente executado. Compiladores deste tipo são utilizados em ambientes universitários, onde é altamente conveniente diminuir o custo de compilação. Os compiladores que geram código absoluto e executam-no imediatamente são conhecidos como load and go compilers.

Linguagem relocável: Forma do Código Objeto (2/3) A geração de código em linguagem de máquina relocável permite a compilação separada de subprogramas. Módulos e objetos relocáveis podem ser ligados e carregados por um Ligador-Carregador. Essa estratégia dá flexibilidade para compilar subrotinas separadamente e para chamar outros programas previamente compilados.

Linguagem assembly: Forma do Código Objeto (3/3) A tradução para linguagem assembly facilita o processo de geração de código. São geradas instruções simbólicas e podem ser usadas as facilidades de macro instruções. O preço pago é um passo adicional: Tradução para linguagem de máquina. É uma estratégia razoável, especialmente, para máquinas com pouca memória, nas quais o compilador deve desenvolver-se em vários passos.

Alocação de Registradores (1/2) Instruções com registradores são mais curtas e mais rápidas do que instruções envolvendo memória. Portanto, o uso eficiente de registradores é muito importante. A atribuição ótima de registradores a variáveis é muito difícil, e muito problemática quando a máquina trabalha com registradores aos pares (para instruções de divisão e multiplicação), ou provê registradores específicos para endereçamentos e para dados.

Alocação de Registradores (2/2) Operação de divisão nos computadores IBM/360 e IBM/370: D r, m O dividendo de 64 bits deve estar armazenado em um par de registradores par-ímpar, representado por r. m contém o divisor. Após a divisão, o registrador par contém o resto e o ímpar contém o quocinte. t = a + b L R0, a A R0, b t = t + c A R0, c t = t / d SRDA R0, 32 desloca o dividendo para R1 e limpa R0 D R0, d St R1, t

Máquina Objeto (1/2) Familiaridade com a máquina e com o conjunto de instruções é pré-requisito para projetar um bom gerador de código. Formato das instruções: op fonte, destino Instruções: ADD R1, R2 R2 = R2 + R1 (adição) SUB R1, R2 R2 = R2 R1 (subtração) MUL R1, R2 R2 = R2 * R1 (multiplicação) DIV R1, R2 R2 = R2 / R1 (divisão) LOAD M, R Registrador = Memória (carregamento) STORE R, M Memória = Registrador (armazenamento) COPY R1, R2 R2 = R1 (cópia)

Máquina Objeto (2/2) a := b + c LOAD b, R0 R0 = b LOAD c, R1 R1 = c ADD R1, R0 R0 = R0 + R1 STORE R0, a a = R0 a := b + c * d LOAD d, R0 R0 = d LOAD c, R1 R1 = c MUL R0, R1 R1 = R1 * R0 LOAD b, R0 R0 = b ADD R1, R0 R0 = R0 + R1 STORE R0, a a = R0