490 likes | 561 Views
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
E N D
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 • $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
Um pequeno segmento em C • Variáveis a e colocadas nos registradores $s1 $s5 pelo compilador
Um pequeno segmento em C • Variáveis a e colocadas nos registradores $s1 $s5 pelo compilador
Um pouco mais de complexidade • Variáveis f j em $s0 $s4
Um pouco mais de complexidade • Variáveis f j em $s0 $s4
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
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 ?
Ainda outro array • A é um array de 100 posições; h está em $s2; endereço de base de A está em $s3
Ainda outro array • A é um array de 100 posições; h está em $s2; endereço de base de A está em $s3
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
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
Tomando decisões • i e j estão em $s3 e $s4; f, g e h estão em $s0, $s1 e $s2
Tomando decisões • i e j estão em $s3 e $s4; f, g e h estão em $s0, $s1 e $s2
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:
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:
E o switch? • Variáveis fa k estão de $s0 a $s5; $t2 contém 4; $zero = 0
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
Recursividade • Cálculo de fatorial
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
programa C programa fonte Transformando *.c em *.exe
programa assembly programa C Transformando *.c em *.exe compilador
programa assembly módulo objeto programa C linguagem de máquina! Transformando *.c em *.exe compilador montador
routina de biblioteca programa assembly módulo objeto programa C Transformando *.c em *.exe compilador linguagem de máquina! montador
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
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
routina de biblioteca programa assembly módulo executável módulo objeto memória programa C compilador carregador ligador montador Transformando *.c em *.exe
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
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
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
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
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
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
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