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

Documentos relacionados
Situação. Geração de Código. Renato Ferreira. Encerramos a parte de Front- End. Back- End. Análise Léxica Análise SintáFca Análise SemânFca

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

Compiladores Ambiente de Execução

Procedimentos. Sistemas de Computação

SSC0611 Arquitetura de Computadores

Linguagem de Maquina II. Visão Geral

Compiladores e Computabilidade

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

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

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

CONJUNTO DE INSTRUÇÕES

Primeiro Trabalho de POO Emulador para o Processador Winter

Organização e Projetos de Computadores. Capítulo 2. Organização e Projetos de Computadores. Instruções

4. Modelo de Programação do DLX Introdução

Registradores na Arquitetura MIPS. 29/4/2016 MIPS - Instruction Set Architecture

Prof. Marcos Quinet Universidade Federal Fluminense UFF Pólo Universitário de Rio das Ostras - PURO

Processadores para computação de alto desempenho

Relembrando desempenho...

Instruções. Maicon A. Sartin

Organização e Arquitetura de Computadores I

Arquitectura de Computadores ARQC MIPS. Serviços de Sistemas Exemplos. Serviços de Sistema

III.2 - Princípios de Arquitetura

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

O estudo da arquitectura de computadores efectua-se com recurso à Abstracção

Sistemas de Computação. Instruções de Linguagem de Máquina

Relembrando desempenho...

Linguagens de Programação Aula 11

UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO

Sistemas Processadores e Periféricos Aula 2 - Revisão

2º Estudo Dirigido CAP 3

Organização de Computadores μarquitetura. Na Aula Anterior... Introdução. Nesta Aula. MIPS-Monociclo. Formas de Organização 17/10/2016

SSC510 Arquitetura de Computadores 1ª AULA

Procedimentos e Gestão de Subrotinas

25/8/2010. Praticamente todas as arquiteturas de computadores fornecem mais de um modo de

Arquitetura de Computadores I. Prof. Ricardo Santos (Cap 2)

Arquitetura e Organização de Computadores

Arquitetura e Organização de Computadores

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

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

Unidade Central de Processamento UCP (CPU)

ARQUITECTURA DE COMPUTADORES

Disciplina: Arquitetura de Computadores

Aula 14 Funcionamento de Processadores (Visão específica)

Organização de computadores. Aula 05

Prof. Leonardo Augusto Casillo

Exercícios resolvidos (aula de 4 de Maio) Resolução:

Organização de Computadores

Compiladores. Introdução à Compiladores

Capítulo 7. Expressões e Sentenças de Atribuição

Linguagens de Programação Classificação

Linguagens de Programação. Marco A L Barbosa

Compiladores. Geração de Código Objeto

CAPÍTULO 4 CAMINHO DE DADOS E CONTROLE

Microcontrolador Assembly UTFPR / DAELN Microcontroladores 1 Prof. Gabriel Kovalhuk

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

Instruções de Máquina

Um Exemplo de Nível ISA: o IJVM. Pilhas. Pilhas. O Modelo de Memória da IJVM. Pilhas de Operandos. Nível ISA

ORGANIZAÇÃO DE COMPUTADORES CAPÍTULO 6: PROCESSADORES. Prof. Juliana Santiago Teixeira

Do alto-nível ao assembly

O Funcionamento do Processador

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

ção de Computadores I

MODOS DE ENDEREÇAMENTO E CONJUNTO DE INSTRUÇÕES

NEANDERWIN. Algumas características do processador Neander são:

MODOS DE ENDEREÇAMENTO E CONJUNTO DE INSTRUÇÕES

Arquitetura e Organização de Computadores

ção de Computadores II

ORGANIZAÇÃO DE COMPUTADORES

Programação de Computadores IV. Introdução a Linguagens de Programação Simone Martins SLIDES CEDIDOS POR BRUNO MARQUES 1

Arquitetura e Organização de Computadores

AULA 03: FUNCIONAMENTO DE UM COMPUTADOR

Registradores. Os processadores possuem espaços específicos onde são guardados valores, os chamados registradores.

O Funcionamento do Processador

Paradigmas de Linguagens de Programação. Expressões e Instruções de Atribuição

Arquitetura de Computadores. Linguagem de Máquina

COMPUTADOR. Adão de Melo Neto

Conjunto de Instruções. Alisson Brito

MODOS DE ENDEREÇAMENTO

Conceitos de Linguagens de Programação

Programação de Microprocessadores. Programação de Microprocessadores SEL-433 APLICAÇÕES DE MICROPROCESSADORES I

Todo processador é constituído de circuitos capazes de realizar algumas operações primitivas:

Introdução à Programação

Arquitetura de Computadores I Prof. Ricardo Santos (Cap 2)

Algoritmos Computacionais

Capítulo 4 Nível da microarquitetura

Organização de Sistemas de Computadores

Unidade Central de Processamento 2. Registradores

MICROPROCESSADORES. Aula 10

Construção de Compiladores Aula 5 - Variáveis

Tópicos: 1 - Modos de endereçamento do Pilha e instruções de Pilha. 3 - Instruções que usam pilha: - instrução CALL - instrução RET

COMPUTADOR 2. Professor Adão de Melo Neto

Linguagem de Montagem do NeanderX

Organização de Computadores 1

Geração de Código Intermediário

Ambientes de Execução

Ambientes de Execução

Linguagens de Programação

arquitetura de computadores

Compiladores Análise de Tipos

Complexidade de algoritmos Notação Big-O

Transcrição:

ompiladores Geração de ódigo Bruno Lopes Bruno Lopes ompiladores 1 / 25

Abstração de máquinas de pilha Usa uma pilha para operandos e resultados intermediários Não considera variáveis ou registradores de uso geral Bruno Lopes ompiladores 2 / 25

Abstração de máquinas de pilha ada instrução Pega seus operandos do topo da pilha Remove esses operandos da pilha omputa alguma operação com eles oloca o resultado na pilha Bruno Lopes ompiladores 3 / 25

Exemplo de programa onsidere duas instruções push i: coloca i no topo da pilha add: remove (pop) dois elementos, os adiciona e coloca o resultado de volta na pilha Um programa para computar 7 + 5. Bruno Lopes ompiladores 4 / 25

Utilidade? ada operação pega seus operandos do mesmo lugar e os coloca no mesmo local O que produz um esquema de compilação uniforme Um compilador mais simples! Bruno Lopes ompiladores 5 / 25

Utilidade A localização dos operandos é impĺıcita Sempre no topo da pilha Não precisa especificá-los explicitamente Não precisa especificar a localização do resultado Instrução add, ao invés de add r1, r2 Bruno Lopes ompiladores 6 / 25

Otimização A instrução add faz 3 operações na memória Ideia: manter o topo da pilha em um registrador específico (acumulador) Bruno Lopes ompiladores 7 / 25

De máquinas de pilha para MIPS O compilador gera código para uma máquina de pilhas com acumulador Queremos executar o código resultante em um processador MIPS (ou um simulador) Simulamos as intruções da máquina de pilha usando instruções MIPS e registradores omo simular? Bruno Lopes ompiladores 8 / 25

MIPS assembly Operações aritméticas usam registradores para operandos e resultados Instruções load e store para usar operandos e colocar resultados em memória Registradores de 32 bits Usaremos $sp, $a0 and $t1 (temporário) omo simular? Bruno Lopes ompiladores 9 / 25

li $a0 7 sw $a0 0($sp) addiu $sp $sp -4 li $a0 5 lw $t1 4($sp) add $a0 $a0 $t1 addiu $sp $sp 4 Bruno Lopes ompiladores 10 / 25

acc <- 7 push acc acc <- 5 acc <- acc + top_of_stack pop Bruno Lopes ompiladores 11 / 25

omo avaliar uma constante? ódigo para add? Bruno Lopes ompiladores 12 / 25

cgen(e1 + e2) = cgen(e1) sw $a0 0($sp) addiu $sp $sp - 4 cgen(e2) lw $t1 4($sp) add $a0 $t1 $a0 addiu $sp $sp 4 Bruno Lopes ompiladores 13 / 25

cgen(e1 + e2) = cgen(e1) print "sw $a0 0($sp)" print "addiu $sp $sp - 4" cgen(e2) print "lw $t1 4($sp)" print "add $a0 $t1 $a0" print "addiu $sp $sp 4" Bruno Lopes ompiladores 14 / 25

Geração de ódigo Template com buracos para preencher com código que avalia expressão ódigo para máquinas de pilha é recursivo Geração de código pode ser escrita como uma AST recursiva descendente (ao menos para expressões) Bruno Lopes ompiladores 15 / 25

ondicionais cgen(if e1 = e2 then e3 else e4) = cgen(e1) sw $a0 0($sp) addiu $sp $sp -4 cgen(e2) lw $t1 4($sp) addiu $sp $sp 4 beq $a0 $t1 true_branch false_branch: cgen(e4) b end_if true_branch: cgen(e3) end_if: Bruno Lopes ompiladores 16 / 25

Registro de ativação ódigo para chamadas e definições de funções depende do layout do RA O resultado está sempre no acumulador Não tem necessidade de armazenar o resultado no RA O RA mantém os parâmetros atuais Bruno Lopes ompiladores 17 / 25

Registro de ativação A pilha sempre mantém o mesmo estado imediatamente antes e depois de uma operação É necessário guardar o endereço de retorno Um ponteiro para a ativação corrente é útil Bruno Lopes ompiladores 18 / 25

hamadas de funções O chamador salva seu valor de fp Então ele salva os parâmetros correntes em ordem reversa Salva o endereço de retorno no registrador $ra O RA tem até agora 4*n+4 bytes hamada para definição de funções? Bruno Lopes ompiladores 19 / 25

Geração de código para variáveis O valor de $sp é alterado de acordo com modificações oriundas de resultados intermediários Argumentos de funções não estão em um deslocamento fixo a partir do $sp Mas estão em um deslocamento fixo do fp Bruno Lopes ompiladores 20 / 25

omo está a pilha? def f(x,y,z) = if x then g(y) else g(z) def g(t) = t + 1 Bruno Lopes ompiladores 21 / 25

ódigo? def sumto(x) = if x = 0 then 0 else x + sumto(x-1) Bruno Lopes ompiladores 22 / 25

Temporários Manter temporários no RA O gerador de código deve associar uma localização fixa para cada temporário no RA Salvar e recuperar os valores sem ter que usar o sp para fazer essas manipulações Bruno Lopes ompiladores 23 / 25

A geração de código deve saber quantos temporários serão usados em cada ponto Um novo argumento é adicionado na geração de código: a posição do próximo temporário disponível A área de temporários é usada como uma pequena pilha de tamanho fixo Bruno Lopes ompiladores 24 / 25

Linguagens OO Slogan em OO: se B é uma subclasse de A, então um objeto da classe B pode ser usado sempre que um objeto da classe A for esperado ódigo na classe A deve funcionar sem modificações para um objeto da classe B omo representar objetos na memória? omo implementar invocação dinâmica? Similar a struct de! Bruno Lopes ompiladores 25 / 25

Linguagens OO Slogan em OO: se B é uma subclasse de A, então um objeto da classe B pode ser usado sempre que um objeto da classe A for esperado ódigo na classe A deve funcionar sem modificações para um objeto da classe B omo representar objetos na memória? omo implementar invocação dinâmica? Similar a struct de! Bruno Lopes ompiladores 25 / 25