Você está na página 1de 31

Introduo

degas@uesc.br
http://alvarodegas.cjb.net/

Introduo

Provocao
Voc j se perguntou como
que os programas que voc
escreve so traduzidos em
instrues executveis pelas
estruturas elementares em
uma Arquitetura de Von
Neumann?

Objetivo do curso

Entender como funciona um


computador

Nvel de Linguagem de
Montagem e de Mquina

Ideia Geral

Compreender a interao entre


componentes de hw e sw
Entender (e amar!) a hierarquia
de abstraes implementada por
esses sistemas

Hierarquia de Abstraes

Assembly (no Assembler)

A linguagem de montagem
(assembly language)
mapeamento da linguagem de
mquina

Com simplificaes.

Uso de mnemnicos
Cada linha do cdigo fonte
possui apenas uma instruo
para o processador (CPU)

ex.: mov %eax, %edx

Assembly X Assembler

Sufixo ER em ingls
Programa assembly: usa o sistema operacional
(por exemplo para E/S)
Um montador ou assembler traduz: assembly
linguagem de mquina
Ns queremos: lidar com aspectos da
programao assembly e linguagem de
mquina.

Hardware: nos interessa na medida em que


influencia essa programao (e influencia MUITO)

Gerao de um Executvel

necessrio traduzir
o programa para
linguagem de mquina
Isto feito em 4 etapas

Gerao de um Executvel

necessrio traduzir
o programa para
linguagem de mquina
Isto feito em 4 etapas

A propsito:
usaremos o
compilador GCC do
Linux neste curso!

1. Pr-Processamento

Muda o programa conforme diretivas (#)

#include <stdio.h>

Incluir o arquivo sdio.h


Gera um programa expandido (normalmente com
extenso .i)

2. Compilao

Traduz o programa .i em assembly


Formato tpico de sada da maioria dos
compiladores

Compiladores uma disciplina regular dos cursos


de Cincia da Computao

3. Montagem

Transforma o cdigo em assembly para


linguagem de mquina

Programa objeto

Armazenado como um arquivo binrio

Extenso: .o

4. Ligao

Gera o programa executvel

Podem haver funes no definidas dentro do


programa (disponveis em outro arquivo .o)

O linker faz a juno dos programas objetos


necessrios para montar o executvel

Pra que estudar isso?

Programador: desenvolve cdigos e


conta com a ajuda divinado
Compilador+Sistema Operacional
Cientista: conhece internamente as
estruturas

Otimizao de cdigo

Diferentes cdigos geram o mesmo resultado:


qual o melhor? Ponteiros ou arrays?
Repetio ou recurso?

Erros de ligao

Que so fontes de grandes dores de cabea!

Pra que estudar isso?

Cientista

Conhece limitaes de mquina que podem


gerar bugs em cdigos corretos.

Representao finita de nmeros, invaso de


reas de memria

Entender o contexto de situaes


potencialmente perigosas

buffer overflow estrutura como so


armazenados dados e informaes de
processos na pilha do SO

Onde a gente vai se debruar

Onde a gente vai se debruar

Representao de dados,
mecanismos de controle,
funes, pilha,
variveis locais

Onde a gente vai se debruar

Representao de dados,
mecanismos de controle,
funes, pilha,
variveis locais

Linguagem de
montagem

Onde a gente vai se debruar

Representao de dados,
mecanismos de controle,
funes, pilha,
variveis locais

Linguagem de
montagem

Interrupes
Interao com
SO

Onde a gente vai se debruar

Representao de dados,
mecanismos de controle,
funes, pilha,
variveis locais
Linguagem de
montagem

Ligao
Interrupes
Interao com
SO

Executando um programa
>./hello
>hello,word

>
O programa binrio (executvel) possui
instrues em cdigo de mquina
O shell do SO l o contedo para a memria e
dispara (run) a execuo
Isso depende do HW

Um programa na Anatomia da
Mquina

CPU (Central Processing Unit)

Unidade de Controle
Unidade Aritmtica e Lgica (ALU)
Conjunto de registradores

Memria muito rpida contidos na CPU


Instrues transferem dados entre memria
e registradores
Operandos ficam em registradores
Exemplos de registradores

PC (program counter): endereo da prxima


instruo
IR (Instruction register): instruo a ser executada
Registradores de propsito geral

Fetch-Decode-Execute

Algoritmo bsico da CPU

Busca instruo (copia em IR)

Atualiza PC (para a prxima instruo)

Decodifica instruo

Busca microprograma e operandos na memria

Executa instruo

Aritmticas e lgicas / transferncia de dados / desvio de


fluxo
Escreve na memria
Seta flags de status

Esquema de instrues da CPU

load copia um dado da memria para um


registrador
store copia um dado de um registrador para
a memria
operate copia dados de registradores para a
ULA e executa uma operao
jump extrai um endereo de uma instruo
e escreve no PC

Memria

Armazena dados e instrues de um programa

Uma espcie de array sendo que

Instrues ocupam um espao varivel

Espao dos dados depende do tipo

Os registradores podem armazenar endereos

O tamanho dos registradores limita o nmero de


endereos acessveis

Registradores de 32 bits: 232 = 4.294.967.296


Registradores de 64 bits: 264 = 18.446.744.073.709.551.616

Memria Virtual

Cada processo possui


uma memria prxima

Mapeada em um espao
na memria real
Pode extrapolar a
memria RAM e usar
parte do disco
Responsabilidade do SO

Um programa na Anatomia da
Mquina
Hello, word \n
Cdigo de hello

Um programa na Anatomia da
Mquina
Hello, word \n
Cdigo de hello

Hello word

O que queremos aprender?

Armazenamento e representao dados


Linguagem de Montagem (IA32)

Modelo de execuo de linguagem de alto nvel

Expresses, atribuies, estruturas de controle

Chamada de procedimentos

Conjunto tpico de instrues

Pilha de execuo, registro de ativao,


parmetros

Representao de ponto flutuante


Interao com SO, interrupes
Compilao e Ligao

Introduo

De onde voc menos espera que no sai nada


Baro de Itarar

Você também pode gostar