Carregar apresentação
A apresentação está carregando. Por favor, espere
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 IC - UFF
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 IC - UFF
3
Algumas instruções IC - UFF
4
Formato das instruções
IC - UFF
5
Um pequeno segmento em C
Variáveis a e colocadas nos registradores $s1 $s5 pelo compilador IC - UFF
6
Um pequeno segmento em C
Variáveis a e colocadas nos registradores $s1 $s5 pelo compilador IC - UFF
7
Um pouco mais de complexidade
Variáveis f j em $s0 $s4 IC - UFF
8
Um pouco mais de complexidade
Variáveis f j em $s0 $s4 IC - UFF
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 IC - UFF
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 ? IC - UFF
11
Ainda outro array A é um array de 100 posições; h está em $s2; endereço de base de A está em $s3 IC - UFF
12
Ainda outro array A é um array de 100 posições; h está em $s2; endereço de base de A está em $s3 IC - UFF
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 IC - UFF
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 IC - UFF
15
Outras instruções IC - UFF
16
Tomando decisões i e j estão em $s3 e $s4; f, g e h estão em $s0, $s1 e $s2 IC - UFF
17
Tomando decisões i e j estão em $s3 e $s4; f, g e h estão em $s0, $s1 e $s2 IC - UFF
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: IC - UFF
19
Código do exemplo do Loop
IC - UFF
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: IC - UFF
21
Código do exemplo com while
IC - UFF
22
Mais algumas instruções
IC - UFF
23
E o switch? Variáveis f a k estão de $s0 a $s5; $t2 contém 4; $zero = 0 IC - UFF
24
Código para o switch IC - UFF
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 IC - UFF
26
Procedures: um caso simples
IC - UFF
27
Código MIPS: proc_simples
IC - UFF
28
Recursividade Cálculo de fatorial IC - UFF
29
Código MIPS: fatorial IC - UFF
30
Arrays x ponteiros IC - UFF
31
Código clear1 e clear2 IC - UFF
32
Um pouco mais rápido ... IC - UFF
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 IC - UFF
34
Transformando *.c em *.exe
programa C programa fonte IC - UFF
35
Transformando *.c em *.exe
programa C compilador programa assembly IC - UFF
36
Transformando *.c em *.exe
programa C compilador programa assembly linguagem de máquina! montador módulo objeto IC - UFF
37
Transformando *.c em *.exe
programa C compilador programa assembly linguagem de máquina! montador módulo objeto routina de biblioteca IC - UFF
38
Transformando *.c em *.exe
programa C compilador podemos ter vários módulos objeto e várias rotinas de biblioteca programa assembly montador módulo objeto routina de biblioteca IC - UFF
39
Transformando *.c em *.exe
programa C linguagem de máquina! compilador programa assembly módulo executável montador ligador módulo objeto routina de biblioteca IC - UFF
40
Transformando *.c em *.exe
programa C compilador programa assembly montador módulo objeto ligador routina de biblioteca módulo executável carregador memória IC - UFF
41
Olhando cada fase . . . Identificação dos arquivos: Compilação
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 IC - UFF
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 IC - UFF
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 IC - UFF
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 IC - UFF
45
Um arquivo objeto IC - UFF
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 IC - UFF
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 IC - UFF
48
Um programa na memória IC - UFF
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 IC - UFF
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.