1 / 49

Parte 1: Organização de Computadores

Parte 1: Organização de Computadores. 7. Compilando programas Texto base: capítulo 3 Computer Organization and Design: The Hardware/Software Interface J.L. Hennessy e D.A. Patterson. MIPS: Visão do programador. Alguns registradores (32 bits) $s0 - $s7 : uso geral, preservados

ulric-chen
Download Presentation

Parte 1: Organização de Computadores

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Parte 1:Organização de Computadores 7. Compilando programas Texto base: capítulo 3 Computer Organization and Design: The Hardware/Software Interface J.L. Hennessy e D.A. Patterson

  2. MIPS: Visão do programador • Alguns registradores (32 bits) • $s0 - $s7: uso geral, preservados • $t0 - $t9: temporários, não preservados • $sp: apontador de pilha, preservado • $ra: endereço de retorno, preservado • $a0 - $a3: argumentos, não preservados • $v0 - $v1: valores de retorno, não preservados

  3. Algumas instruções

  4. Formato das instruções

  5. Um pequeno segmento em C • Variáveis a  e colocadas nos registradores $s1  $s5 pelo compilador

  6. Um pequeno segmento em C • Variáveis a  e colocadas nos registradores $s1  $s5 pelo compilador

  7. Um pouco mais de complexidade • Variáveis f  j em $s0  $s4

  8. Um pouco mais de complexidade • Variáveis f  j em $s0  $s4

  9. Um operando em memória • A é um array de 100 posições; g e h estão em $s1 e $s2; endereço de base de A está em $s3

  10. Um operando em memória • A é um array de 100 posições; g e h estão em $s1 e $s2; endereço de base de A está em $s3 ?

  11. Ainda outro array • A é um array de 100 posições; h está em $s2; endereço de base de A está em $s3

  12. Ainda outro array • A é um array de 100 posições; h está em $s2; endereço de base de A está em $s3

  13. Array com índice variável • A é um array de 100 posições; g, h e i estão em $s1, $s2 e $s4; endereço de base de A está em $s3

  14. Array com índice variável • A é um array de 100 posições; g, h e i estão em $s1, $s2 e $s4; endereço de base de A está em $s3

  15. Outras instruções

  16. Tomando decisões • i e j estão em $s3 e $s4; f, g e h estão em $s0, $s1 e $s2

  17. Tomando decisões • i e j estão em $s3 e $s4; f, g e h estão em $s0, $s1 e $s2

  18. Loop e índice variável • A é um array de 100 posições; g, h, i e j estão em $s1, $s2, $s3 e $s4; endereço de base de A está em $s5. Ex:

  19. Código do exemplo do Loop

  20. Evitando o go to: while • save é um array; i, j e k estão em $s3, $s4 e $s5; base de save está em $s6. Ex:

  21. Código do exemplo com while

  22. Mais algumas instruções

  23. E o switch? • Variáveis fa k estão de $s0 a $s5; $t2 contém 4; $zero = 0

  24. Código para o switch

  25. Utilizando procedures • Alocação de registros para passagem de parametros e valores • $a0 - $a3: passagem de argumentos • $v0 - $v1: retorno de valores • $ra: endereço de retorno • nova instrução: jal ProcedureAddress (salva endereço da próxima instrução em $ra) • mais parametros/valores: uso da pilha

  26. Procedures: um caso simples

  27. Código MIPS: proc_simples

  28. Recursividade • Cálculo de fatorial

  29. Código MIPS: fatorial

  30. Arrays x ponteiros

  31. Código clear1 e clear2

  32. Um pouco mais rápido ...

  33. Pseudo-instruções • A linguagem de montagem pode ter instruções que não sejam implementadas em hardware: pseudo-instruções • Exemplo: • move $t0, $t1 # $t0  $t1 ( a MIPS!) • add $t0, $zero, $t1 # equivalente ao move

  34. programa C programa fonte Transformando *.c em *.exe

  35. programa assembly programa C Transformando *.c em *.exe compilador

  36. programa assembly módulo objeto programa C linguagem de máquina! Transformando *.c em *.exe compilador montador

  37. routina de biblioteca programa assembly módulo objeto programa C Transformando *.c em *.exe compilador linguagem de máquina! montador

  38. routina de biblioteca programa assembly módulo objeto programa C Transformando *.c em *.exe compilador podemos ter vários módulos objeto e várias rotinas de biblioteca montador

  39. routina de biblioteca programa assembly módulo executável módulo objeto programa C linguagem de máquina! Transformando *.c em *.exe compilador ligador montador

  40. routina de biblioteca programa assembly módulo executável módulo objeto memória programa C compilador carregador ligador montador Transformando *.c em *.exe

  41. Olhando cada fase . . . • Identificação dos arquivos: • Unix: arq.c, arq.s, arq.o, a.out • MS-DOS: arq.c, arq.asm, arq.obj, arq.exe • Compilação • código objeto pode ser produzido diretamente • fases

  42. Montagem • Transforma um programa em linguagem de montagem em um programa objeto: instruções de máquina, dados e informações para colocação das instruções em memória • Tabela de símbolos: associação entre rótulos e seus endereços

  43. Arquivo objeto (e.g., Unix) • Cabeçalho: tamanho e posição dos componentes do arquivo objeto • Segmento de texto: código de máquina • Segmento de dados: dados estáticos e dinâmicos • Inf. de relocação: identifica instruções e palavras de dados que dependem de endereços absolutos quando programa é carregado

  44. Arquivo objeto (cont.) • Tabela de símbolos: símbolos que não foram resolvidos (referências externas) • Informação para depuração: possibilita associação entre instruções em C e instruções de máquina; facilita a leitura de estruturas de dados

  45. Um arquivo objeto

  46. Ligação • Compilação separada: necessidade do ligador • Ligador pega um programa objeto e produz um módulo carregável • Ligação dinâmica em tempo de carregamento: incorporação de novas versões; compartilhamento de código • Ligação dinâmica em tempo de execução: só aloca memória p/ o que for usado; instalação de módulos não existentes quando da programação da aplicação

  47. Carregamento • Definição de endereçamento: • carregamento absoluto • limitado: problema com modificações • carregamento relocável • problema: memória virtual (swapping) • carregamento dinâmico em tempo de execução

  48. Um programa na memória

  49. Leitura suplementar • Apêndice A, itens A1 até A6, Computer Organization and Design: The Hardware/Software Interface, J.L. Hennessy e D.A. Patterson • Apêndice 7A, Operating Systems: Internals and Design Principles, W. Stallings

More Related