Do alto-nível ao assembly

Slides:



Advertisements
Apresentações semelhantes
Parte 1: Organização de Computadores
Advertisements

Organização e Arquitetura de Computadores I Linguagem de Máquina
CPU: Controle e processamento
Arquitetura de Computadores
WebDesign Redes de Computadores Aula 05
Programação II Estruturas de Dados
Programação II Estruturas de Dados
Programação II Estruturas de Dados
Aula 06: Introdução ao Pipelining, Hazards Estruturais e Forwarding
Aula 5 – Sumário Revisão da aula anterior Endereçamento indirecto
O Conjunto de Instruções
Assembly MAC-1 Implementação de ciclos Ciclo ‘while’ // Em Java : ...
Aula 4 – Sumário Linguagem assembly do MAC-1 A pilha
Introdução da Disciplina
0. Introdução.
ARQUITETURAS RISC E CISC
Exemplo de arquitetura registrador-registrador- MIPS
MIPS PIPELINE.
AULA 06 - MIPS PIPELINE.
Aula-02 Arquitetura do conjunto de instruções – ISA (Instruction Set Architecture)
Introdução à Compilação Prof. Leandro Magno Slides adaptados a partir do material cedido pelos professores Heloise Manica Paris Teixeira, Yandre M. G.
Recursividade Inhaúma Neves Ferraz
Joao Cláudio Soares Otero
Rganização de Computadores Melhorias de Desempenho com Pipelines Capítulo 6 – Patterson & Hennessy Organização de Computadores Melhorias de Desempenho.
Pipelining Ana Cristina Alves de Oliveira ufcg. edu
AULA – Linguagem C – Vetores, Ponteiros Estruturas
Arquitetura de Computadores I
Arquitetura de Computadores
Linguagens de Programação
Autor: Fernando de Mesentier Silva
Melhorando o desempenho com pipeline
Arquitecturas RISC Arquitectura e Conjunto de Instruções
Arquitecturas RISC Programação em assembly
Instruções: A Linguagem de Máquina – Aula 01
Alocação de Registos (exercício) Compiladores João M. P. Cardoso.
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
Análise Semântica e Representação Intermédia
Análise Semântica e Representação Intermédia
Ferramentas para a Construção de Compiladores: Lex & Yacc
Conversão de um NFA para um DFA com um exemplo
Aula 3©Universidade do Algarve 1 Do alto-nível ao assembly Compiladores, Aula Nº 3 João M. P. Cardoso.
Compiladores, Aula Nº 7 João M. P. Cardoso
Classes de Arquiteturas Tipos de operação Codificação das operações
Estruturas de Dados com Jogos
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Aula 17 1 Análise Sintáctica Compiladores, Aula Nº 17 João M. P. Cardoso.
Computador Cleópatra Programação Assembly e Alto Nível
Professor Mário Dantas
Projeto de Engenharia de Software e Sistemas
Teoria da Computação Aula 5 Prof. Fabiano Sabha.
Organização e Arquitetura de Computadores
Aula P.02 – BCC202 Revisão sobre Ponteiros Túlio Toffolo
Estruturas de Dados Aula 7: Tipos Estruturados 23/04/2014.
Back-End Compilação aula-11-back-end.pdf.
Produto Interno entre Arrays
A Linguagem de Máquina – Desvios e Laços
A Linguagem de Máquina – Funções e recursividade Prof. André Luis M. Silva orgearq wordpress.com.
Arquitetura de Computadores 2009 Infra-estrutura Hardware
Aula 4©João M. P. Cardoso 1 Anatomia de um Compilador Compiladores, Aula Nº 4 João M. P. Cardoso.
Estrutura do Processador
Algoritmos e Programação MC102
Existem 8 registos principais de 32 bits no processador (existem mais como %EIP): %EAX %EBX %ECX %EDX %ESI %EDI %EBP %ESP Os registos são armazenados em.
Análise Semântica e Representação Intermédia
Instruções Condicionais e de Acesso a Memória Universidade Federal de Uberlândia Faculdade de Computação Prof. Dr. rer. nat. Daniel D. Abdala GSI013 –
A linguagem de Máquina – Instruções Básicas
Organização de Computadores Implementação da UCP Construção do caminho de dados Controle Implementação monociclo.
Computador MIPS Organização básica e conjunto de instruções.
Programação em assembly
RISC vs. CISC Introdução
Conjunto de instruções
Transcrição da apresentação:

Do alto-nível ao assembly Compiladores, Aula Nº 2 João M. P. Cardoso ©Universidade do Algarve Aula 2

©Universidade do Algarve Viagem Como são implementadas as estruturas computacionais em assembly? Revisão dos conceitos relacionados com a programação em assembly para o MIPS R3000 (ver disciplina de Arquitectura de Computadores) Fizemos o papel de um compilador. Agora vamos aprender, entre outras coisas, a fazer um compilador. ©Universidade do Algarve Aula 2

Do alto-nível ao assembly Alvo: MIPS R3000 # $a0 armazena o endereço de A[0] # $a1 armazena o valor de N Sum: Addi $t0, $0, 0 # i = 0 Addi $v0, $0, 0 # sum = 0 Loop: beq $t0, $a1, End # if(i == 10) goto End; Add $t1, $t0, $t0 # 2*i Add $t1, $t1, $t1 # 2*(2*i) = 4*i Add $t1, $t1, $a0 # 4*i + base(A) Lw $t2, 0($t1) # load A[i] Add $v0, $v0, $t2 # sum = sum + A[i] Addi $t0, $t0, 1 # i++ J Loop # goto Loop; End: jr $ra # return Int sum(int A[], int N) { Int i, sum = 0; For(i=0; i<N; i++) { sum = sum + A[i]; } return sum; ©Universidade do Algarve Aula 2

Do alto-nível ao assembly Variáveis globais: Armazenadas na memória Para cada uso de uma variável global o compilador tem de gerar instruções load/store int a, b, c; ... fun(...) { ... } Memória a b c ©Universidade do Algarve Aula 2

©Universidade do Algarve Variáveis Globais .data 0x10000000 a: .space 4 b: .space 4 c: .space 4 .text fun: … la $t1, a lw $t1, 0($t1) la $t2, b lw $t2, 0($t2) add $t3, $t2, $t1 la $t4, c sw $t3, 0($t4) … Alocação de memória Int a, b, c; void fun() { c = a + b; } Memória a b c 0x10000008 0x10000004 0x10000000 ©Universidade do Algarve Aula 2

Do alto-nível ao assembly Conceito de chamada a procedimentos Cada procedimento tem estados Variáveis locais Endereço de retorno Estado é guardado na área de memória designada por pilha de chamadas (é utilizado um registo para apontar para a posição actual da pilha) Pilha de chamadas A pilha de chamadas encontra-se no topo da memória A pilha cresce para baixo void fun() { int a, b, c; ... c = a + b; } Memória Registos c b a $sp ©Universidade do Algarve Aula 2

©Universidade do Algarve Variáveis Locais Reserva espaço na pilha fun: addi $sp, $sp, -12 … lw $t1, 0($sp) lw $t2, 4($sp) add $t3, $t2, $t1 sw $t3, 8($sp) addi $sp, $sp, 12 jr $ra Exemplo: Load a Load b a + b store c liberta espaço na pilha void fun() { int a, b, c; ... c = a + b; } Memória c b a $sp ©Universidade do Algarve Aula 2

©Universidade do Algarve Variáveis Locais Acesso aos registos internos do processador é muito mais rápido Mas os registos internos são em número limitado E por isso nem todas as variáveis locais podem ser armazenadas nesses registos No passado a atribuição de registos internos do processador a variáveis locais era feita pelo programador: A linguagem C tem uma palavra reservada para orientar o compilador: register (e.g., register int c;) Hoje os compiladores são muito mais eficientes Essa atribuição é lhe inteiramente delegada ©Universidade do Algarve Aula 2

©Universidade do Algarve Variáveis Locais Utilização de registos internos Ficheiro de Registos fun: … add $t3, $t2, $t1 … jr $ra void fun() { int a, b, c; ... c = a + b; } $t1 a $t2 b $t3 c ©Universidade do Algarve Aula 2

Do alto-nível ao assembly Implementar Registos Registos contêm vários campos Cada estrutura é armazenada em posições contíguas de memória typedef struct { int x, y, z; } foo; foo *p; Memória z y x p ©Universidade do Algarve Aula 2

Do alto-nível ao assembly fun: addi $sp, $sp, -16 … lw $t1, 0($sp) addi $t1, $t1, 8 lw $t2, 0($t1) addi $t1, $t1, 12 lw $t3, 0($t1) add $t3, $t2, $t3 addi $t1, $t1, 4 sw $t3, 0($t1) addi $sp, $sp, 16 jr $ra Reserva espaço na pilha Exemplo com estrutura local: Endereço de p address p->y Load p->y Endereço de p Memória z y x p address p->z typedef struct { int x, y, z; } foo; fun() { foo *p; p->x = p->y + p->z; } Load p->z p->y + p->z Endereço de p address p->x store em p->x liberta espaço na pilha ©Universidade do Algarve Aula 2

Do alto-nível ao assembly Exemplo com estrutura local (optimizado): Reserva espaço na pilha fun: addi $sp, $sp, -16 … lw $t2, 8($sp) lw $t3, 12($sp) add $t3, $t2, $t3 sw $t3, 4($sp) addi $sp, $sp, 16 Memória z y x p typedef struct { int x, y, z; } foo; fun() { foo *p; p->x = p->y + p->z; } Load p->y Load p->z p->y + p->z store em p->x liberta espaço na pilha ©Universidade do Algarve Aula 2