30
Introdução Software Básico Aula 3 Prof. Dr. Rogério Vargas http://rogerio.in

Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

  • Upload
    doanque

  • View
    218

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

Introdução

Software BásicoAula 3

Prof. Dr. Rogério Vargas

http://rogerio.in

Page 2: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

Provocação

Você já se perguntou como é que os programas que você escreve são traduzidos em

instruções executáveis pelas estruturas elementares em

uma Arquitetura de Von Neumann?

Page 3: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

Objetivo da disciplina● Entender como funciona um

computador● Nível de Linguagem de

Montagem e de Máquina

● Ideia Geral● Compreender a interação entre

componentes de hw e sw ● Entender a hierarquia de

abstrações implementada por esses sistemas

Page 4: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

Hierarquia de Abstrações

Page 5: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

Assembly (não é “Assembler”)

Uso de mnemônicos● Cada linha do código fonte

possui apenas uma instrução para o processador (CPU)● ex.: mov %eax, %edx

Page 6: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

Assembly X Assembler

● Sufixo “ER” em inglês● Programa assembly: usa o sistema operacional

(por exemplo para E/S)● Um montador ou assembler traduz: assembly

→ linguagem de máquina● Nós queremos: lidar com aspectos da

programação assembly e linguagem de máquina.● Hardware: nos interessa na medida em que

influencia essa programação

Page 7: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

Geração de um Executável

● É necessário “traduzir” o programa para linguagem de máquina

● Isto é feito em 4 etapas

Page 8: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

Geração de um Executável

● É necessário “traduzir” o programa para linguagem de máquina

● Isto é feito em 4 etapas

A propósito: eu usarei o compilador

GCC do Linux!

Page 9: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

1. Pré-Processamento

● Muda o programa conforme diretivas (#)● #include <stdio.h>

● Incluir o arquivo sdio.h● Gera um programa expandido (normalmente com

extensão .i)

Page 10: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

2. Compilação

● Traduz o programa .i em assembly

● Formato típico de saída da maioria dos compiladores● Compiladores é uma disciplina regular dos cursos

de Ciência da Computação

Page 11: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

3. Montagem

● Transforma o código em assembly para linguagem de máquina● Programa objeto

● Armazenado como um arquivo binário● Extensão: .o

Page 12: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

4. Ligação

O ligador (linker) gera o programa executável a partir do .o gerado pelo assembler. Porém, pode haver funções padrão da linguagem (por ex., printf) que não estão definidas no programa, mas em outro arquivo .o pré-compilado (no caso, printf.o).O ligador faz a junção dos programas objetos necessários para gerar o executável.

Page 13: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

Pra que estudar isso?• Programando em linguagem de alto nível (C,

C++, etc.) o programador não se preocupa com o gerenciamento de memória, e compilador ajuda a detectar vários erros relacionados a sintaxe e tipos de dados. Porém, é importante conhecer linguagem assembly e o que está por baixo do programa para:

1. Otimizar desempenho de programas– Um switch é sempre mais eficiente que uma

cadeia de if-else?

– Por que loops funcionalmente equivalentes podem ter desempenhos significativamente diferentes na execução?

Page 14: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

Pra que estudar isso?2. Entender erros de ligação

– Costumam ser os erros mais “chatos” em programação: referências não resolvidas, etc.

3. Se tornar mais preparado para evitar bugs, por exemplo, devido às limitações das representações dos tipos e na manipulação da memória

– Representações finitas de tipos: int’s não são inteiros e float’s não são reais e máquina arredonda ou trunca números.

• x2 > 0 int: 50000 * 50000 = ???• (x + y) + z = x + (y + z) float: 1e20 + (-1e20 + 3.14) = ??

– Memória não é confinada (bounded) em C. Exemplo de possível erro:

main (){ long int a[2]; double d = 3.14; a[2] = 1073741824; /* Referência “out of bounds” */ printf("d = %.15g\n", d); exit(0);}

main (){ long int a[2]; double d = 3.14; a[2] = 1073741824; /* Referência “out of bounds” */ printf("d = %.15g\n", d); exit(0);}

Page 15: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

Pra que estudar isso?

4. Ser capaz de fazer engenharia reversa– entender como um compilador gera código,

ou como (uma parte) de um executável funciona

5. Obter uma primeira noção de como programar sistemas embarcados

– processadores específicos – controle de máquinas- para os quais não existe ainda linguagem de alto nível

Page 16: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

Onde a gente vai se debruçar

Page 17: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

Onde a gente vai se debruçar

Representação de dados,mecanismos de controle,

funções, pilha,variáveis locais

Page 18: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

Onde a gente vai se debruçar

Representação de dados,mecanismos de controle,

funções, pilha,variáveis locais

Linguagem demontagem

Page 19: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

Onde a gente vai se debruçar

Representação de dados,mecanismos de controle,

funções, pilha,variáveis locais

Linguagem demontagem

InterrupçõesInteração com

SO

Page 20: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

Onde a gente vai se debruçar

Representação de dados,mecanismos de controle,

funções, pilha,variáveis locais

Linguagem demontagem

InterrupçõesInteração com

SO

Ligação

Page 21: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

Executando um programa

>./hello

>hello, word

>● O programa binário (executável) possui

instruções em código de máquina● O shell do SO lê o conteúdo para a memória e

dispara (run) a execução● Isso depende do HW

Page 22: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

Um programa na Anatomia da Máquina

Page 23: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

CPU (Central Processing Unit)● Unidade de Controle● Unidade Aritmética e Lógica (ALU)● Conjunto de registradores

● “Memória” muito rápida → contidos na CPU● Instruções transferem dados entre memória

e registradores● Operandos ficam em registradores● Exemplos de registradores

– PC (program counter): endereço da próxima instrução

– IR (Instruction register): instrução a ser executada– Registradores de propósito geral

Page 24: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

Fetch-Decode-Execute(busca-decodifica-executa)

● Algoritmo básico da CPU● Busca instrução (copia em IR)● Atualiza PC (para a próxima instrução)● Decodifica instrução

– Busca microprograma e operandos na memória● Executa instrução

– Aritméticas e lógicas / transferência de dados / desvio de fluxo

– Escreve na memória– Seta flags de status

Page 25: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

Esquema de instruções da CPU

● load → copia um dado da memória para um registrador

● store → copia um dado de um registrador para a memória

● operate → copia dados de registradores para a ULA e executa uma operação

● jump → extrai um endereço de uma instrução e escreve no PC

Page 26: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

Memória

● Armazena dados e instruções de um programa● Uma espécie de array sendo que

● Instruções ocupam um espaço variável● Espaço dos dados depende do tipo

● Os registradores podem armazenar endereços● O tamanho dos registradores limita o número de

endereços acessáveis– Registradores de 32 bits: 232 = 4.294.967.296– Registradores de 64 bits: 264 = 18.446.744.073.709.551.616

Page 27: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

Memória Virtual

● Cada processo possui uma memória próxima● Mapeada em um espaço

na memória “real”● Pode extrapolar a

memória RAM e usar parte do disco

● Responsabilidade do SO

Page 28: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

Um programa na Anatomia da Máquina

“Hello, word \n

Código de hello

Page 29: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

Um programa na Anatomia da Máquina

“Hello, word \n

Código de hello

Hello word

Page 30: Introduçãorogerio/material_auxiliar/SB20122_al3... · (por exemplo para E/S) Um montador ou assembler traduz: ... O ligador faz a junção dos programas objetos necessários

O que queremos aprender?● Armazenamento e representação dados● Linguagem de Montagem (IA32)

● Conjunto típico de instruções● Modelo de execução de linguagem de alto nível

● Expressões, atribuições, estruturas de controle● Chamada de procedimentos

● Pilha de execução, registro de ativação, parâmetros

● Representação de ponto flutuante● Interação com SO, interrupções● Compilação e Ligação