Você está na página 1de 88

Introduo Computao i

Introduo Computao
por Gilberto Farias e Eduardo Santana Medeiros

Ed. v1.0
Introduo Computao ii

Copyright 2013 UAB

Voc tem a liberdade de:


Compartilhar copiar, distribuir e transmitir a obra.
Remixar criar obras derivadas.
Sob as seguintes condies:
Atribuio Voc deve creditar a obra da forma especificada pelo autor ou licenciante (mas no
de maneira que sugira que estes concedem qualquer aval a voc ou ao seu uso da obra).
Uso no comercial Voc no pode usar esta obra para fins comerciais.
Compartilhamento pela mesma licena Se voc alterar, transformar ou criar em cima desta
obra, voc poder distribuir a obra resultante apenas sob a mesma licena, ou sob uma licena
similar presente.
Para maiores informaes consulte: http://creativecommons.org/licenses/by-nc-sa/3.0/br/ .
Introduo Computao iii

COLLABORATORS

TITLE :

Introduo Computao

ACTION NAME DATE SIGNATURE

WRITTEN BY Gilberto Farias e 20 de maio de 2013


Eduardo Santana
Medeiros

REVISION HISTORY

NUMBER DATE DESCRIPTION NAME

v1.0 Maro 2013 Primeira verso do livro Gilberto Farias,


Eduardo Santana
Introduo Computao iv

Sumrio

1 Histria dos computadores 1


1.1 Precursores dos computadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.1 baco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.2 Ossos de Napier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.3 As rodas dentadas de Pascal (Pascaline) . . . . . . . . . . . . . . . . . . . . 5
1.1.4 Leibniz - A primeira calculadora com quatro operaes . . . . . . . . . . . . 6
1.1.5 Mquinas Programveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.5.1 Tear de Jacquard . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.5.2 A Mquina Diferencial . . . . . . . . . . . . . . . . . . . . . . . 7
1.1.5.3 A Mquina Analtica . . . . . . . . . . . . . . . . . . . . . . . . 8
1.1.5.4 A Primeira programadora . . . . . . . . . . . . . . . . . . . . . . 9
1.1.6 Linha do tempo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2 As geraes dos computadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2.1 Primeira Gerao (1946-1954) . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2.1.1 Alan Turing - O pai da Cincia da Computao . . . . . . . . . . . 10
1.2.2 Segunda Gerao (1955-1964) . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.2.3 Terceira Gerao (1964-1977) . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.2.4 Quarta Gerao (1977-1991) . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.2.5 Quinta Gerao (1991 dias atuais) . . . . . . . . . . . . . . . . . . . . . . 16
1.3 Recapitulando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2 Representao da informao 17
2.1 Conceito de bit e byte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2 Possibilidades de representao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2.1 Nmeros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2.2 Texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2.3 Imagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.2.4 Msica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.3 Recapitulando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.4 Atividades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Introduo Computao v

3 Sistemas de numerao 24
3.1 Noes de Sistema de Numerao . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.1.1 Sistema de numerao Egpcio (3000 a.C.) . . . . . . . . . . . . . . . . . . 25
3.1.2 Sistemas de numerao Babilnico (2000 a.C.) . . . . . . . . . . . . . . . . 25
3.1.3 Sistema de numerao Romano . . . . . . . . . . . . . . . . . . . . . . . . 26
3.1.4 Sistemas de numerao Indo-Arbico . . . . . . . . . . . . . . . . . . . . . 27
3.2 Sistema de Numerao Posicional . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.2.1 Base de um Sistema de Numerao . . . . . . . . . . . . . . . . . . . . . . 28
3.3 Converses entre bases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.3.1 Converses entre as bases 2, 8 e 16 . . . . . . . . . . . . . . . . . . . . . . 29
3.3.2 Converso de nmeros em uma base b qualquer para a base 10. . . . . . . . 31
3.3.3 Converso de nmeros da base 10 para uma base b qualquer . . . . . . . . . 32
3.4 Nmeros Binrios Negativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.4.1 Sinal e Amplitude/Magnitude (S + M) . . . . . . . . . . . . . . . . . . . . . 33
3.4.2 Complemento de 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.4.3 Complemento de 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.5 Aritmtica Binria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.5.1 Soma e Subtrao Binria . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.5.2 Subtrao nos computadores . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.5.2.1 Subtrao em complemento de dois . . . . . . . . . . . . . . . . . 37
3.5.3 Multiplicao e diviso binria . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.6 Representao de Nmero Fracionrio no Sistema Binrio . . . . . . . . . . . . . . 38
3.6.1 Notao de Ponto Fixo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.6.1.1 Soma e subtrao de nmeros fracionrios . . . . . . . . . . . . . 39
3.7 Fundamentos da Notao de Ponto Flutuante . . . . . . . . . . . . . . . . . . . . . 39
3.7.1 Notao de Excesso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.7.2 Notao de Ponto Flutuante . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.7.2.1 Ponto Flutuante . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.7.3 Problema com Arredondamento . . . . . . . . . . . . . . . . . . . . . . . . 42
3.7.3.1 Overflow e Underflow . . . . . . . . . . . . . . . . . . . . . . . . 43
3.7.4 Adio e Subtrao em Ponto Flutuante . . . . . . . . . . . . . . . . . . . . 43
3.8 Lgica Binria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.8.1 Operador NOT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.8.2 Operador AND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.8.3 Operador OR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.8.4 A soma em um Computador . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.9 Recapitulando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.10 Atividades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Introduo Computao vi

4 Organizao e Funcionamento do Computador 49


4.1 Arquitetura de um Computador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.1.1 Memria Principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.1.2 Unidade Central de Processamento (UCP) . . . . . . . . . . . . . . . . . . . 51
4.1.3 Unidades de Entrada/Sada . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.1.4 O Modelo de Barramento . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.2 Programando um computador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.2.1 Linguagem de Mquina . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.2.2 Executando Programas em Linguagem de Mquina . . . . . . . . . . . . . . 55
4.3 Recapitulando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4.4 Atividades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

5 Algoritmos, Linguagem de Programao, Tradutor e Interpretador 58


5.1 Algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.1.1 Exemplo de um Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.1.2 Programa de Computador . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.1.3 Construindo um algoritmo em sala de aula . . . . . . . . . . . . . . . . . . . 62
5.2 Linguagem de Programao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.2.1 Primeiras geraes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.2.2 Paradigma de Programao . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.3 Tradutor e Interpretador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.3.1 Tradutores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.3.2 Processo de Compilao . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.3.2.1 Passos da compilao . . . . . . . . . . . . . . . . . . . . . . . . 66
5.3.3 Processo de Montagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.3.3.1 Por que usar uma Linguagem de Montagem? . . . . . . . . . . . . 67
5.3.3.2 Tarefas do montador . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.3.3.3 Montadores de dois passos . . . . . . . . . . . . . . . . . . . . . 68
5.3.4 Ligao e Carregamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.3.4.1 Ligao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.3.4.2 Carregamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.4 Interpretadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.5 Usando os Softwares Bsicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.6 Recapitulando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.7 Atividades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

6 ndice Remissivo 75
Introduo Computao vii

Prefcio

texto

Processo gil de Produo de Livros

O processo gil e este curso tambm ser.

Importante
Leia com ateno os objetivos e a descrio do curso antes de se inscrever. Quer saber
mais? Consulte Processo gil de Produo de Livros [vii].

Fazer lista fcil

Incluir referncias brincadeira de criana

Exemplo de como inserir cdigos no texto


#include "teste.h"
#include <stdio.h>

int main(){
int a, b;
a = soma(2, 3);
printf("Soma = %d\n", a);
b = subtrai(4, 3);
printf("Subtrao = %d\n", b);
}

Pblico alvo

O pblico alvo desse livro so os alunos de Licenciatura em Computao, na modalidade distncia


1 . Ele foi concebido para ser utilizado numa disciplina de Introduo Computao, no primeiro

semestre do curso.
1 Embora ele tenha sido feito para atender aos alunos da Universidade Federal da Paraba, o seu uso no se restringe
a esta universidade, podendo ser adotado por outras universidades que adotam o sistema UAB.
Introduo Computao viii

Mtodo de Elaborao

Este livro foi realizado com Financiamento da CAPES.

Como voc deve estudar cada captulo

Leia a viso geral do captulo

Estude os contedos das sees

Realize as atividades no final do captulo

Verifique se voc atingiu os objetivos do captulo

NA SALA DE AULA DO CURSO

Tire dvidas e discuta sobre as atividades do livro com outros integrantes do curso

Leia materiais complementares eventualmente disponibilizados

Realize as atividades propostas pelo professor da disciplina

Caixas de dilogo

Durante o texto foram colocadas caixas de dilogo, nesta seo apresentamos os significados delas.

Nota
Esta caixa utilizada para realizar alguma reflexo.

Dica
Esta caixa utilizada quando desejamos remeter a materiais complementares.

Importante
Esta caixa utilizada para chamar ateno sobre algo importante.

Cuidado
Esta caixa utilizada para alertar sobre algo potencialmente perigoso.
Introduo Computao ix

Ateno
Esta caixa utilizada para alertar sobre algo potencialmente perigoso.

Os significados das caixas so apenas uma referncia, podendo ser adaptados conforme as intenes
dos autores.

Vdeos

Os vdeos so apresentados da seguinte forma:

Figura 1: Exemplo de vdeo: http://youtu.be/uDMs-TyjSek

Nota
Na verso impressa ir aparecer uma imagem quadriculada. Isto o qrcode
(http://pt.wikipedia.org/wiki/C%C3%B3digo_QR) contendo o link do vdeo. Caso voc tenha
um celular com acesso a internet poder acionar um programa de leitura de qrcode para
acessar o vdeo.
Na verso digital voc poder assistir o vdeo clicando diretamente sobre o link ou acio-
nando o play (na verso em HTML).

Compreendendo as referncias

Durante o texto ns podemos ter vrias referncias:

Referncias a captulos
Prefcio [vii]

Referncias a sees
Como voc deve estudar cada captulo [viii], Caixas de dilogo [viii].

Referncias a imagens e tabelas


Figura 2 [xii] Tabela 1 [xi]
Introduo Computao x

Nota
Na verso impressa, o nmero que aparece entre chaves [ ] corresponde ao nmero da
pgina onde se entra o contedo referenciado. Nas verses digitais do livro voc poder
clicar no link da referncia.

Cdigos e comandos

Os cdigos ou comandos so apresentados com a seguinte formao:


cc -S main.c teste.c

No exemplo a seguir, temos outra apresentao de cdigo fonte. Desta vez de um arquivo main.c,
que se encontra dentro do diretrio code/tradutor. O diretrio tradutor faz referncia ao
captulo onde o cdigo ser apresentado.
code/tradutor/main.c
#include "teste.h"
#include <stdio.h>

int main(){
int a, b;
a = soma(2, 3);
printf("Soma = %d\n", a);
b = subtrai(4, 3);
printf("Subtrao = %d\n", b);
}

Baixando os cdigos fontes

Existem duas formas de acessar os cdigos fontes contidos neste livro.

Acesso on-line individual


Voc pode acessar individualmente os arquivos deste livro pelo endereo: https://github.com/-
edusantana/introducao-a-computacao-livro/tree/master/livro/capitulos/code.

Baixando todos os cdigos


Voc tambm pode baixar o cdigo fonte do livro inteiro, que contm todos os cdigos menci-
onados no livro. Existem duas formas de baixar o cdigo inteiro, atravs de um arquivo zip ou
clonando o repositrio.

Arquivo zip
https://github.com/edusantana/introducao-a-computacao-livro/archive/master.zip. Depois
de baixar o arquivo, descompacte-o.
Clonando o repositrio
Use o comando: git clone https://github.com/edusantana/introducao-a-computacao-livro
Introduo Computao xi

Nota
Independente do mtodo utilizado para acessar os arquivos, os cdigos fontes esto organi-
zados por captulos no diretrio livro/capitulos/code.

Ateno
Os cdigos acessados por estes mtodos so referentes verso mais nova do livro (em
produo). possvel que eles sejam diferentes da verso que voc tenha no impresso.

Contribuindo com o livro

Voc pode contribuir com a atualizao e correo deste livro. A tabela a seguir resume os mtodos
de contribuies disponveis:

Tabela 1: Mtodos para contribuio do livro

Mtodo de
contribui- Habilidades necessrias Descrio
o

Inscrio no site do Consiste em acessar o repositrio do livro e


github submeter um erro, uma sugesto ou uma crtica
Issue track atravs da criao de um Issue. Quando
Preenchimento de um providncias forem tomadas voc ser notificado
formulrio disso.

Realizar fork de Consiste em acessar os arquivos fontes do livro,


Submisso projetos realizar a correo desejada e submet-la para
de correo Atualizar texto do livro avaliao. Este processo o mesmo utilizado na
produo de softwares livres.
Realizar PullRequest

Contribuio atravs do Issue track


Para contribuir com um erro, sugesto ou crtica atravs de um envio de uma mensagem acesse:
https://github.com/edusantana/introducao-a-computacao-livro/issues/new
Introduo Computao xii

Figura 2: Exemplo de contribuio atravs do Issue track

Manual sobre produo dos livros


Caso voc deseja submeter correes, precisar compreender o processo de produo dos livros.
O manual que o descreve pode ser acessado em http://producao.virtual.ufpb.br.
Introduo Computao 1 / 76

Captulo 1

Histria dos computadores

O BJETIVOS DO CAPTULO
Ao final deste captulo voc dever ser capaz de:

Citar os precursores dos computadores


Discorrer sobre a importncia do surgimento dos cartes perfurados
Descrever como eram os computadores em cada uma das 5 geraes
Explicar porque a palavra bug passou a ser empregada para designar defeitos
Relatar a importncia do circuito integrado no processo de fabricao dos computado-
res

Os computadores fazem parte do dia a dia da sociedade contempornea, mas voc conhece a histria
deles?
Conhecer a histria dos computadores importante pois atravs do estudo do passado que pode-
mos compreender e valorizar o presente. Ao decorrer do captulo veremos exemplos de como ideias
simples contriburam para evoluo da humanidade.
Mas o que um computador? A palavra computador significa aquele que faz clculos, seja ele
pessoa ou mquina. Sem dvida as pessoas foram os primeiros computadores, j que passavam horas
realizando contas e mais contas. Inclusive, veremos mais a adiante que o surgimento de uma simples
calculadora causou revolta pois as pessoas tiveram medo de perder seus empregos. Mas no vamos
precipitar nossos estudos, vamos comear pelo incio.

Nota
Daqui e em diante, sempre que mencinarmos a palavra computador estaremos nos referindo
ao seu sentido usual, de mquinas.

Neste captulo iremos conhecer os instrumentos e mquinas precursores dos computadores, e sabere-
mos em qual momento da histria surgiram as mquinas programveis. Em seguida, estudaremos as
geraes de computadores, procurando entender a sua evoluo.
Para ajud-lo na leitura que se segue, convidamos a assistir estes vdeos sobre a Histria do Compu-
tador.
Introduo Computao 2 / 76

Figura 1.1: Histria do Computador 1: http://youtu.be/Ixgh3AhiL3E

Figura 1.2: Histria do Computador 2: http://youtu.be/dWiUZsoLD0M

1.1 Precursores dos computadores

So considerados precursores dos computadores todos os instrumentos ou mquinas que contriburam


com ideias para a criao dos mesmos. Dentre eles, o surgimento de uma mquina programvel foi
um grande marco na histria dos computadores.
Vamos iniciar nossos estudos com um instrumento que talvez voc conhea e provavelmente j utili-
zou na escola, o baco.

1.1.1 baco

O baco foi um dos primeiros instrumentos desenvolvidos para auxiliar os humanos na realizao de
clculos. Muitos atribuem sua criao China, mas existem evidncias deles na Babilnia no ano 300
A.C.
Introduo Computao 3 / 76

Figura 1.3: Ilustrao de um baco

A ideia bsico no baco considerar as contas (bolinhas) contidas na parte inferior, chamada de cho
do baco, com valor unitrio e cada conta contida na parte superior, chamada de cu do baco, com
valor de cinco unidades. Cada valor unitrio tem representao diferente dependendo da coluna em
que se encontra, logo, uma unidade na primeira coluna tem valor 1 em nosso sistema numrico, j
uma unidade na segunda coluna tem valor 10.

Dica
Voc pode conhecer mais sobre o baco no seguinte site:
http://www.educacaopublica.rj.gov.br/oficinas/matematica/abaco/03.html

1.1.2 Ossos de Napier

Em 1614, John Napier (l-se Neper) descobriu os clculos logaritmos.

"A inveno dos logaritmos surgiu no mundo como um relmpago. Nenhum trabalho
prvio anunciava ou fazia prever a sua chegada. Surge isolada e abruptamente no pen-
samento humano sem que se possa considerar consequncia de obras ou de pesquisas
anteriores"
Lord Moulton

Napier tambm inventou o que ficou conhecido por "Ossos de Napier"(Figura 1.4 [4]), que auxiliavam
na realizao de multiplicaes, baseando-se na teoria de logaritmos.
Introduo Computao 4 / 76

Figura 1.4: Ilustrao dos Ossos de Napier.

Figura 1.5: Ilustrao da operao de multiplicao utilizando os ossos de Napier: 46785399 x 7.

Nota
Para conhecer como os Ossos de Napier funcionam consulte: http://eu-
thais.blogspot.com.br/2010/08/como-funcionam-os-bastoes-de-napier.html ou
http://en.wikipedia.org/wiki/Napier%27s_bones (em ingls).

A criao da Rgua de Clculo, (Figura 1.6 [4]) em 1632 na Inglaterra, foi diretamente influenciada
pelos Ossos de Napier. Esta rgua chegou a ser utilizada pelos engenheiros da NASA, na dcada de
1960, nos programas que levaram o homem Lua.

Figura 1.6: Rgua de Clculo


Introduo Computao 5 / 76

1.1.3 As rodas dentadas de Pascal (Pascaline)

Em 1642, o francs Blaise Pascal, aos 19 anos de idade, foi o primeiro a inventar um dispositivo
mecnico para realizao de clculos. O dispositivo conhecido como As rodas dentadas de Pascal
(ou Pascaline, Figura 1.7 [5]).
Pascal era filho de um cobrador de impostos e auxiliava o pai na realizao de clculos utilizando
um instrumento similar ao baco. Mas segundo ele, o trabalho era muito entediante, o que o levou a
elaborar um dispositivo para realizao de somas e subtrao.

Figura 1.7: Pascaline de 8 dgitos aberta, mostrando as engrenagens (acima), e a apresentao da


mquina fechada (abaixo).

O mecanismo de funcionamento o mesmo utilizado at hoje nos odmetros de carros, onde as


engrenagens so organizadas de tal forma a simular o "vai um"para a prxima casa decimal nas
operaes de adio.

Dica
Existe um animao demonstrando o funcionamento da mquina pascaline, voc pode
acess-lo atravs do seguinte link: http://therese.eveilleau.pagesperso-orange.fr/pages/-
truc_mat/textes/pascaline.htm.

As operaes de soma eram realizadas girando as engrenagens em um sentido e as operaes de


subtrao no sentido oposto, enquanto que as operaes de multiplicao utilizavam vrios giros da
soma manualmente.
O surgimento da pascaline, no entanto, no agradou a todos, alguns empregados queriam destruir a
mquina com medo de perder seus empregos.
Introduo Computao 6 / 76

Dica
Voc pode consultar a biografia de Pascal em: http://www.thocp.net/biographies/-
pascal_blaise.html

1.1.4 Leibniz - A primeira calculadora com quatro operaes

Em 1672, o Alemo Gottfried Wilhelm Leibniz foi o primeiro a inventar uma calculadora que realizava
as 4 operaes bsicas (adio, subtrao, multiplicao e diviso). A adio utilizava um mecanismo
baseado na Pascaline, mas as operaes de multiplicao realizavam a sequncia de somas automti-
cas.
Leibniz tambm foi o primeiro a defender a utilizao do sistema binrio, que fundamental nos
computadores digitais que utilizamos hoje.

1.1.5 Mquinas Programveis

Um marco na histria foi a inveno de mquinas programveis, que funcionavam de forma diferente
de acordo com uma programao que lhes era fornecida.

1.1.5.1 Tear de Jacquard

Em 1804, o Francs Joseph Marie Jacquard inventou uma mquina de tear que tranava o tecido de
acordo com uma programao que era fornecida atravs de furos num carto.

Figura 1.8: Mquina de tear usando programao atravs de cartes perfurados.

A inveno de Jacquard revolucionou a industria de tecido, e em 1806, ela foi declarada propriedade
pblica e ele foi recompensado com uma penso e royalties por cada mquina que fosse construda.
Introduo Computao 7 / 76

Figura 1.9: Esquerda: Jacquard perfurando os cartes. Direita: cartes perfurados.

1.1.5.2 A Mquina Diferencial

Em 1822, o matemtico ingls Charles Babbage props a construo de uma mquina de calcular que
ocuparia uma sala inteira. O propsito da mquina seria de corrigir os erros das tabelas de logaritmos,
muito utilizadas pelo governo britnico devido as grandes navegaes. A construo da mquina,
no entanto, excedeu em oramento e tempo na sua construo, foi inclusive o projeto mais caro que
o governo britnico j havia financiado. Eventualmente, os subsdios foram retirados e o projeto
abortado.

Figura 1.10: Pequena seo da mquina diferencial de Charles Babbage.

Vdeo de uma rplica da Mquina Diferencial de Charles Barbage:


Introduo Computao 8 / 76

Figura 1.11: Demonstrao da Mquina Diferencial de Charles Babbage: http://youtu.be/-


BlbQsKpq3Ak

1.1.5.3 A Mquina Analtica

Aps a inacabada mquina diferencial, em 1837, Charles Babbage anunciou um projeto para cons-
truo da Mquina Analtica. Influenciado pelo tear de Jacquard, Babbage props uma mquina de
propsito genrico, utilizando uma programao atravs de cartes perfurados.
Babbage trouxe um grande avano intelectual na utilizao de cartes perfurados, enquanto Jacquard
utilizava os cartes apenas para acionar ou desativar o funcionamento uma determinada seo da
mquina de tear, Babbage percebeu que os cartes poderiam ser utilizados para armazenar ideias abs-
tratas, sejam elas instrues ou nmeros, e que poderiam ser referenciados posteriormente, adontando
para sua mquina o conceito de memria.

Figura 1.12: Mquina Analtica e os cartes perfurados.

Ele percebeu que os cartes perfurados poderiam ser utilizados para guardar nmeros, sendo utiliza-
dos como um mecanismo de armazenamento de dados e futuramente poderiam ser referenciados. Ele
idealizou o que hoje chamamos de unidade de armazenamento e unidade de processamento de
dados.
A principal funcionalidade que a diferenciava das mquinas de calcular era a utilizao de instrues
condicionais. A mquina poderia executar fluxos diferentes baseada em condies que eram avaliadas
conforme instrues perfuradas nos cartes.
Nenhum dos dois projetos de Babbage foram concludos, a mquina analtica se fosse construda teria
o tamanho de uma locomotiva.
Introduo Computao 9 / 76

1.1.5.4 A Primeira programadora

A condessa de Lovelace, Ada Byron, se interessou pela mquina analtica de Babbage e se comuni-
cava com ele atravs de cartas e encontros. Ela passou a escrever programas que a mquina poderia
ser capaz de executar, caso fosse construda. Ela foi a primeira a reconhecer a necessidade de loops e
sub-rotinas. Por esta contribuio, Ada ficou reconhecida na histria como a primeira programadora.

Figura 1.13: Ada Lovelace, primeira programadora.

1.1.6 Linha do tempo

Figura 1.14: Linha do tempo dos precursores dos computadores

1.2 As geraes dos computadores

Os computadores so mquinas capazes de realizar vrios clculos automaticamente, alm de possuir


dispositivos de armazenamento e de entrada e sada.
Nesta seo iremos ver a evoluo dos computadores at os dias atuais.

1.2.1 Primeira Gerao (1946-1954)

A primeira gerao dos computadores marcada pela utilizao de vlvulas. A vlvula um tubo de
vidro, similar a uma lmpada fechada sem ar em seu interior, ou seja, um ambiente fechado a vcuo,
e contendo eletrodos, cuja finalidade controlar o fluxo de eltrons. As vlvulas aqueciam bastante e
costumavam queimar com facilidade.
Introduo Computao 10 / 76

Figura 1.15: As vlvulas eram do tamanho de uma lmpada.

Alm disso, a programao era realizada diretamente na linguagem de mquina, o que dificultava a
programao e consequentemente despendia muito tempo. O armazenamento dos dados era realizado
em cartes perfurados, que depois passaram a ser feitos em fita magntica.
Um dos representantes desta gerao o ENIAC. Ele possua 17.468 vlvulas, pesava 30 toneladas,
tinha 180 m2 de rea construda, sua velocidade era da ordem de 100 kHz e possuia apenas 200 bits
de memria RAM.

Figura 1.16: ENIAC, representante da primeira gerao dos computadores.

Nenhum dos computadores da primeira gerao possuam aplicao comercial, eram utilizados para
fins balsticos, predio climtica, clculos de energia atmica e outros fins cientficos.

1.2.1.1 Alan Turing - O pai da Cincia da Computao

Alan Mathison Turing(23 de Junho de 1912 7 de Junho de 1954) foi um matemtico, lgico,
criptoanalista e cientista da computao britnico. Foi influente no desenvolvimento da cincia da
computao e proporcionou uma formalizao do conceito de algoritmo e computao com a m-
quina de Turing, desempenhando um papel importante na criao do computador moderno. Durante
a Segunda Guerra Mundial, Turing trabalhou para a inteligncia britnica em Bletchley Park, num
centro especializado em quebra de cdigos. Por um tempo ele foi chefe de Hut 8, a seo responsvel
Introduo Computao 11 / 76

pela criptoanlise da frota naval alem. Planejou uma srie de tcnicas para quebrar os cdigos ale-
mes, incluindo o mtodo da bombe, uma mquina eletromecnica que poderia encontrar definies
para a mquina de criptografia alem, a Enigma. Aps a guerra, trabalhou no Laboratrio Nacional
de Fsica do Reino Unido, onde criou um dos primeiros projetos para um computador de programa
armazenado, o ACE.
Aos 24 anos de idade, consagrou-se com a projeo de uma mquina que, de acordo com um sistema
formal, pudesse fazer operaes computacionais. Mostrou como um simples sistema automtico po-
deria manipular smbolos de um sistema de regras prprias. A mquina terica de Turing pode indicar
que sistemas poderosos poderiam ser construdos. Tornou possvel o processamento de smbolos, li-
gando a abstrao de sistemas cognitivos e a realidade concreta dos nmeros. Isto buscado at hoje
por pesquisadores de sistemas com Inteligncia Artificial (IA). Para comprovar a inteligncia artifi-
cial ou no de um computador, Turing desenvolveu um teste que consistia em um operador no poder
diferenciar se as respostas a perguntas elaboradas pelo operador eram vindas ou no de um compu-
tador. Caso afirmativo, o computador poderia ser considerado como dotado de inteligncia artificial.
Sua mquina pode ser programada de tal modo que pode imitar qualquer sistema formal. A ideia de
computabilidade comeou a ser delineada.
A maior parte de seu trabalho foi desenvolvida na rea de espionagem e, por isso, somente em 1975
veio a ser considerado o "pai da Cincia da Computao".
Se possvel, assista ao vdeo do Globo Cincia sobre a vida e obra de Alan Turing:

Figura 1.17: Vida e Obra de Alan Turing: http://youtu.be/yIluxaHL0v0


Introduo Computao 12 / 76

O primeiro bug da histria


A palavra bug (inseto em ingls) empregada atualmente para designar um defeito, geral-
mente de software. Mas sua utilizao com este sentido remonta a esta poca. Conta a
histria que um dia o computador apresentou defeito. Ao serem investigadas as causas,
verificou-se que um inseto havia prejudicado seu funcionamento. A foto abaixo, suposta-
mente, indica a presena do primeiro bug.

At hoje os insetos costumam invadir os equipamentos eletrnicos, portanto observe-os


atentamente, evite deixar comida prximo ao computador e no fique sem utiliz-lo por um
longo perodo.

1.2.2 Segunda Gerao (1955-1964)

A segunda gerao de computadores foi marcada pela substituio da vlvula pelo transistor. O tran-
sistor revolucionou a eletrnica em geral e os computadores em especial. Eles eram muito menores
do que as vlvulas a vcuo e tinham outras vantagens: no exigiam tempo de pr-aquecimento, con-
sumiam menos energia, geravam menos calor e eram mais rpidos e confiveis. No final da dcada
de 50, os transistores foram incorporados aos computadores.

Dica
Para saber mais sobre o funcionamento dos transistores consulte http://pt.wikipedia.org/wiki/-
Transistor.
Introduo Computao 13 / 76

Figura 1.18: Circuito com vrios transistores (esquerda). Comparao do circuito com vlvulas (canto
superior-direito) com um circuito composto de transistores (inferior-direito).

Na segunda gerao o conceito de Unidade Central de Procedimento (CPU), memria, linguagem de


programao e entrada e sada foram desenvolvidos. O tamanho dos computadores diminuiu con-
sideravelmente. Outro desenvolvimento importante foi a mudana da linguagem de mquina para a
linguagem assembly, tambm conhecida como linguagem simblica. A linguagem assembly possibi-
lita a utilizao de mnemnicos para representar as instrues de mquina.

Figura 1.19: Computadores IBM da segunda gerao.

Em seguida vieram as linguagens de alto nvel, como, por exemplo, Fortran e Cobol. No mesmo
perodo surgiu o armazenamento em disco, complementando os sistemas de fita magntica e possibi-
litando ao usurio acesso rpido aos dados desejados.

1.2.3 Terceira Gerao (1964-1977)

A terceira gerao de computadores marcada pela utilizao dos circuitos integrados, feitos de
silcio. Tambm conhecidos como microchips, eles eram construdos integrando um grande nmero
de transistores, o que possibilitou a construo de equipamentos menores e mais baratos.
Introduo Computao 14 / 76

Figura 1.20: Comparao do tamanho do circuito integrado com uma moeda (esquerda) e um chip
(direita).

Mas o diferencial dos circuitos integrados no era o apenas o tamanho, mas o processo de fabricao
que possibilitava a construo de vrios circuitos simultaneamente, facilitando a produo em massa.
Este avano pode ser comparado ao advento da impressa, que revolucionou a produo dos livros.

Nota
Didaticamente os circuitos integrados so categorizados de acordo com a quantidade de
integrao que eles possuem:

LSI (Large Scale Integration - 100 transistores): computadores da terceira gerao

VLSI (Very Large Scale Integration - 1.000 transistores): computadores da quarta gerao

ULSI (Ultra-Large Scale Integration - milhes de transistores): computadores da quinta


gerao

Um computador que representa esta gerao foi o IBMs System/360, voltado para o setor comercial
e cientfico. Ele possua uma arquitetura plugvel, na qual o cliente poderia substituir as peas que
dessem defeitos. Alm disso, um conjunto de perifricos eram vendidos conforme a necessidade do
cliente.

Figura 1.21: Arquitetura plugvel da srie 360 da IBM.


Introduo Computao 15 / 76

A IBM, que at ento liderava o mercado de computadores, passou a perder espao quando concor-
rentes passaram a vender perifricos mais baratos e que eram compatveis com sua arquitetura. No
final desta gerao j comearam a surgir os computadores pessoais (Figura 1.22 [15]).

Figura 1.22: Computador Apple I.

Outro evento importante desta poca foi que a IBM passou a separar a criao de hardware do de-
senvolvimento de sistemas, iniciando o mercado da indstria de softwares. Isto foi possvel devido a
utilizao das linguagens de alto nvel nestes computadores.

Linguagem de alto nvel


Uma linguagem considerada de alto nvel quando ela pode representar ideias abstratas de
forma simples, diferente da linguagem de baixo nvel que representa as prprias instrues
de mquina.
Exemplo de linguagem de alto nvel:
x = y*7 + 2

Mesmo cdigo em baixo nvel (assembly):


load y // carrega valor de y
mul 7 // multiplica valor carregado por 7
add 2 // adiciona 2
store x // salva o valor do ltimo resultado em x

Os cdigos load, mul, add e store so os mnemnicos que representam as instrues


em cdigo de mquina (binrio).

1.2.4 Quarta Gerao (1977-1991)

Os computadores da quarta gerao so reconhecidos pelo surgimento dos processadores unidade


central de processamento. Os sistemas operacionais como MS-DOS, UNIX, Apples Macintosh fo-
ram construdos. Linguagens de programao orientadas a objeto como C++ e Smalltalk foram de-
senvolvidas. Discos rgidos eram utilizados como memria secundria. Impressoras matriciais, e os
teclados com os layouts atuais foram criados nesta poca.
Os computadores eram mais confiveis, mais rpidos, menores e com maior capacidade de armaze-
namento. Esta gerao marcada pela venda de computadores pessoais (Figura 1.23 [16]).
Introduo Computao 16 / 76

Figura 1.23: Computador pessoal da quarta gerao.

1.2.5 Quinta Gerao (1991 dias atuais)

Os computadores da quinta gerao usam processadores com milhes de transistores. Nesta gerao
surgiram as arquiteturas de 64 bits, os processadores que utilizam tecnologias RISC e CISC, discos
rgidos com capacidade superior a 600GB, pen-drives com mais de 1GB de memria e utilizao de
disco tico com mais de 50GB de armazenamento.

Figura 1.24: Computador da quinta gerao.

A quinta gerao est sendo marcada pela inteligncia artificial e por sua conectividade. A inteli-
gncia artificial pode ser verificada em jogos e robores ao conseguir desafiar a inteligncia humana. A
conectividade cada vez mais um requisito das indstrias de computadores. Hoje em dia, queremos
que nossos computadores se conectem ao celular, a televiso e a muitos outros dispositivos como
geladeira e cmeras de segurana.

1.3 Recapitulando

Estudamos neste captulo a histria do computador. Conhecemos os precursores do computador,


iniciando pelo o baco que auxiliava a humanidade na realizao de clculos. Muitos sculos depois,
Napier descobriu os logaritmos e inventou os ossos de Napier. Pascal inventou uma mquina que era
capaz de realizar somas e subtraes atravs de engrenagens.
Tambm vimos que no sculo XIX, o Tear de Jacquard introduziu o uso de cartes perfurados, e mais
tarde, Charles Babbage adaptou a ideia para o uso em sistemas computacionais, embora nunca tenha
terminado a construo de suas mquinas.
Em seguida, conclumos os estudos do captulo aprendendo sobre as geraes dos computadores,
inicialmente com o uso de velas, depois com transistores e finalmente com a utilizao de circuitos
integrados e como eles revolucionaram a fabricao dos computadores.
Introduo Computao 17 / 76

Captulo 2

Representao da informao

O BJETIVOS DO CAPTULO
Ao final deste captulo voc dever ser capaz de:
Explicar o que so bit e byte e a importncia do ltimo para representao da informa-
o
Explicar como nmeros, textos, imagens e msicas podem ser expressos atravs de
sequncias de bits
Ser capaz de representar novas informaes atravs de bits, com o auxlio de uma tabela

Voc provavelmente j ouviu algum falar que os computadores trabalham internamente apenas com
0 e 1 (zero e um). Tudo o que voc assiste, escuta ou cria no computador, processado internamente
atravs de sequncias de zeros e uns. O computador ao ler estas sequncias, consegue interpret-las e
em seguida apresentar as informaes contidas nelas.
Neste captulo estudaremos o conceito e bit e byte e como eles podem ser utilizados para representar
diversas informaes.
Vamos comear nossos estudos aprendendo sobre os bits e bytes.

2.1 Conceito de bit e byte

Um bit ou dgito binrio (binary digit), a unidade bsica que os computadores e sistemas digitais
utilizam para trabalhar, ele pode assumir apenas dois valores, 0 ou 1. Um byte uma sequncia de 8
bits.
Fisicamente, um bit pode ser representado de vrias formas: atravs de dois valores de voltagem apli-
cados num fio, diferentes direes de magnetizao em uma fita magntica, entre outras. O importante
que seja possvel identificar dois estados diferentes.

Importante
O byte a menor unidade de armazenamento utilizada pelos computadores. Isto quer
dizer que, ns nunca conseguiremos salvar menos do que 8 bits.

Na prxima seo iremos estudar como os bits e bytes so utilizados na representao de dados e
mdias.
Introduo Computao 18 / 76

2.2 Possibilidades de representao

Como um bit s pode assumir dois valores (0 ou 1), s ser possvel representar exatamente dois
estados distintos. Na Tabela 2.1 [18] ns temos exemplos de como podemos associar significados aos
valores do bit.
Por exemplo, em um sistema com trava eletrnica, o valor 0 poderia indicar que a porta estava fechada,
enquanto 1 indicaria que a porta est aberta. Em outro sistema que registra o estado civil, 0 poderia
representar Solteiro, enquanto 1 seria Casado.

Tabela 2.1: Representaes com um bit.

Bit Porta Lmpada Sexo Detector de movimento Estado civil


0 Fechada Desligada Masculino Sem movimento Solteiro
1 Aberta Ligada Feminino Com movimente Casado

Para representar mais de dois valores distintos ns precisamos de uma sequncia de bits maior. Na
Tabela 2.2 [18] ns temos exemplos de representaes utilizando sequncias com 2 bits, obtendo 4
possibilidades. Nesta caso, o estado civil Casado passou a ser representado pela sequncia 01.

Tabela 2.2: Representaes com dois bits.

Sequencia de Bits Lmpada Estado civil


00 Desligada Solteiro
01 Ligada com intensidade Casado
baixa
10 Ligada com intensidade Divorciado
alta
11 No utilizado Vivo

Nota
Observe que o nmero de possibilidades diferentes que podemos representar depende do
tamanho da sequncia de bits que estamos utilizando, mais precisamente: 2tamanho .

21 = 2 22 = 4 23 = 8 24 = 16
25 = 32 26 = 64 27 = 128 28 = 256 possibilidades (um
byte)
16 bits = 65.535 32 bits = 4.294.967.295 64 bits =
18.446.744.073.709.551.615

As tabelas so bastante utilizadas para representar informaes. Em uma coluna colocamos o que de-
sejamos representar e na outra sua representao binria. No h uma ordem particular, por exemplo,
na Tabela 2.2 [18] Solteiro era representado por 00, mas poderamos construir outra tabela em que
seria codificado como 11 (l-se um-um).
Introduo Computao 19 / 76

Importante
O termo codificar significa traduzir um contedo para a sua representao binria.

Percebam tambm que, quando todas as informaes desejadas j foram representadas, podem existir
sequncias binrias que no possuem significado definido, que foi o caso da sequncia 11 para a
lmpada (Tabela 2.2 [18]).

2.2.1 Nmeros

Independente do que desejamos representar, o primeiro passo verificar quantas informaes diferen-
tes iremos utilizar e, com base nestas informaes podemos calcular quantos bits sero necessrios
para representar todas as possibilidades.
Para representar nmeros necessrio estabelecer o intervalo que desejamos utilizar, pois precisamos
definir quantas possibilidades diferentes queremos representar. J vimos que com 8 bits podemos
representar 256 possibilidades (nmeros) diferentes. Para representar nmeros inteiros1 e positivos
podemos construir uma tabela com todas estas possibilidades. Na Tabela 2.3 [19] temos exemplos de
como alguns desses nmeros so representados.

Tabela 2.3: Representao de nmeros utilizando um byte.

Num Byte Num Byte Num Byte Num Byte Num Byte
0 00000000 8 00001000 16 00010000 24 00011000 248 11111000
1 00000001 9 00001001 17 00010001 25 00011001 249 11111001
2 00000010 10 00001010 18 00010010 26 00011010 250 11111010
3 00000011 11 00001011 19 00010011 27 00011011 251 11111011
4 00000100 12 00001100 20 00010100 28 00011100 252 11111100
5 00000101 13 00001101 21 00010101 29 00011101 253 11111101
6 00000110 14 00001110 22 00010110 30 00011110 254 11111110
7 00000111 15 00001111 23 00010111 31 00011111 255 11111111

Nota
Usualmente os bits so representados utilizando o sistema hexadecimal, pois eles ocupam
menos espao. Por exemplo, a sequncia de bits 1111 1000 expressa por F8 em hexa-
decimal.

2.2.2 Texto

Nesta seo ns iremos aprender como o computador representa texto. Novamente, podemos utilizar
uma tabela definindo os caracteres que desejamos representar e suas correspondncias binrias.
O ASCII o padro de representao de caracteres mais conhecido. Na Tabela 2.4 [20] apresentado
um extrato da tabela ASCII, onde cada caractere possui sua representao em bits. Este padro
1 As representaes de nmeros negativos e reais (ponto flutuante) tambm so possveis utilizando outras estratgias.
Introduo Computao 20 / 76

tambm inclui outros caracteres de controle, no apresentados na tabela, como fim de linha e final de
arquivo. A composio de um texto realizada informado a sequncia de caracteres contidos nele.

Tabela 2.4: Extrato da tabela ASCII

CaractereByte CaractereByte CaractereByte CaractereByte CaractereByte


a 01100001 A 01000001 n 01101110 N 01001110 0 00110000
b 01100010 B 01000010 o 01101111 O 01001111 1 00110001
c 01100011 C 01000011 p 01110000 P 01010000 2 00110010
d 01100100 D 01000100 q 01110001 Q 01010001 3 00110011
e 01100101 E 01000101 r 01110010 R 01010010 4 00110100
f 01100110 F 01100110 s 01110011 S 01010011 5 00110101
g 01100111 G 01100111 t 01110100 T 01010100 6 00110110
h 01101000 H 01101000 u 01110101 U 01010101 7 00110111
i 01101001 I 01101001 v 01110110 V 01010110 8 00111000
j 01101010 J 01101010 w 01110111 W 01010111 9 00111001
k 01101011 K 01101011 x 01111000 X 01011000
l 01101100 L 01001100 y 01111001 Y 01011001
m 01101101 M 01001101 z 01111010 Z 01011010

Importante
Percebam que neste sistema os caracteres so representados por exatamente um byte, que
o tamanho mnimo possvel de ser salvo no computador.

Talvez voc tenha percebido a ausncia dos caracteres especiais, como o "", "", alm dos caracteres
acentuados como "", "", "", etc. Isto porque o padro ASCII foi criado por americanos para
codificar as mensagens escritas no idioma ingls, que no possuem tais caracteres. Por esta razo,
existem vrios outros sistemas de codificao para melhor representar as mensagens do idioma que
se deseja utilizar, alguns exemplos so: Unicode, UTF-8 e ISO 8859-1 (padro latino-americano).

Dica
Faa um teste! Abra um editor de texto como o bloco de notas, gedit ou kate (no use o
Word). Digite abc no documento em branco e salve-o. Em seguida, verifique o tamanho do
arquivo, dependendo da codificao utilizada pelo seu editor o arquivo poder ter de 3 a 8
bytes.

2.2.3 Imagem

Uma das formas possveis para representar imagens trat-las como grades de pontos (ou pixels).
Ao atribuir uma cor para cada ponto, podemos ento pintar a imagem. Na Figura 2.1 [21] ns temos
uma imagem e um recorte em destaque, mostrando a grade de pontos com suas respectivas cores.
Alm das cores dos pontos tambm necessrio definir o tamanho da grade (quantos pontos teremos
na horizontal e na vertical), tambm conhecida como resoluo da imagem. Sem a resoluo teramos
apenas um linha de pontos coloridos.
Introduo Computao 21 / 76

Figura 2.1: Fotografia evidenciando a grade de pontos.

Um sistema popular de representao de cores o RGB, onde reservado um byte para os tons de
cada uma das cores primrias: vermelho, verde e azul. Como um byte permite representar 256 tons
de uma cor, ao total so possveis representar 16 milhes (256x256x256) de cores.

Nota
Atravs do sistema RGB podemos representar as trs cores primrias e as suas derivadas,
que so as cores resultantes das misturas das cores primrias. Neste sistema, o branco
interpretado como sendo a unio de todas as cores, e o preto a ausncia de cor. Este
sistema utilizado pelo formato de imagem BMP.
O sistema RGBA inclui tambm um canal alpha, responsvel por representar a transparncia
do ponto, utilizado pelo formato de imagem PNG.

2.2.4 Msica

Para representar uma msica, podemos imagin-la como sendo apenas uma partitura e salvar todas as
informaes contidas nela. Depois a msica poder ser ouvida tocando a partitura salva.

Figura 2.2: Partitura da msica Marcha Soldado.


Introduo Computao 22 / 76

Nota
Os toques dos antigos celulares monofnicos utilizavam este sistema para reproduzir as m-
sicas, salvando apenas as notas dos tons. O formato de arquivo MID utiliza esta estratgia.
Voc pode baixar esta msica em: https://github.com/edusantana/introducao-a-computacao-
livro/raw/master/arquivos/midias/marcha_soldado.mid

Voc deve est pensando, "Mas as msicas MP3 que escuto tambm tem voz, como ela represen-
tada?". Os sons tambm podem ser representados atravs das frequncias de ondas (Figura 2.3 [22])
que os caracterizam. Mais tarde, quando voc desejar escutar as msicas, o computador ser capaz
de reproduzir os mesmos sons.

Figura 2.3: Representao de uma msica atravs de ondas.

Se possvel, acessem este vdeo sobre a representao da informao.

Figura 2.4: Vdeo sobre Representao da Informao: http://youtu.be/y_eCItEibHI

2.3 Recapitulando

Neste captulo voc aprendeu o que so bits e bytes, e a importncia do ltimo para salvar dados no
computador.
Em seguida, vimos como dados podem ser representados atravs de uma tabela, e como calcular
quantos bits so necessrios para representar as informaes que desejamos.
Por ltimo, vimos como nmeros, textos, imagens e msicas podem ser representadas atravs de bits.
Introduo Computao 23 / 76

2.4 Atividades

1. Utilizando o mtodo de representao de nmeros estudado (Seo 2.2.1 [19]), represente os


nmeros 32, 64 e 128 em bytes.

2. Como voc representaria todos os meses do ano em bits?

3. Quantos bits so necessrios para representar 150 possibilidades diferentes?

4. H Como voc representaria as horas em bits?

5. H Como voc representaria o tabuleiro abaixo em binrio? Quantos bytes sua estratgia utiliza?
Introduo Computao 24 / 76

Captulo 3

Sistemas de numerao

O BJETIVOS DO CAPTULO
Ao final deste captulo voc dever ser capaz de:

Entender a origem dos sistemas de numerao na histria


Explicar o funcionamento do sistema de numerao binrio
Ser capaz de efetuar operaes da aritmtica e lgica binria
Compreender como a lgica binria permite criar operaes mais complexas no com-
putador

Um numeral um smbolo ou grupo de smbolos que representa um nmero em um determi-


nado instante da histria humana. Tem-se que, numa determinada escrita ou poca, os numerais
diferenciaram-se dos nmeros do mesmo modo que as palavras se diferenciaram das coisas a que se
referem. Os smbolos "11", "onze"e "XI"(onze em latim) so numerais diferentes, representativos do
mesmo nmero, apenas escrito em idiomas e pocas diferentes. Este captulo debrua-se sobre os
vrios aspectos dos sistemas de numerais.
Entraremos em mais detalhes sobre o sistema de numerao binria devido a sua utilizao nos com-
putadores, permitindo assim, que o mesmo realize pequenas operaes aritmticas que serviro como
base para grandes operaes como busca, ordenao e indexao de informao entre outras opera-
es comuns do dia a dia.

3.1 Noes de Sistema de Numerao

H milhares de anos o modo de vida era muito diferente do atual. Os homens primitivos no tinham
necessidade de contar. Eles no compravam, no vendiam, portanto no usavam dinheiro.
Com o passar dos anos, os costumes foram mudando e o homem passou a cultivar a terra, a criar
animais, a construir casas e a comercializar. Com isso, surgiu a necessidade de contar.
A vida foi tornando-se cada vez mais complexa. Surgiram as primeiras aldeias que, lentamente,
foram crescendo, tornando-se cidades. Algumas cidades se desenvolveram, dando origem s grandes
civilizaes. Com o progresso e o alto grau de organizao das antigas civilizaes, a necessidade de
aprimorar os processos de contagem e seus registros tornou-se fundamental.
Foram criados, ento, smbolos e regras originando assim os diferentes sistemas de numerao.
Introduo Computao 25 / 76

3.1.1 Sistema de numerao Egpcio (3000 a.C.)

Um dos primeiros sistemas de numerao que temos conhecimento o egpcio, quefoi desenvolvido
pelas civilizaes que viviam no vale do Rio Nilo, ao nordeste da frica.
Observem, na Figura 3.1 [25], os smbolos e a representao de alguns nmeros nesse sistema de
numerao.

Figura 3.1: Sistema de Numerao Egpcio

Este sistema adota o princpio aditivo, ou seja, os smbolos possuem seus respectivos valores indivi-
duais e juntos passam a formar novos valores pela simples adio destes.

3.1.2 Sistemas de numerao Babilnico (2000 a.C.)

Os babilnios viviam na Mesopotmia, nos vales dos rios Tigres e Eufrates, na sia. Esta regio
ocupada atualmente pelo Iraque.
Na escrita dos nmeros, o sistema de numerao dos babilnios se parecia muito com o sistema
de numerao desenvolvido pelos egpcios, ambos eram aditivos. Observe, na Figura 3.2 [26], os
smbolos e a representao de alguns nmeros, de 7 a 59, nesse sistema de numerao.
Introduo Computao 26 / 76

Figura 3.2: Sistema de Numerao Babilnico

Dica
Agora com voc. Qual seria o valor que cada smbolo babilnico, seguindo os exemplos
da Figura 3.2 [26]?

=?

=?

3.1.3 Sistema de numerao Romano

O sistema de numerao romano, apesar das dificuldades operatrias que apresentava, foi utilizado na
Europa durante muitos sculos. Esse sistema de numerao foi desenvolvido pela civilizao romana,
cuja sede era a cidade de Roma, situada na Itlia.
Ainda hoje, utilizamos esse sistema de numerao em algumas situaes, tais como:

na designao de papas e reis;

na designao de sculos e datas;

na indicao de captulos e volumes de livros;

nos mostradores de alguns relgios, etc.

Com o passar dos anos, o sistema de numerao romano (Figura 3.3 [27]) sofreu um longo processo
de evoluo. Inicialmente, os romanos utilizavam apenas o principio aditivo, sendo que um mesmo
smbolo podia ser repetido at, no mximo, quatro vezes. Posteriormente, eles evoluram este sistema,
passando a utilizar tambm o princpio subtrativo, alm de permitir a repetio de um mesmo smbolo,
no mximo, trs vezes.
Introduo Computao 27 / 76

Figura 3.3: Sistema de Numerao Romano

3.1.4 Sistemas de numerao Indo-Arbico

Os hindus, que viviam no vale do Rio Indo, onde hoje o Paquisto, conseguiram desenvolver um
sistema de numerao que reunia as diferentes caractersticas dos antigos sistemas.
Tratava-se de um sistema posicional decimal. Posicional porque um mesmo smbolo representava
valores diferentes dependendo da posio ocupada, e decimal porque era utilizado um agrupamento
de dez smbolos.
Esse sistema posicional decimal, criado pelos hindus, corresponde ao nosso atual sistema de nu-
merao, j estudado por voc nas sries anteriores. Por terem sido os rabes os responsveis pela
divulgao desse sistema. Ele ficou conhecido como sistema de numerao indo-arbico. Os dez
smbolos, utilizados para representar os nmeros, denominam-se algarismos indo-arbicos. So eles:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Introduo Computao 28 / 76

Dica
Veja, na Figura 3.4 [28]a , as principais mudanas ocorridas nos smbolos indo-arbicos, ao
longo do tempo.

Figura 3.4: Sistema de numerao Indo-Arbico

Observe que, inicialmente, os hindus no utilizavam o zero. A criao de um smbolo para o


nada, ou seja, o zero, foi uma das grandes invenes dos hindus.
a Fonte: http://www.programandoomundo.com/Sistema%20Indo-Arabico.htm.

3.2 Sistema de Numerao Posicional

O mtodo de numerao de quantidades ao qual estamos acostumados, utiliza um sistema de nume-


rao posicional. Isto significa que a posio ocupada por cada algarismo em um nmero altera seu
valor de uma potncia de 10 (na base 10) para cada casa esquerda.
Por exemplo:
No sistema decimal (base 10), no nmero 125 o algarismo 1 representa 100 (uma centena ou 102 ), o
2 representa 20 (duas dezenas ou 2 x 101 ), o 5 representa 5 mesmo (5 unidades ou 5x100 ).
Assim, em nossa notao:

125 = 1102 + 2101 + 5100

3.2.1 Base de um Sistema de Numerao

A base de um sistema a quantidade de algarismos disponveis na representao. A base 10 hoje a


mais usualmente empregada, embora no seja a nica utilizada. No comrcio pedimos uma dzia de
rosas (base 12) e marcamos o tempo em minutos e segundos (base 60).
Quando lidamos com computadores, muito comum e conveniente o uso de outras bases, as mais
importantes so a binria (base 2), octal (base 8) e hexadecimal (base 16).
Introduo Computao 29 / 76

Um sistema numrico de base k precisa de k smbolos diferentes para representar seus dgitos de 0 a
k-1. Os nmeros decimais so formados a partir de 10 dgitos decimais:

0 1 2 3 4 5 6 7 8 9

J os nmeros na base binria so representados a partir de dois dgitos:

0 1

O octal necessita de oito:


0 1 2 3 4 5 6 7

No caso de nmeros hexadecimais, so necessrios 16 algarismos. Portanto, sero mais 6 smbolos


alm dos dez algarismos arbicos. Em geral, usam-se as letras maisculas de A a F:

0 1 2 3 4 5 6 7 8 9 A B C D E F

A representao 31810 (base 10), significa:

31810 = 3102 + 1101 + 8100

Generalizando, representamos uma quantidade N qualquer, numa dada base b, com um nmero tal
como segue:

Nb = a0 bn + a1 bn-1 + . . . + an b0

Abaixo, o nmero 35 ser expresso nas bases elencadas acima:

Decimal
35 = 3101 + 5100 = 30 + 5 = 3510
Binrio
35 = 125 + 024 + 023 + 022 + 121 + 120 = 32 + 0 + 0 + 0 + 2 + 1 = 1000112
Octal
35 = 481 + 380 = 32 + 3 = 438
Hexadecimal
35 = 2161 + 3160 = 32 + 3 = 2316

3.3 Converses entre bases

Nesta seo iremos analisar as regras gerais para converter nmeros entre duas bases quaisquer.

3.3.1 Converses entre as bases 2, 8 e 16

As converses mais simples so as que envolvem bases que so potncias entre si. Vamos exemplificar
com a converso entre a base 2 e a base 8. Como 23 = 8, ento a converso funciona da seguinte forma:
Introduo Computao 30 / 76

separando os algarismos de um nmero binrio (base 2) em grupos de trs algarismos (comeando


sempre da direita para a esquerda) e convertendo cada grupo de trs algarismos para seu equivalente
em octal, teremos a representao do nmero em octal.
Por exemplo:

101010012 = 010 . 101 . 0012

Olhando a tabela de converso direta temos:

Tabela 3.1: Converso direta de binrio para octal e vice-


versa

Binrio Octal
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7

Logo:

0102 = 28 1012 = 58 0012 = 18 101010012 = 2518

Vamos agora exemplificar com uma converso entre as bases 2 e 16. Como 24 = 16, seguindo o
processo anterior, basta separarmos em grupos de quatro algarismos e converter cada grupo seguindo
a Tabela 3.2 [30].
Por exemplo:

110101011012 = 0110 . 1010 . 11012

Olhando a tabela de converso direta temos:

Tabela 3.2: Converso direta de binrio para hexadecimal e


vice-versa.

Binrio Hexadecimal Binrio Hexadecimal


0000 0 1000 8
0001 1 1001 9
0010 2 1010 A
0011 3 1011 B
0100 4 1100 C
0101 5 1101 D
Introduo Computao 31 / 76

Tabela 3.2: (continued)

Binrio Hexadecimal Binrio Hexadecimal


0110 6 1110 E
0111 7 1111 F

Logo:

01102 = 616 10102 = A16 11012 = D16 110101011012 = 6AD16

Vamos agora analisar a converso inversa.


Por exemplo:

A8116 = A . 8 . 116

Sabemos que:

A16 = 10102 816 = 10002 116 = 00012

Portanto:
A8116 = 1010100000012

3.3.2 Converso de nmeros em uma base b qualquer para a base 10.

Vamos lembrar a expresso geral j apresentada:

Nb = a0 bn + a1 bn-1 + . . . + an b0

A melhor forma de fazer a converso usando essa expresso. Como exemplo, o nmero 1011012
ter calculado seu valor na base 10:
1011012 = 125 + 024 + 123 + 122 + 021 + 120 = 4510

Outros exemplos:
Converter A516 para a base 10:

A516 = 10161 + 5160 = 160 + 5 = 16510

Converter 4859 para a base 10:

4859 = 492 +891 + 590 = 324 + 72 + 5 = 40110


Introduo Computao 32 / 76

3.3.3 Converso de nmeros da base 10 para uma base b qualquer

A converso de nmeros da base 10 para uma base qualquer, emprega algoritmos que sero o inverso
dos anteriores. O nmero decimal ser dividido sucessivas vezes pela base, o resto de cada diviso
ocupar sucessivamente as posies de ordem 0, 1, 2 e assim por diante, at que o resto da ltima
diviso (que resulta em quociente 0) ocupe a posio de mais alta ordem.

Converso do nmero 1910 para a base 2:

Logo temos:

1910 = 100112

Usando a converso anterior como prova real, temos:

100112 = 124 + 023 + 022 + 121 + 120 = 1910

Converso do nmero 27810 para a base 16:

Logo temos:

27810 = 11627816
Introduo Computao 33 / 76

3.4 Nmeros Binrios Negativos

Os computadores lidam com nmeros positivos e nmeros negativos, sendo necessrio encontrar uma
representao para nmeros com sinal negativo. Existe uma grande variedade de opes, das quais
nesta seo sero apresentadas apenas trs para representar valores negativos:

sinal e amplitude/magnitude (S+M)

complemento de 1

complemento de 2

3.4.1 Sinal e Amplitude/Magnitude (S + M)

Como o prprio nome indica, a representao sinal e amplitude utiliza um bit para representar o
sinal, o bit mais esquerda: 0 para indicar um valor positivo, 1 para indicar um valor negativo.

3.4.2 Complemento de 1

Na representao em complemento de 1 invertem-se todos os bits de um nmero para representar o


seu complementar: assim, se converte um valor positivo para um negativo, e vice-versa. Quando o bit
mais esquerda 0, esse valor positivo; se for 1, ento negativo.
Exemplo:

10010 = 011001002 (com 8 bits)

Invertendo todos os bits:


100110112 = 10010

Importante
O problema desta representao que existem 2 padres de bits para o 0, havendo assim
desperdcio de representao:

010 = 000000002 = 111111112

3.4.3 Complemento de 2

A soluo encontrada consiste em representar os nmeros em complemento de 2. Para determinar o


negativo de um nmero, inverte-se todos os seus bits e soma-se uma unidade.
Exemplo:
Introduo Computao 34 / 76

Representao binria
10110 = 011001012 (com 8 bits)

Invertendo todos os bits


100110102

Somando uma unidade


100110102 + 1 = 100110112 = 10110

A representao em complemento para 2 tem as seguintes caractersticas:

o bit da esquerda indica o sinal;

possui processo para converter um nmero de positivo para negativo e de negativo para positivo;

o 0 tem uma representao nica: todos os bits a 0;

a gama de valores que possvel representar com n bits -2n-1 . . . 2n-1 -1.

Exemplo:
Qual o nmero representado por 111001002 (com 8 bits)? Como o bit da esquerda 1 este nmero
negativo. Invertendo todos os bits:

000110112

Somando uma unidade:


000110112 + 1 = 000111002 = 2810

Logo:

111001002 = 2810

3.5 Aritmtica Binria

Como o computador manipula os dados (nmeros) atravs de uma representao binria, iremos es-
tudar agora a aritmtica do sistema binrio, a mesma usada pela ULA (Unidade Lgica e Aritmtica)
dos processadores.

3.5.1 Soma e Subtrao Binria

A tabuada da soma aritmtica em:


0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0 (e vai um para o dgito de ordem superior)
1 + 1 + 1 = 1 (e vai um para o dgito de ordem superior)
Introduo Computao 35 / 76

Por exemplo:

Efetuar 0111002 + 0110102

Nota
Soma-se as posies da direita para esquerda, tal como uma soma decimal.

Soluo:

A tabuada da subtrao aritmtica binria:


0 - 0 = 0
0 - 1 = 1 (vem um do prximo)
1 - 0 = 1
1 - 1 = 0

Nota
Como impossvel tirar 1 de 0, o artifcio pedir emprestado 1 da casa de ordem superior,
ou seja, na realidade o que se faz subtrair 12 de 102 e encontramos 12 como resultado,
devendo ento subtrair 1 do dgito de ordem superior. Este algoritmo exatamente o mesmo
da subtrao em decimal.

Por exemplo: 1111002 0110102 = ?

Nota
no esquea, subtrai-se as colunas da direita para a esquerda, tal como uma subtrao
decimal.

Soluo:
Introduo Computao 36 / 76

Figura 3.5: Vdeo sobre Soma e Subtrao Binria: http://youtu.be/NeQBC9Z5FHk

3.5.2 Subtrao nos computadores

Na eletrnica digital de dispositivos tais como computadores, circuitos simples custam menos e ope-
ram mais rpido do que circuitos mais complexos. Logo, nmeros em complemento de dois so
usados na aritmtica, pois eles permitem o uso dos circuitos mais simples, baratos e rpidos.
Uma caracterstica do sistema de complemento de dois que tanto os nmeros com sinal quanto os
nmeros sem sinal podem ser somados pelo mesmo circuito. Por exemplo, suponha que voc deseja
somar os nmeros sem sinal 13210 e 1410 .

O microprocessador tem um circuito na ULA (Unidade Lgica e Aritmtica) que pode somar nme-
ros binrios sem sinal, quando aparece o padro 100001002 em uma entrada e 000011102 na outra
entrada, resulta 100100102 na sada.
Surge a pergunta: como a ULA sabe que os padres de bits nas entradas representam nmero sem
sinal e no nmeros em complemento de dois? E a resposta : no sabe. A ULA sempre soma como
se as entradas fossem nmeros binrios sem sinal. Sempre produzir o resultado correto, mesmo se
as entradas forem nmeros em complemento de dois.

Isto comprova um ponto muito importante. O somador na ULA sempre soma padres de bits como
se eles fossem nmeros binrios sem sinal. a nossa interpretao destes padres que decide se
nmeros com ou sem sinal esto sendo tratados. O bom do complemento de dois que os padres
de bits podem ser interpretados de qualquer maneira. Isto nos permite trabalhar com nmeros com e
sem sinal sem requerer diferentes circuitos para cada padro.
Introduo Computao 37 / 76

A aritmtica de complemento de dois tambm simplifica a ULA em outro ponto. Todo microproces-
sador precisa da instruo de subtrao. Assim, a ULA deve ser capacitada a subtrair um nmero
de outro. Entretanto, se isto necessitar de um circuito de subtrao separado, a complexidade e o
custo da ULA seriam aumentados. Felizmente, a aritmtica de complemento de dois permite a ULA,
realizar operaes de subtrao usando um circuito somador. Ou seja, a CPU usa o mesmo circuito
tanto para soma como para subtrao.

3.5.2.1 Subtrao em complemento de dois

Uma vez que o complemento de dois foi formado, a CPU pode realizar uma subtrao indiretamente
pela adio do complemento de dois do Subtraendo com Minuendo. No esquecendo de ignorar o
ltimo transporte da adio.
Como exemplo temos a subtrao de 6910 (Minuendo) por 2610 (Subtraendo).
Jogue fora o transporte final:

Fica o desafio de descobrir porque o valor 7410 o complemento de 10 do nmero 2610 , a regra
anloga do complemento de 2 binria, ou seja, primeiro deve ser feito o complemento de 9 para cada
nmero individualmente e depois deve ser somado o valor 1.
Este mtodo permite CPU realizar subtrao e adio com o mesmo circuito. O mtodo que a CPU
usa para realizar subtrao de pouca importncia para o uso de microprocessadores.

3.5.3 Multiplicao e diviso binria

Vamos ver agora a tabuada da multiplicao:


0 x 0 = 0
0 x 1 = 0
1 x 0 = 0
1 x 1 = 1

Nota
O processo idntico multiplicao entre nmeros decimais.

Exemplo:
Efetuar: 1012 x 1102
Soluo:
Introduo Computao 38 / 76

No entanto, a multiplicao em computadores feita, tambm, por um artifcio: para multiplicar A


por n somamos A com A (n-1) vezes.
Exemplo:

4 x 3 = 4 + 4 + 4 = 12

E a diviso tambm pode ser feita por subtraes sucessivas, at o resultado zerar ou ficar negativo.
Este artifcio serve apenas para divises inteiras.
Por exemplo:

16 4 16 - 4 = 12 12 - 4 = 8 8 - 4 = 4 4 4 = 0

O nmero de subtraes indica o resultado da diviso inteira, neste caso, igual a 4.

Nota
Podemos concluir que qualquer operao aritmtica pode ser realizada em computadores
atravs de somas (diretas ou em complemento). Com isso diminui-se o nmero de circuitos
lgicos de operaes para o processador.

3.6 Representao de Nmero Fracionrio no Sistema Binrio

3.6.1 Notao de Ponto Fixo

Esta notao conhecida como Notao de Ponto Fixo, utiliza um ponto que funciona da mesma forma
que o ponto da notao decimal. Em outras palavras, os dgitos esquerda do ponto representam a
parte inteira do valor, funcionando da mesma forma que a notao binria. E os dgitos direita do
ponto representam a parte no inteira, sendo o expoente da base 2 decrementada em 1 a cada casa
afastada do ponto.
Exemplo:

10.1012 = 121 + 120 (parte inteira)


+ 12-1 + 02-2 + 02-3 (parte fracionria)
2 + 0,5 + 0,125 = 2,62510
Introduo Computao 39 / 76

3.6.1.1 Soma e subtrao de nmeros fracionrios

Para somarmos e subtrairmos duas representaes binrias contendo ponto, basta alinharmos os pon-
tos e aplicarmos o mesmo algoritmo de adio ou subtrao binria demonstrada anteriormente.
Exemplos:

3.7 Fundamentos da Notao de Ponto Flutuante

A utilizao da notao de ponto flutuante muito grande em computadores, tanto para clculos
matemticos com preciso, renderizao de imagens digitais (criao de imagens pelo computador)
entre outros. Os processadores atuais se dedicam muito em aperfeioar a tcnica de seus chips para
a aritmtica de ponto flutuante, devido demanda de aplicativos grficos e jogos 3D que se utilizam
muito deste recurso.
Nesta subseo iremos descrever os fundamentos da aritmtica de ponto flutuante, para isso, sero
apresentados alguns conceitos bsicos, que juntamente com os conceitos da seo anterior, serviro
para o entendimento do processo desta aritmtica em um sistema computacional.

3.7.1 Notao de Excesso

Para trabalhar com a Notao Ponto Flutuante, precisamos entender a representao dos nmeros
inteiros (negativos e no negativos) utilizando a Notao de Excesso.
Neste sistema, cada nmero codificado como um padro de bits, de comprimento convencionado.
Para estabelecer um sistema de excesso, primeiro escolhemos o comprimento do padro a ser empre-
gado, em seguida, escrevemos todos os diferentes padres de bits com este comprimento, na ordem
em que eles seriam gerados se estivssemos contando em binrio.
Logo, observamos que o primeiro desses padres, que representa um dgito 1 como seu bit mais
significativo, figura aproximadamente no centro da lista.
Introduo Computao 40 / 76

Tabela 3.3: Notao de excesso com 3 bits.

Valor Binrio (Notao de Excesso) Valor Representado


000 -4
001 -3
010 -2
011 -1
100 (centro) 0
101 1
110 2
111 3

Como podemos observar na Tabela 3.3 [40], escolhemos este padro para representar o ZERO, os
padres que o seguem sero utilizados para representar 1, 2, 3. . . , os padres que o precedem sero
adotados para a representao dos inteiros negativos -1, -2, -3. . .
Logo na Tabela 3.3 [40] podemos observar o cdigo resultante para padres de trs bits de compri-
mento.
Exemplo:

O valor 1 equivale a 1012 O valor -1 equivale a 0112

Nota
No sistema de Notao de Excesso fcil distinguir entre padres que representam valo-
res negativos e positivos, pois aqueles que apresentam um 0 no bit mais significativo so
nmeros negativos, servindo o mesmo como bit de sinal.

3.7.2 Notao de Ponto Flutuante

O primeiro ponto a ser discutido, o motivo da criao da Notao de Ponto Flutuante, j que na seo
anterior j tnhamos trabalhado com a representao de nmeros no inteiros utilizando a Notao de
Ponto Fixo.
O problema do Ponto Fixo, que o tamanho da parte inteira e da fracionria fica fixo com relao
a seu armazenamento em memria, logo para nmeros com a parte apenas inteira, a regio alocada
para tratar a parte fracionria ser inutilizada e vice-versa. Logo, para evitar este desperdcio criou-se
a Notao de Ponto Flutuante.

3.7.2.1 Ponto Flutuante

Vamos explicar a notao de ponto flutuante por meio de um exemplo que emprega somente um byte
de memria.
Primeiramente, escolhemos o bit mais significativo do byte para ser o bit de sinal do nmero. Um 0
neste bit significa que o valor representado no negativo, enquanto o 1 indica que negativo.
Introduo Computao 41 / 76

Em seguida dividimos os sete bits restantes em dois grupos, o campo de expoente e o campo da
mantissa, como mostrado na Figura 3.6 [41].

Figura 3.6: Diviso de 1 byte nos campos da Notao de Ponto Flutuante

Seja um byte contendo o padro de bits 01101011. Interpretando este padro no formato que acaba-
mos de definir, constatamos que o bit de sinal 0, o expoente 110, e a mantissa 1011.
Para decodificarmos o byte, extramos primeiro a mantissa e colocamos o ponto binrio sua es-
querda, obtendo:

.1011

Em seguida, extramos o contedo do campo do expoente e o interpretamos como um inteiro codi-


ficado em trs bits pelo mtodo de representao de excesso, nos dando o nmero positivo 2 (vide
Tabela 3.3 [40]). Isto indica que devemos deslocar o ponto binrio dois bits direita (um expoente
negativo codifica um deslocamento para a esquerda do ponto binrio com a adio do valor 0).
Como resultado temos:
10.11

Que representa na Notao de Ponto Fixo:

= 121 + 020 + 12-1 + 12-2


= 2+0+0,5+0,25 = 2,75

Em seguida, notamos que o bit de sinal do nosso exemplo 0, assim, o valor representado positivo
(+2,75).
Introduo Computao 42 / 76

Figura 3.7: Vdeo sobre o Notao de Ponto Flutuante: http://youtu.be/psyH7eBVLr4

Nota
O uso da notao de excesso para representar o expoente no sistema de Ponto Flutuante se
d pela comparao relativa das amplitudes de dois valores, consistindo apenas em empare-
lhar as suas representaes da esquerda para a direita em busca do primeiro bit em que os
dois diferem. Assim, se ambos os bits de sinal forem iguais a 0, o maior dos dois valores
aquele que apresentar, da esquerda para a direita, um 1 no bit em que os padres diferem,
logo ao comparar:

Conclui-se que o primeiro padro maior que o segundo, sem haver a necessidade de decodificar as
representaes em Ponto Flutuante, tarefa que seria mais custosa.
Quando os bits de sinal forem iguais a 1, o maior nmero aquele que apresentar o 0 na diferena
dos padres (sempre percorrendo o nmero da esquerda para a direita).

3.7.3 Problema com Arredondamento

Consideremos o incmodo problema de representar o nmero 2,625 no sistema de ponto flutuante de


um byte. Primeiramente, escrevemos 2,625 em binrio, obtendo 10.101. Entretanto, ao copiarmos
este cdigo no campo da mantissa, no haver espao suficiente, e o ltimo 1 (o qual representa a
ltima parcela: 0,125) se perde, como pode ser observado na figura abaixo:

2,62510 10.1012
Expoente 110
Mantissa 10101

Logo temos:
Introduo Computao 43 / 76

Ao ignorarmos este problema, e continuarmos a preencher o campo do expoente e do bit do sinal,


teremos o padro de bits 01101010, que representa o valor 2,5 e no 2,625: o fenmeno assim ob-
servado denominado erro de arredondamento, devido o campo da mantissa ter apenas quatro bits,
enquanto, por questo de preciso, seriam necessrios no mnimo cinco bits.

3.7.3.1 Overflow e Underflow

Os projetistas do hardware devem encontrar um compromisso entre a mantissa e o expoente dos


nmeros em ponto flutuante. A relao entre mantissa e expoente expressa do seguinte modo: o
aumento do nmero de bits reservados mantissa aumenta a preciso do nmero, enquanto o aumento
do nmero de bits reservados ao expoente aumenta o intervalo de variao dos nmeros representados.
Quando o expoente muito grande ou muito pequeno para ser armazenado no espao reservado para
ele, ocorrem os fenmenos chamados de overflow e underflow respectivamente. Outro fenmeno o
prprio overflow da mantissa como mostrado acima.

3.7.4 Adio e Subtrao em Ponto Flutuante

A adio e a subtrao de ponto flutuante tratam os expoentes junto com o valor dos operandos,
logo h a necessidade de equalizar os expoentes e efetuar a operao sobre a mantissa equalizada e o
resultado deve ser normalizado para a representao utilizada:
Vamos analisar a seguinte adio em Ponto Flutuante:

01101010 + 01011100 = ?

Processo:
Mantissa 1 = 1010 Expoente = 110 (2 na Notao de Excesso)
Mantissa 2 = 1100 Expoente = 101 (1 na Notao de Excesso)

Equalizando os expoentes, temos:


Introduo Computao 44 / 76

Normalizando:
Resultado = 1000
Expoente = 110 (2 na Notao de Excesso)

Representao do resultado (01101010 + 01011100) em Ponto Flutuante = 01101000

3.8 Lgica Binria

George Boole publicou a lgebra booleana (em 1854), sendo um sistema completo que permitia a
construo de modelos matemticos para o processamento computacional. O fascinante na lgica
booleana partir de trs operadores bsicos, que veremos a seguir, e construir Circuitos Lgicos
capazes de realizar as diversas operaes necessrias para um computador.
A seguir a descrio de cada um dos 3 operadores bsicos. A Figura 3.8 [45] representa os valores da
tabela de valores (Tabela Verdade) dos operadores e a representao grfica, sendo tambm chamadas
de portas lgicas.

3.8.1 Operador NOT

O operador unrio NOT, negao binria, resulta no complemento do operando, ou seja, ser um bit
1 se o operando for 0, e ser 0 caso contrrio, conforme podemos confirmar pela tabela de verdade,
onde A o bit de entrada e S a resposta, ou bit de sada.

3.8.2 Operador AND

O operador binrio AND, ou conjuno binria devolve um bit 1 sempre que ambos operandos sejam
1, conforme podemos confirmar pela tabela de verdade, onde A e B so bits de entrada e S o
bit-resposta, ou bit de sada.

3.8.3 Operador OR

O operador binrio OR, ou disjuno binria devolve um bit 1 sempre que pelo menos um dos ope-
randos seja 1, conforme podemos confirmar pela tabela de verdade, onde A e B so os bits de entrada
e S o bit-resposta, ou bit de sada.
Introduo Computao 45 / 76

Figura 3.8: Representao grfica dos operadores lgicos AND, OR e NOT, com seus valores de
entrada e sada.

3.8.4 A soma em um Computador

Neste captulo, aprendemos sobre os sistemas de numerao, dando nfase ao sistema binrio, sendo
este o sistema adotado pelos computadores. Aprendemos como funciona a aritmtica binria, soma,
subtrao, representao negativa dos nmeros, entre outros. Em seguida, foi apresentada a lgica
binria e seus trs comandos bsicos (AND, OR, NOT). Mas como um computador soma de fato?
Primeiramente, precisamos abordar as portas lgicas, elas so a base para as outras operaes. A
construo de uma porta lgica, utiliza conhecimentos de circuitos eletrnicos formados por diodos,
resistncias, capacitores entre outros que so abordados em cursos avanados da Eletrnica Anal-
gica, entretanto, seu entendimento foge ao escopo deste livro.

Dica
Para melhores detalhes sobre portas lgicas visite: http://www.dcmm.puc-rio.br/cursos/-
eletronica/html/sld001.htm.

O importante agora sabermos que existem portas lgicas que seguem a lgica binria j apresentada
e que estas portas podem ser combinadas, formando os Circuitos Digitais. A Figura Figura 3.9 [46]
apresenta um Circuito Digital Somador de Dois Bits.
Introduo Computao 46 / 76

Figura 3.9: Circuito Digital Somador de Dois Bits formado pelas portas lgicas bsicas (AND, OR,
NOT).

Propomos ao leitor, tentar acompanhar passo a passo o circuito digital proposto e entender como
possveis entradas binrias em A e B tero o resultado esperado nas sadas soma e carry. Em seus
testes utilize a Tabela 3.4 [46], e se tiver alguma dvida sobre os valores da tabela, revisem a operao
de soma com dois bits, onde a sada soma representa o valor da soma na unidade corrente e o carry
representa o vai um da operao.

Tabela 3.4: Tabela de valores da operao de Soma de Dois


Bits

A B soma carry (vai um)


0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1
Introduo Computao 47 / 76

Figura 3.10: Vdeo sobre o Circuito Digital Somador de 2 Bits: http://youtu.be/E5yDNF2clQw

3.9 Recapitulando

Neste captulo estudamos a origem dos sistemas de numerao. Aprendemos a trabalhar com os
sistemas de numerao mais utilizados na computao. Aprendemos mais profundamente o funci-
onamento do sistema binrio, sua aritmtica, representao de nmeros negativos, representao de
nmeros fracionrios e a lgica binria proposta por George Boole.
Por fim demos uma introduo sobre como o computador consegue realizar as operaes aritmticas
a partir de porta lgica bsica, demonstrando o poder da matemtica no auxlio dos procedimentos
computacionais.

3.10 Atividades

1. Efetue as seguintes converses:

a. Converta para decimal 1101012 e 10012


b. Converta para octal 1101110111012 e 11111112
c. Converta para hexadecimal 1011001011002
d. Converta para binrio FF1F16 e ABC16

2. Efetue as seguintes converses:

a. Converta para decimal 1101.012 e 10.012 (Ponto Fixo)


b. Converta para octal 1101110111012 e 11111112
c. Converta para hexadecimal 1011001011002
d. Converta para binrio 0xFF1F (Hexadecimal1 )

3. Converta o nmero 5 para uma representao binria usando 4-bits, com as seguintes repre-
sentaes:
1 Em programao costumamos representar nmeros hexadecimais iniciando-o com "0x", portanto 0xFF1F equivale

a FF1F16 .
Introduo Computao 48 / 76

a. Sinal e amplitude
b. Complemento para 1
c. Complemento para 2
d. Notao de Excesso

4. Converta o nmero 33 para uma representao binria usando 6-bits, com as seguintes repre-
sentaes:

a. Sinal e amplitude
b. Complemento para 1
c. Complemento para 2

5. Converta para decimal o valor em binrio (usando apenas 5-bits) 101012 , considerando as se-
guintes representaes:

a. Inteiro sem sinal


b. Sinal e amplitude
c. Complemento de 2

6. Efetue os seguintes clculos usando aritmtica binria de 8-bits em complemento de 2, ou seja,


primeiro converta o valor para binrio e depois efetue a operao aritmtica.

a. 410 + 12010
b. 7010 + 8010
c. 10010 + (6010 )
d. 10010 2710

7. A maioria das pessoas apenas consegue contar at 10 com os seus dedos; contudo, os enge-
nheiros informticos podem fazer melhor! Como? Cada dedo conta como um bit, valendo 1 se
esticado, e 0 se dobrado.

a. Com este mtodo, at quanto possvel contar usando ambas as mos?


b. Considere que um dos dedos na extremidade da mo o bit do sinal numa representao
em complemento para 2. Qual a gama de valores que possvel representar com ambas
as mos?

8. Efetue as operaes Aritmticas no sistema binrio:

a. 1001010102 + 1010101112
b. 1010101102 0101101112
c. 1000000002 0000100112
d. 1111111112 + 1010101012

9. Converta para a representao em Ponto Flutuante, com 12 bits (1: sinal; 4: expoente; 8:
mantissa), os seguintes valores, dados em base 10 (apresente todos os clculos):

a. +12
b. 10.75
c. 8.25
Introduo Computao 49 / 76

Captulo 4

Organizao e Funcionamento do Computa-


dor

O BJETIVOS DO CAPTULO
Ao final deste captulo voc dever ser capaz de:

Descrever a arquitetura geral de um computador


Descrever seus componentes bsicos e suas funes, como por exemplo a UCP, a me-
mria principal, e os dispositivos de E/S
Descrever o ciclo de mquina responsvel pela execuo de programas de computador

Um sistema de computador integrado pelo seu hardware e seu software. O hardware o equipa-
mento propriamente dito, e seus elementos bsicos so: unidade central de processamento, memria
principal e seus dispositivos de entrada e sada.
O software constitudo pelos programas que lhe permitem atender s necessidades dos usurios.
Ele abriga programas fornecidos pelos fabricantes do computador e programas desenvolvidos pelo
usurio.
Neste captulo, iremos identificar como estes dois elementos unidos permitem que atividades pr-
programadas, atravs de uma linguagem, sejam executas de forma automtica pelo computador.

4.1 Arquitetura de um Computador

Os circuitos de um computador que executam operaes sobre dados, tais como adio e subtra-
o, so isolados em uma regio chamada Unidade Central de Processamento UCP (CPU Central
Processing Unit), ou processador.
Os dados que esto armazenados na memria principal do computador so transferidos atravs de
barramentos que interligam estes componentes.
A comunicao com o mundo externo, os usurios, se d pelos dispositivos de Entrada e Sada (E/S).
A comunicao entre o computador e estes dispositivos se d atravs dos controladores de cada dispo-
sitivo de E/S. Em computadores comuns, estes controladores correspondem placas de circuito encai-
xadas na placa principal do computador (placa me). Est ilustrada na Figura 4.1 [50], a arquitetura
bsica de um computador, demonstrando a organizao de seus componentes bsicos.
Introduo Computao 50 / 76

Figura 4.1: Arquitetural geral de um computador

Esta seo apresenta uma descrio sobre cada unidade desta Arquitetura, descrevendo seus compo-
nentes e funes bsicas.

4.1.1 Memria Principal

A memria do computador consiste numa coleo de registradores numerados consecutivamente (en-


dereados), onde cada um possui um tamanho denominado de tamanho da palavra, que pode variar
em 16, 32, 64 e 128 bits, com a palavra de 32 bits sendo a mais comum hoje em dia, e a palavra de
64 bits aumentando de popularidade.
Cada registrador tem um endereo, chamado de localizao na memria, estas so organizadas line-
armente em ordem consecutiva. O nmero nico que identifica cada palavra chamado de endereo.
A memria possui um espao de endereamento representado pelo tamanho em bits do seu endereo,
logo, um espao de endereamento de 32 bits pode acessar qualquer palavra de memria em qualquer
lugar no intervalo de 0 a 232 -1.
O espao de endereamento pode ser dividido em regies distintas usadas pelo sistema operacional,
dispositivos de E/S, programas de usurio e pilha do sistema operacional.
Introduo Computao 51 / 76

Figura 4.2: Mapa de Memria do Computador

As regies ilustradas na Figura 4.2 [51] compem um possvel mapa de memria. Os endereos acima
de 2048 so reservados para uso do sistema operacional. O espao do usurio onde um programa
do usurio ser carregado. A poro do espao de endereamento entre 231 e 232 1 est reservada
para dispositivos de E/S.
importante manter clara a distino entre o que endereo e o que dado. Uma palavra na me-
mria, pode ter distintas representaes dependendo do seu uso. Ela pode armazenar uma instruo
contendo a operao e os operandos (dados de entrada) para a realizao de uma especfica operao,
mas tambm pode armazenar o endereo de uma outra regio de memria. Logo, o endereo um
apontador para uma posio de memria que contm dados, e estes so informaes significativas
para a realizao de alguma atividade no computador, ou a representao de alguma informao.

4.1.2 Unidade Central de Processamento (UCP)

A Unidade Central de Processamento, ilustrada na Figura 4.3 [52], composta por duas partes prin-
cipais: a unidade lgica e aritmtica (ULA), formada por circuitos que manipulam os dados atravs
de operaes binrias (dois operandos) e unrias (um operando). Exemplos incluem a soma e opera-
dores lgicos: and, or e not. E a unidade de controle, cujos circuitos so responsveis por coordenar
as operaes da UCP.
Introduo Computao 52 / 76

Figura 4.3: Componente lgicos da UCP

Para o armazenamento e a comunicao entre estas duas unidades a UCP contm circuitos de arma-
zenamento chamados de registradores, que se assemelham s clulas de armazenamento da memria
principal.
Alguns registradores funcionam como posies intermedirias de armazenamento para os dados ma-
nipulados pela UCP. Nestes registradores so armazenados os dados de entrada para a ULA e ainda
proporcionam um local de armazenamento para o resultado das operaes.
Os dados a serem manipulados pela ULA tem origem na memria principal, sendo de responsabi-
lidade da unidade de controle transferir estes dados aos registradores, informar ULA sobre quais
registradores esto os dados de entrada, ativar o circuito da operao apropriada e informar em que
registrador deve guardar o resultado da operao.
A transferncia desta informao oriunda da memria principal se d atravs do barramento que
responsvel por transmitir padres de bits entre a UCP, os dispositivos de E/S e a memria principal.

Nota
Executar uma simples operao de soma mais complexo que apenas somar estes nme-
ros. Coordenado pela unidade de controle, os registradores intermediam a comunicao da
memria principal e a ULA. Este processo pode ser resumido assim:

PASSOS

1. Obter da memria um dos valores da soma e guardar em um registrador;

2. Obter da memria o outro nmero a ser somado e armazen-lo em outro registrador;

3. Acionar o circuito de adio tendo os registradores do passo 1 e 2 como entrada, e escolher


outro registrador para armazenar o resultado;
Introduo Computao 53 / 76

4. Armazenar o resultado na memria principal;


5. Finalizar operao.

4.1.3 Unidades de Entrada/Sada

Entrada/Sada (E/S) compreende todas as maneiras como o computador se comunica com os usurios
e outras mquinas ou dispositivos. Os dispositivos de entrada aceitam dados e instrues do usurio,
os dispositivos de sada retornam os dados processados.
Os dispositivos de sada mais comuns so a tela de vdeo, conhecida como monitor, e a impressora.
Os dispositivos de entrada mais conhecidos so teclado e mouse. Os sistemas de multimdia possuem
alto-falante como sada e microfone como entrada adicional.
Os dispositivos de E/S trabalham com a memria do computador do seguinte modo: os dados capta-
dos pelos dispositivos de entrada so representados em pulsos eltricos e transmitidos ao computador,
ali estes pulsos so convertidos em dados binrios e armazenados na memria do computador. No
caminho inverso, a informao binria transformada em pulso eltrico e encaminhada para o dispo-
sitivo de sada especialista para trat-lo e gerar uma sada ao usurio.
Um dispositivo especial de E/S de um computador o disco rgido (HD), nele so armazenados todos
os dados que devem persistir num sistema computacional, mesmo na ausncia de energia. Todos os
programas que no esto em execuo se encontram no disco, seu nico problema o tempo excessivo
para a recuperao e escrita de uma informao, havendo assim a necessidade de se trabalhar com a
memria voltil (memria principal), mais rpida, porm mais cara.

4.1.4 O Modelo de Barramento

O objetivo do barramento reduzir o nmero de interconexes entre a UCP e seus subsistemas. Em


lugar de mantermos um caminho de comunicao entre a memria e cada um dos dispositivos de
entrada e sada, a UCP interconectada com os mesmos via barramento de sistema compartilhado.

Figura 4.4: Modelo de Barramento do Computador

Os componentes so interconectados ao barramento da forma ilustrada na Figura 4.4 [53]. A UCP


gera endereos que so colocados no barramento de endereos, e a memria recebe endereos do
mesmo. O caminho inverso desta operao no possvel, como pode ser observado na figura.
Introduo Computao 54 / 76

Durante a execuo de um programa, cada instruo levada at ULA (Unidade Lgica e Aritm-
tica) a partir da memria, uma instruo de cada vez, junto com qualquer dado que seja necessrio
para execut-la. A sada do programa colocada em um dispositivo, tal como display de vdeo ou
disco. A comunicao entre os trs componentes (UCP, memria e E/S) feita sempre pelos barra-
mentos.

4.2 Programando um computador

A grande evoluo na arquitetura dos computadores foi a flexibilidade da unidade de controle quanto
ao tratamento de instrues. Em suas primeiras verses existiam circuitos fsicos montados na uni-
dade de controle que realizavam algumas atividades especficas, e sempre que o usurio quisesse
utilizar outras operaes, era necessrio reprogramar fisicamente a fiao do circuito para que a nova
operao pudesse ser executada.
O leitor deve perceber que esta estratgia tornaria qualquer programao invivel para leigos da rea
de circuitos eletrnicos. Esta seo apresenta o funcionamento atual da UCP para executar os progra-
mas do sistema e de usurios.

4.2.1 Linguagem de Mquina

A unidade de controle moderna projetada para reconhecer instrues codificadas como padres de
bits. Ao conjunto de instrues dado o nome de linguagem de mquina, e cada uma destas instrues
chamada de instruo de mquina.
Algo que pode surpreender o leitor a pequena quantidade necessria para a UCP decodificar, sendo
atravs da combinao destas poucas instrues, bem planejadas, que o computador desenvolve ta-
refas de usos gerais nas mais diversas situaes em nosso cotidiano. E a grandeza da Cincia da
Computao que se tivermos projetado instrues bem planejadas, a adio de outras instrues
mais especficas se torna desnecessria, pois uma combinao das instrues bsicas tem o mesmo
efeito lgico da instruo especfica.
A deciso entre instrues especficas ou instrues de uso geral levou a disputa de duas filosofias
de projetos para as UCPs. A primeira, chamada computador com conjunto mnimo de instrues
(Reduced Instruction Set Computer - RISC), tem em sua defesa o fato de criar mquinas simples
e eficientes. O contraponto a filosofia do computador com conjunto de instrues complexas
(Complex Instruction Set Computer - CISC), que tem como argumento a facilidade de programao,
j que uma nica instruo capaz de realizar vrias tarefas individuais do RISC.
As duas filosofias tem entrada no mercado, sendo o CISC adotado pela famlia Pentium da Intel e o
RISC adotado pela Apple Computer, IBM e Motorola.
Existem trs tipos de instrues: as instrues de transferncia de dados, que realizam cpia de valores
entre registradores da UCP e a memria principal, como por exemplo STORE e LOAD; as instrues
lgicas e aritmticas que ativam os circuitos especficos da ULA para a realizao das operaes,
como por exemplo ADD, SHIFT, OR, AND e etc.; e por fim, as instrues de controle, responsveis
por tratar a sequncia da execuo do programa sem haver manipulao de seus dados, como por
exemplo o JUMP e CALL, usadas para a mudana do fluxo normal de um programa, implementando
assim os desvios condicionais, cdigos de repetio, chamada de funo e retorno.
A codificao de uma instruo composta de duas partes, o campo cdigo da operao e o campo
do operando.
Introduo Computao 55 / 76

Podemos observar no exemplo a seguir, a codificao da operao STORE e seus operandos:

O primeiro dgito hexadecimal, o 11, representa, neste exemplo, a operao STORE (armazena o
contedo de um registrador em memria). O dgito hexadecimal seguinte representa o identificador
do registrador (valor 12) que possui o contedo a ser gravado, e j o par de dgitos hexadecimais
F3 representa o endereo na memria principal onde o contedo do registrador 12 ser guardado.
Podemos traduzir este cdigo da seguinte forma:
Armazene o padro de bits contido no registrador 12 para a clula de memria de endereo F3.

4.2.2 Executando Programas em Linguagem de Mquina

Um programa uma sequncia de instrues em uma linguagem a ser executada com o objetivo de
realizar uma determinada atividade pr-programada.
O programa em linguagem de mquina fica posto na memria principal, sendo de responsabilidade
da unidade de controle, a busca por cada instruo de mquina, sua decodificao e o gerenciamento
da execuo desta instruo com o auxlio da ULA. Aps o trmino de cada instruo o processo se
repete dando continuidade ao ciclo de mquina, este ciclo est ilustrado na Figura 4.5 [56].
Introduo Computao 56 / 76

Figura 4.5: As trs fases do ciclo de mquina

Para o controle deste ciclo a unidade de controle possui dois registradores de propsito especfico: o
contador de instrues e o registrador de instrues. No contador de instrues armazenado o
endereo de memria da prxima instruo a ser executada, assim a unidade de controle fica infor-
mada sobre a posio do programa em execuo. J o registrador de instrues guarda a instruo de
mquina que est em execuo.
Como ilustrado na Figura 4.5 [56], o ciclo de mquina divido em trs fases. Em cada fase a unidade
de controle utiliza seus registradores para auxili-la na execuo das instrues:
Busca
a unidade de controle pede para a memria principal transferir a instruo contida no endereo
de memria indicado pelo contador de instrues e este contedo armazenado no registrador
de instrues. Por fim, o contedo do contador de instrues incrementado, ficando pronto
para a prxima fase de busca;
Decodificao
a unidade de controle separa os campos da instruo contida no registrador de instrues de
acordo com o tipo de operao, identificando os operandos da instruo;
Execuo
os circuitos especficos da ULA so ativados, os dados de entrada carregados e a tarefa indicada
na instruo executada.
Ao final da execuo, a unidade de controle recomear o ciclo, partindo da fase de busca.

4.3 Recapitulando

Neste captulo estudamos a Arquitetura bsica de um computador, identificamos cada um dos seus
componentes, descrevendo suas funcionalidades principais e um resumo de seu funcionamento in-
terno. Descrevemos como estes componentes interagem entre si para o funcionamento do computa-
dor, dentre estes componentes estudamos a Unidade Central de Processamento, a Memria Principal,
os dispositivos de Entrada e Sada e os Barramentos.
Introduo Computao 57 / 76

Por fim, demos uma introduo sobre como o computador consegue executar um programa desenvol-
vido em linguagem de mquina, apresentando, para isso, o conceito de ciclo de mquina.

4.4 Atividades

1. Qual o papel de cada unidade dentro da UCP?

2. Qual a funo dos registradores existentes na UCP?

3. Qual a importncia dos Barramentos na Arquitetura de um computador?

4. Como a unidade de controle gerencia o ciclo de mquina de um computador?

5. Descreva o caminho percorrido entre os componentes de um computador para que uma soma
de dois operandos tenha seu resultado apresentando em um monitor de vdeo.
Introduo Computao 58 / 76

Captulo 5

Algoritmos, Linguagem de Programao, Tra-


dutor e Interpretador

O BJETIVOS DO CAPTULO
Ao final deste captulo voc dever ser capaz de:

Apresentar o conceito de algoritmos;


Apresentar como os algoritmos so formalizados nos computadores atravs de lingua-
gens de programao;
Descrever os softwares bsicos que permitem ao computador entender os algoritmos
descritos nas linguagens de programao.

5.1 Algoritmos

Historiadores trazem divergncias sobre a origem da palavra algoritmo, sendo a mais difundida, de-
vido ao seu sobrenome, a de Mohamed ben Musa Al-Khwarizmi, um matemtico persa do sculo IX,
cujas obras foram traduzidas no ocidente no sculo XII, tendo uma delas recebido o nome Algorithmi
de numero indorum (indiano), acerca dos algoritmos que trabalham sobre o sistema de numerao
decimal.
Independente de sua real etimologia, a ideia principal contida na palavra refere-se descrio sistem-
tica da maneira de se realizar alguma tarefa. Para a Cincia da computao, o conceito de algoritmo
foi formalizado em 1936 por Alan Turing (Mquina de Turing) e Alonzo Church, que formaram as
primeiras fundaes da Cincia da computao. Sendo esta formalizao descrita a seguir:

Um algoritmo um conjunto no ambguo e ordenado de passos executveis que definem


um processo finito.

Em sua definio o algoritmo requer um conjunto de passos ordenados, isto significa que estes pas-
sos devem ser bem definidos e estruturados para uma ordem de execuo. Isto no quer dizer que
estes passos devem ser executados sempre em uma nica sequncia consistindo de um primeiro passo
seguido por um segundo, e assim por diante. Muitos algoritmos, conhecidos como algoritmos pa-
ralelos, contm mais do que uma sequncia de passos, cada um sendo projetado para executar um
processo distinto em mquinas multiprocessadas. Logo, as sequncias dos passos podem intercalar
Introduo Computao 59 / 76

entre si dependendo do ambiente de execuo, entretanto, dentro de uma mesma sequncia sua ordem
de execuo no muda durante o processo.
Seguindo a definio, todo algoritmo deve consistir em passos executveis. Considere a seguinte
instruo

Faa uma lista de todos os nmeros inteiros mpares

Sendo um algoritmo para sua soluo impossvel de ser realizado, pois existe uma infinidade de
nmeros inteiros mpares. Logo, um algoritmo deve ser eficaz, ou seja, que possa ser resolvido.
Podemos criar um algoritmo para solucionar a instruo acima modificando sua descrio

Faa uma lista de todos os nmeros inteiros mpares no intervalo [1; 100]

Por fim, os passos em um algoritmo no podem ser ambguos, isto significa que durante a execu-
o de um algoritmo, o estado atual do processamento deve ser suficiente para determinar nica e
completamente as aes requeridas por cada passo.

5.1.1 Exemplo de um Algoritmo

Guilherme recebe alguns convidados que esto visitando a cidade em sua casa e precisa ensin-los a
chegar igreja para a missa do domingo. O anfitrio muito organizado apresenta o mapa de seu bairro
como visto na Figura 5.1 [60] e prope o seguinte algoritmo para que seus amigos no se percam nas
ruas da cidade.
Algoritmo
Tire o carro da garagem
Pegue a rua esquerda
Siga em frente
Pegue a primeira rua direita
Siga em frente
Pegue a primeira rua esquerda
Siga em frente
Pegue a primeira direita
Siga em frente
Procure a igreja no lado esquerdo
Estacione em frente igreja
Introduo Computao 60 / 76

Figura 5.1: Mapa da cidade de Guilherme

Figura 5.2: Rota para igreja descrita no algoritmo

Neste exemplo, os passos so descritos em sua ordem de execuo de forma concisa e sem dubiedades
em seu entendimento.

Nota
Que tal fazer um algoritmo? Como seria o algoritmo para Guilherme ensinar seus amigos a
chegarem no banco?
Introduo Computao 61 / 76

5.1.2 Programa de Computador

Um programa de computador essencialmente um algoritmo que diz ao computador os passos espe-


cficos e em que ordem eles devem ser executados, como por exemplo, os passos a serem tomados
para calcular as notas que sero impressas nos boletins dos alunos de uma escola.
Quando os procedimentos de um algoritmo envolvem o processamento de dados, a informao lida
de uma fonte de entrada, processada e retornada sob novo valor aps processamento, o que geralmente
realizado com o auxlio de um conjunto de instrues e estrutura de dados.

Figura 5.3: (a) Autmato suo do sculo XIX escrevendo um poema

Figura 5.4: (b) Autmato do filme A Inveno de Hugo Cabret

Algoritmos podem ser implementados em circuitos eltricos ou at mesmo em dispositivos mecnicos


(autmatos, vide Figura 5.3 [61] e Figura 5.4 [61]). Mania dos inventores do sculo XIX, os autma-
tos eram mquinas totalmente mecnicas, construdas com a capacidade de serem programadas para
realizar um conjunto de atividades autnomas. Em 2011, o filme A Inveno de Hugo Cabret (tradu-
o brasileira) do cineasta Martin Scorsese traz a histria do ilusionista Georges Mlis precursor do
cinema e um colecionador de autmatos, sendo uma de suas mquinas o fio condutor desta histria.
O autmato especfico era capaz de desenhar a cena emblemtica do seu filme "Viagem Lua".
Entretanto, a maioria dos algoritmos so desenvolvidos para programas de computador, para isto,
existe uma grande variedade de linguagens de programao, cada uma com caractersticas especficas
que podem facilitar a implementao de determinados algoritmos ou atender a propsitos mais gerais,
definiremos melhor uma linguagem de programao na Seo 5.2 [63].
Introduo Computao 62 / 76

5.1.3 Construindo um algoritmo em sala de aula

Imagine que o leitor queira ensinar o conceito de algoritmo para um grupo de alunos. Uma forma
muito interessante de abordar a construo de um primeiro algoritmo em sala apresentar um jogo
que utilize uma sequncia de passos lgicos para sua resoluo. Pea para os alunos pensarem em
uma soluo e definir comandos em portugus a serem seguidos pelo seu colega ao lado para resolver
o problema atravs de sua soluo proposta. Se o colega obtiver xito na resoluo do jogo, seu
algoritmo ter sido validado.
Propomos a abordagem do conhecido jogo imprensadinho, onde o jogador tem o objetivo de adi-
vinhar um nmero escolhido aleatoriamente pelo seu adversrio dentro de um intervalo de valores
pr-estabelecido. O jogador pergunta por qualquer nmero dentro deste intervalo e o adversrio tem
que responder se o nmero escolhido foi descoberto ou no. O jogador ainda pode perguntar se o
nmero a ser encontrado maior ou menor que o nmero corrente testado. O jogo acaba quando o
jogador descobre o nmero escolhido.

Figura 5.5: Proposta de algoritmo para o imprenssadinho

Nota
Antes de propor esta atividade a seus alunos, que tal tentar elaborar um algoritmo que forma-
lize sua soluo. Descreva testes a serem efetuados e instrues para descrever as decises
a serem tomadas.
Introduo Computao 63 / 76

5.2 Linguagem de Programao

Imagine aplicaes para redes sociais como o Facebook, jogos eletrnicos e decodificadores de v-
deo digital sendo implementados em linguagem de mquina (linguagem binria), seria uma tarefa
impossvel. Para isso, linguagens de programao foram desenvolvidas para permitir que algoritmos
sejam aceitveis para os humanos e facilmente convertidos em instrues de linguagem de mquina.
Podemos definir uma linguagem de programao como um conjunto de palavras (vocabulrio) e de
regras (sintaxe) que permite a formulao de instrues a um computador.

5.2.1 Primeiras geraes

Os cdigos interpretados pelos primeiros computadores consistiam em instrues codificadas como


dgitos numricos. Escrever programas nesta linguagem, alm de ser tedioso, passvel de muitos
erros que devem ser localizados e corrigidos para finalizar o trabalho.
Na dcada de 40, pesquisadores desenvolveram um sistema de notao onde instrues numricas
podem ser representadas por mnemnicos. Por exemplo, a instruo
Mova o contedo do registrador 3 para o registrador 1

expressa numericamente como:


4056

usando uma linguagem de mquina. J em um sistema mnemnico podemos representar esta instru-
o como:
MOV R5, R6

Com o uso do sistema mnemnico, programas chamados montadores (assemblers em ingls) foram
desenvolvidos para converter expresses mnemnicas em linguagem de mquina. Por isso, muitas
vezes as linguagens mnemnicas so conhecidas como linguagem assembly.
Apesar da melhoria acarretada com a adoo do sistema mnemnico, sua programao ainda traz
muitos dissabores aos desenvolvedores. A linguagem uma troca direta de comandos bsicos da
linguagem de mquina, tornando a sua programao totalmente amarrada a arquitetura da mquina
em que o cdigo est sendo desenvolvido (dependncia de plataforma). E a filosofia de desenvolvi-
mento era toda baseada em comandos de mais baixo nvel da mquina. Fazendo uma analogia com a
construo de uma casa, seria necessrio pensar em sua construo a partir de tijolos, canos, cimento,
pedra e etc. Embora toda construo precise trabalhar com estes elementos bsicos, durante o projeto
de uma casa, o arquiteto pensa em termos de salas, varanda, portas e etc.
Com esta filosofia os pesquisadores de computao desenvolveram a terceira gerao de linguagens
de programao, sendo suas primitivas bsicas de alto nvel e independentes de mquina, um diferen-
cial das linguagens anteriores. Estas linguagens so desenvolvidas para usos mais especialisados. Os
exemplos mais conhecidos desta primeira fase das linguagens de alto nvel so o FORTRAN (FOR-
mula TRANslation), que foi desenvolvido para aplicaes cientficas e de engenharia, e o COBOL
(Common Business-Oriented Language) desenvolvido para aplicaes comerciais.
O objetivo das linguagens de alto nvel era descrever operaes sem se preocupar quais instrues de
mquina seriam necessrias para implementar estas operaes. Uma vez identificado este conjunto
de primitivas de alto nvel necessrias para o algoritmo, um programa, conhecido como tradutor,
acionado para converter programas escritos na linguagem de alto nvel, em programas com linguagem
de mquina. Este software entre outros sero melhor detalhados na Seo 5.3 [64].
Introduo Computao 64 / 76

5.2.2 Paradigma de Programao

Um paradigma de programao fornece e determina a viso que o programador possui sobre a estrutu-
rao e execuo do programa. Os paradigmas representam abordagens fundamentalmente diferentes
para a construo de solues para os problemas, portanto afetam todo o processo de desenvolvimento
de software. A seguir sero descritos os paradigmas de programao clssicos:

Paradigma imperativo
Descreve a computao como aes, enunciados ou comandos que mudam o estado (variveis)
de um programa. Muito parecido com o comportamento imperativo das linguagens naturais
que expressam ordens como visto no algoritmo das rotas.

Paradigma declarativo
Descreve propriedades da soluo desejada, no especificando como o algoritmo em si deve
agir. Muito popular em linguagens de marcao, sendo utilizado na programao das pgi-
nas web (linguagem HTML) e descrio de documentos multimdia como a linguagem Nested
Context Language NCL, adota pelo padro brasileiro de TV Digital.

Paradigma funcional
Trata a computao como uma avaliao de funes matemticas. Ela enfatiza a aplicao de
funes, em contraste da programao imperativa, que enfatiza mudanas no estado do pro-
grama. Neste paradigma ao se pensar em uma funo simples de calculo de mdias de notas,
usamos o auxlio de funes mais primitivas, podendo a funo Media (Numeros) ser represen-
tada pela expresso:
(Divide (Soma Numeros) (Conta Numeros) )

logo a funo Divide opera com os resultados das funes Soma e Conta.

Paradigma orientado a objeto


Neste paradigma, diferente do paradigma imperativo, os dados passam a ter um papel principal
na concepo do algoritmo. No paradigma imperativo, rotinas de controle manipulam os dados
que so elementos passivos. J na orientao a objetos, os dados so considerados objetos
auto gerenciveis formados pelos prprios dados e pelas rotinas responsveis pela manipulao
destes dados.

5.3 Tradutor e Interpretador

Ao receber uma bicicleta no natal Carlinhos precisa ler o manual de instrues e seguir passo a
passo as tarefas descritas no documento para poder se divertir com seu presente. Podemos dizer que
Carlinhos um interpretador dos comandos fornecidos pelo manual de instrues. Entretanto seu pai
encontrou uma promoo na internet e comprou um produto fabricado na Frana e o menino ao se
deparar com o manual percebeu que o mesmo no poderia ser interpretado j que no sabia ler em
francs. Para resolver o problema seu pai contratou um tradutor de francs para portugus, assim,
este novo manual pde ser interpretado por Carlinhos e enfim sua bicicleta seria montada.
No computador, o problema de Carlinhos se repete diariamente, havendo a necessidade de softwares
bsicos para traduzir e interpretar os diversos programas dos usurios escritos em diversas linguagens
existentes. Os softwares que convertem um programa de usurio escrito em uma linguagem para outra
Introduo Computao 65 / 76

linguagem so chamados de tradutores. A linguagem na qual o programa original est expresso cha-
mada de linguagem fonte e a linguagem para a qual ela ser convertida conhecida como linguagem
alvo. Tanto a linguagem fonte quanto a linguagem alvo definem nveis de abstrao especficos.
Se existir um processador que possa executar diretamente programas escritos na linguagem fonte, no
h necessidade de se traduzir o programa fonte para uma linguagem alvo.
O mtodo de traduo empregado quando h um processador (seja ele implementado em hardware
ou por interpretao) disponvel para executar programas expressos na linguagem alvo mas no na
linguagem fonte. Se a traduo tiver sido feita corretamente, a execuo do programa traduzido vai
obter exatamente os mesmos resultados que a execuo do programa fonte obteria se houvesse um
processador que o executasse diretamente.
importante observar a diferena entre traduo e interpretao. Na traduo, o programa original,
expresso na linguagem fonte, no executado diretamente. Em vez da execuo direta, esse programa
precisa ser convertido para um programa equivalente, conhecido como programa objeto ou programa
binrio executvel, que ser executado aps o trmino do processo de traduo.
Logo, a traduo envolve dois passos distintos:

Gerao de um programa equivalente na linguagem alvo;

Execuo do programa obtido.

No processo de interpretao existe apenas um nico passo: a execuo do programa original na


linguagem fonte.
Nesta seo iremos analisar a funo dos softwares bsicos: compilador, montador, ligador, carre-
gador e interpretador. Programas necessrios para que os softwares dos usurios implementados em
alguma linguagem de programao especfica possam ser executados em um computador.

5.3.1 Tradutores

Os tradutores podem ser divididos em dois grupos, dependendo da relao existente entre a linguagem
fonte e a linguagem alvo. Quando a linguagem fonte for essencialmente uma representao simblica
para uma linguagem de mquina numrica, o tradutor chamado de montador e a linguagem fonte
chamada de linguagem de montagem. Quando a linguagem fonte for uma linguagem de alto nvel,
como o caso do Pascal ou do C, e a linguagem alvo for uma linguagem de mquina numrica ou
uma representao simblica desta linguagem (linguagem de montagem), o tradutor chamado de
compilador.
Podemos observa na Figura 5.6 [66] todos os passos necessrios para que um algoritmo expresso
em uma linguagem de programao possa ser carregado em memria para ser executado por um
computador. Cada fase possui um conjunto de entradas e sadas de seu processamento. Estas fases e
seus respectivos softwares envolvidos so descritas nas sees seguintes.
Introduo Computao 66 / 76

Figura 5.6: Etapas do processo de compilao.

5.3.2 Processo de Compilao

Diferente do processo de montagem de um programa em linguagem de montagem para um programa


em linguagem de mquina, que bastante simples, pois existe um mapeamento direto de um para um
entre os comandos em linguagem de montagem e os equivalentes em cdigo binrio, o processo de
compilao de linguagens muito mais complexo.

5.3.2.1 Passos da compilao

Considere o comando simples abaixo:


A = B + 4;

O compilador tem que resolver um nmero grande de tarefas na converso deste comando em um ou
mais comandos em linguagem de montagem:

1. Reduzir o texto do programa para smbolos bsicos da linguagem, como identificadores tais
como A e B, demarcaes como o valor constante 4 e delimitadores do programa tais como = e
+. Esta parte da compilao chamada de anlise lxica.

2. Decodificar os smbolos para reconhecer a estrutura do programa. No comando usado acima,


por exemplo, um programa chamado parser deve reconhecer o comando como sendo uma atri-
buio de valores da forma:
<Identificador> = <Expresso>

onde <Expresso> decodificado na forma:


Introduo Computao 67 / 76

<Identificador> + <Constante>

Essa tarefa chamada de anlise sinttica.

3. Anlise de nomes: associar os nomes A e B com variveis do programa, e associ-los tambm


a posies de memria especficas onde essas variveis sero armazenadas durante a execuo.

4. Anlise de tipos: determinar os tipos de todos os dados. No caso anterior, as variveis A e B e


a constante 4 seriam reconhecidas como sendo do tipo int em algumas linguagens. As anlises
de nome e tipo so tambm conhecidas como anlise semntica: determina o significado dos
componentes do programa.

5. Mapeamento de aes e gerao de cdigo: associar comandos do programa com uma sequn-
cia em linguagem de montagem apropriada. No caso anterior, a sequncia em linguagem de
montagem poderia ser:
Comando de atribuio
ld[B], %r0, %r1 // Carrege varivel B em um registrador.
add %r1, 4, %r2 // Calcule o valor da expresso.
st %r2, %r0, [A] // Faa a atribuio na varivel A.

6. Existem passos adicionais que o compilador deve tomar, tais como, alocar variveis a registra-
dores, usar registradores e, quando o programador desejar, otimizar o programa. O otimizador
de cdigo (independente de mquina) um mdulo opcional (presente na grande maioria dos
compiladores) que objetiva melhorar o cdigo intermedirio de modo que o programa objeto
produzido ao fim da compilao seja menor (ocupe menos espao de memria) e/ou mais r-
pido (tenha tempo de execuo menor). A sada do otimizador de cdigo um novo cdigo
intermedirio.

5.3.3 Processo de Montagem

O processo de traduzir um programa em linguagem de montagem para programa em linguagem de


mquina chamado de processo de montagem. Este processo muito simples, uma vez que existe
um mapeamento um para um de comandos em linguagem de montagem para seus correspondentes
em linguagem de mquina. Isto o contrrio da compilao, onde um comando em linguagem de
alto nvel pode ser traduzido em vrios comandos em linguagem de mquina.

5.3.3.1 Por que usar uma Linguagem de Montagem?

Programar em uma linguagem de montagem no fcil. Alm da dificuldade, o desenvolvimento de


um programa na linguagem de montagem consome mais tempo do que seu desenvolvimento em uma
linguagem de alto nvel. A depurao e manuteno dos programas em linguagem de montagem so
mais complicados.
Nessas condies, por que algum escolheria programar em uma linguagem de montagem?
Existem duas razes que justificam esta opo: performance e acesso aos recursos da mquina. Um
expert na linguagem de montagem pode produzir um cdigo menor e muito mais eficiente do que o
gerado por um programador usando linguagem de alto nvel.
Introduo Computao 68 / 76

Em segundo lugar, certos procedimentos precisam ter acesso total ao hardware. Por exemplo, se a
mquina alvo tiver um bit para expressar o overflow de operaes aritmticas, um programa em lin-
guagem de montagem pode testar diretamente este bit, coisa que um programa em Java no pode fazer.
Alm disso, um programa em linguagem de montagem pode executar qualquer uma das instrues do
conjunto de instrues da mquina alvo.

5.3.3.2 Tarefas do montador

Embora a montagem seja um processo simples, tedioso e passvel de erros quando feito manual-
mente. Montadores comerciais tm ao menos as seguintes caractersticas:

Permitem ao programador especificar posio de valores de dados e programas durante a execuo;

Permitem que o programador de incio realize valores de dados na memria antes da execuo do
programa;

Implementam mnemnicos em linguagem de montagem para todas as instrues da mquina e


modos de endereamento, e traduzem comandos em linguagem de montagem vlidos, nos seus
equivalentes em linguagem de mquina;

Permitem o uso de rtulos simblicos para representar endereos e constantes;

Incluem um mecanismo que permite que variveis sejam definidas em um programa em linguagem
de montagem e usadas em outros programas separadamente;

Possibilitam a expanso de macros, ou seja, rotinas (semelhantes s funes em linguagem de alto


nvel) que podem ser definidas uma vez e ento instanciadas quantas vezes necessrio.

5.3.3.3 Montadores de dois passos

A maioria dos montadores leem textos do programa em linguagem de montagem duas vezes, e so
chamados de montadores de dois passos. O primeiro passo serve para determinar o endereo de
todos os itens de dados e instrues de mquina, e selecionar quais instrues devem ser geradas para
cada instruo em linguagem de montagem (mais ainda no ger-las).
Os endereos dos itens de dados e instrues so determinados por meio do uso de um contador de
programa para a montagem, chamado contador de localizao. O contador de localizao gerencia o
endereo da instruo executada e dos itens de dados durante a montagem, que geralmente iniciali-
zada com 0 (zero). No incio do primeiro passo, incrementado de acordo com o tamanho de cada
instruo.
Durante este passo, o montador tambm efetua quaisquer operaes aritmticas em tempo de monta-
gem, e insere as definies de todos os rtulos de funes e variveis e as constantes, em uma tabela
chamada Tabela de Smbolos.
A razo principal para exigir uma segunda passagem permitir que smbolos sejam usados no pro-
grama antes de serem definidos. Aps a primeira passagem, o montador ter identificado todos os
smbolos e os colocado na Tabela de Smbolos, j durante a segunda passagem, gerar cdigo de
mquina, inserindo os identificadores dos smbolos que agora so conhecidos.
Introduo Computao 69 / 76

5.3.4 Ligao e Carregamento

A maioria dos programas composto de mais de um procedimento. Os compiladores e os montadores


geralmente traduzem um procedimento de cada vez, colocando a sada da traduo em disco. Antes
que o programa possa rodar, todos os seus procedimentos precisam ser localizados e ligados uns aos
outros de maneira a formarem um nico cdigo.

5.3.4.1 Ligao

A funo do ligador coletar procedimentos traduzidos separadamente e lig-los uns aos outros para
que eles possam executar como uma unidade chamada programa binrio executvel.
Se o compilador ou o montador lesse um conjunto de procedimentos fonte e produzisse diretamente
um programa em linguagem de mquina pronto para ser executado, bastaria que um nico comando
fonte fosse alterado para que todos os procedimentos fonte tivessem que ser novamente traduzidos.
Usando a tcnica do mdulo objeto separado, o nico procedimento a ser novamente traduzido se-
ria aquele modificado. Havendo a necessidade de realizar apenas a etapa de ligao dos mdulos
separados novamente, sendo esta tarefa mais rpida que a traduo.

5.3.4.2 Carregamento

O carregador um programa que coloca um mdulo de carregamento na memria principal. Concei-


tualmente, a tarefa do carregador no difcil. Ele deve carregar os vrios segmentos de memria com
seus valores corretos e inicializar certos registradores, tais como o apontador para pilha do sistema,
responsvel pelo escopo das rotinas que estaro em execuo e o contador de instrues contido no
processador, com seus valores iniciais, indicando assim onde o programa deve ser iniciado.
Em Sistemas Operacionais modernos, vrios programas esto residentes na memria a todo instante,
e no h como o montador ou o ligador saber em quais endereos os mdulos de um programa iro re-
sidir. O carregador deve relocar estes mdulos durante o carregamento adicionando um deslocamento
a todos os endereos, permitindo desta forma acessar cada mdulo individualmente na memria.
Esse tipo de carregamento chamado de carregamento com relocao. O carregador simplesmente
modifica endereos relocveis dentro de um nico mdulo de carregamento para que vrios programas
passem a residir na memria simultaneamente.

5.4 Interpretadores

O software interpretador um programa de computador que executa instrues escritas em uma lin-
guagem de programao. Por exemplo, as linguagens Basic, Prolog, Python e Java, so frequente-
mente interpretados. Um interpretador geralmente usa uma das seguintes estratgias para a execuo
do programa: executar o cdigo fonte diretamente ou traduzir o cdigo fonte em alguma eficiente
representao intermediria e depois executar este cdigo.
Para isso, certos tipos de tradutores transformam uma linguagem fonte em uma linguagem simpli-
ficada, chamada de cdigo intermedirio, que pode ser diretamente executado por um programa
chamado interpretador. Ns podemos imaginar o cdigo intermedirio como uma linguagem de m-
quina de um computador abstrato projetado para executar o cdigo fonte.
Introduo Computao 70 / 76

Interpretadores so, em geral, menores que compiladores e facilitam a implementao de constru-


es complexas em linguagens de programao. Entretanto, o tempo de execuo de um programa
interpretado geralmente maior que o tempo de execuo deste mesmo programa compilado, pois o
interpretador deve analisar cada declarao no programa a cada vez que executado e depois executar
a ao desejada, enquanto que o cdigo compilado apenas executa a ao dentro de um contexto fixo,
anteriormente determinado pela compilao. Este tempo no processo de anlise conhecido como
"overhead interpretativa".

5.5 Usando os Softwares Bsicos

A ferramenta cc um ambiente completo para a compilao, montagem e ligao dos programas de


usurio desenvolvidos na linguagem C. Nesta prtica iremos identificar cada passo no processo de
transformar um cdigo de alto nvel (Linguagem C) em um arquivo binrio executvel.

Nota
O cc um compilador da GNU utilizado principalmente no sistem operacional Linux ou de
tipo Unix. Para execut-lo voc precisa abrir um terminal e escrever os comandos indicados
nesta prtica. Voc j deve conhec-lo da disciplina Introduo a Programao.

Nota
Lembre-se de os cdigos fontes do livro esto disponveis para download e as intrues de
como baix-los esto em Baixando os cdigos fontes [x].

Passo 1
Escreva em qualquer editor de texto os seguintes textos e salve com o nome sugerido para cada
arquivo:
code/tradutor/teste.h
//Soma nmeros
int soma(int op1, int op2);

//Subtrai numeros
int subtrai(int op1, int op2);

code/tradutor/teste.c
#include "teste.h"

int soma(int op1, int op2)


{
return op1 + op2;
}

int subtrai(int op1, int op2)


{
return op1 - op2;
}
Introduo Computao 71 / 76

code/tradutor/main.c
#include "teste.h"
#include <stdio.h>

int main(){
int a, b;
a = soma(2, 3);
printf("Soma = %d\n", a);
b = subtrai(4, 3);
printf("Subtrao = %d\n", b);
}

Dica
Caso voc tenha baixado o cdigo deste livro, basta entrar na pasta a seguir onde
estes arquivos j existem:
livro/capitulos/code/tradutor

Passo 2
Usar o Compilador do cc. Ele ir processar cada arquivo .c e gerar um arquivo .s com o cdigo
Assembly respectivo.

Linguagem Fonte: Linguagem C


Linguagem Alvo: Assembly

Comando
cc -S main.c teste.c

Passo 3
Usar o montador da aplicao cc. Ele ir processar cada arquivo .s e gerar um arquivo .o com
o cdigo objeto respectivo.

Linguagem Fonte: Assembly


Linguagem Alvo: Cdigo Objeto

Comando
cc -c main.s teste.s
Os passos 2 e 3 geralmente so realizados juntos, para isso basta realizar o seguinte co-
mando: cc -c main.c teste.c . Gerando assim um arquivo com Cdigo Objeto
(.o) para cada arquivo .c, pulando o cdigo assembly (cdigo intermedirio).

Passo 4
Usar o ligador do cc. Ele ir processar todos os arquivos .o e lig-los em um nico arquivo
binrio executvel.

Linguagem Fonte: Cdigo Objeto


Linguagem Alvo: Cdigo Binrio (Executvel)
Introduo Computao 72 / 76

Comando
cc main.o teste.o -o exec

Nota
exec foi o nome dado ao arquivo executvel gerado pelo ligador do cc, logo, o
usurio pode escolher qualquer nome para o mesmo.

Passo 5
Executar o Cdigo Executvel. No linux, para carregar um cdigo executvel e coloc-lo em
execuo basta seguir o seguinte comando:

Comando
./exec

Passo 6
Modificar o cdigo do arquivo teste.c .

E DITAR A IMPLEMENTAO DA FUNO SUBTRAI .


Trocar: return op1 - op2;
Por: return op1 + op2;

Nota
O contedo do arquivo teste.c ficar igual a:
code/tradutor/teste.c
#include "teste.h"

int soma(int op1, int op2)


{
return op1 + op2;
}

int subtrai(int op1, int op2)


{
return op1 + op2;
}

Passo 7
Compilar apenas o arquivo teste.c

Comando
cc -c teste.c

Passo 8
Ligar os cdigos objetos novamente.

Comando
cc main.o teste.o -o exec
Introduo Computao 73 / 76

Passo 9
Executar o novo Cdigo Executvel. Observar a diferena das execues.

Comando
./exec

Importante
Podemos observar a utilidade do software ligador, pois aps o Passo 6 no h necessi-
dade de recompilar todos os cdigos fonte, apenas o arquivo teste.c, gerando assim um
novo arquivo objeto teste.o que ser ligado ao arquivo main.o (arquivo no modificado)
formando o novo cdigo executvel exec.

Dica
Voc pode assistir esta prtica no seguinte vdeo:

Figura 5.7: Prtica de softwares bsicos: http://youtu.be/dVL3XQFNY8o

5.6 Recapitulando

Neste captulo estudamos o conceito de algoritmo e vimos que o mesmo pode ser implementado por
diversos mecanismos mecnicos e eltricos. Um algoritmo descrito em um computador atravs de
uma linguagem de programao. So diversos os nveis de abstrao em cada linguagem, cada uma
com um objetivo distinto. Para que todas estas linguagens possam coexistir no computador foram
criados software bsicos com o objetivo de realizar a execuo do algoritmo descrito atravs destas
linguagens de programao.
Dentre os softwares bsicos estudados vimos os Tradutores e Interpretadores, cada um com seu uso
exclusivo. Os Tradutores ainda podem ser classificados em Compiladores e Montadores, ambos tendo
como objetivo traduzir uma linguagem fonte para uma linguagem alvo cujo Interpretador seja imple-
mentado no computador corrente.

5.7 Atividades

1. Quais os ganhos que as linguagens de programao de alto nvel trazem para os programadores?
Introduo Computao 74 / 76

2. Descreva 3 diferentes paradigmas de programao.

3. Sistemas Operacionais so tipos de software bsico? Quais os tipos de softwares bsicos exis-
tentes?

4. Marque a alternativa correta. Um interpretador, a partir de um programa-fonte:

a. Gera um programa-objeto para posterior execuo


b. Efetua a traduo para uma linguagem de mais alto nvel
c. Interpreta erros de lgica
d. Executa instruo a instruo, sem gerar um programa-objeto
e. No detecta erros de sintaxe

5. Qual a funo de uma linguagem de montagem (linguagem assembly)?

6. Quais as diferenas entre software interpretador e software tradutor?

7. O compilador e o montador so softwares tradutores. Qual a diferena entre eles?


Introduo Computao 75 / 76

Captulo 6

ndice Remissivo

A Imagem, 20
Algoritmos, 58 Interpretadores, 69
anlise lxica, 66
anlise semntica, 67 L
anlise sinttica, 67 ligador, 69
AND, 44 Linguagem de Mquina, 54
Arquitetura, 49 Linguagem de Programao, 63
Arredondamento, 42 M
ASCII, 19 Msica, 21
B Memria Principal, 50
Barramento, 53 Montador, 67
barramento, 52 Multiplicao binria, 37
base binria, 29 N
base decimal, 29 Nmeros, 19
base octal, 29 Negativo, 33
Binrio, 29 NOT, 44
Bit, 17 Notao de Excesso, 39
Byte, 17
O
C Octal, 29, 30
cdigo intermedirio, 67 OR, 44
Calculadora, 6 Overflow, 43
carregador, 69
CISC, 16 P
CISC), 54 Paradigma de Programao, 64
Compilao, 66 Ponto Fixo, 38
Complemento de 1, 33 Ponto Flutuante, 39, 40
Complemento de 2, 33
contador de instrues, 56 R
registrador de instrues, 56
D Representao
Decimal, 29 Imagem, 20
Msica, 21
H Nmeros, 19
Hardware, 49 Texto, 19
Hexadecimal, 29, 30 RISC, 16
I RISC), 54
Introduo Computao 76 / 76

S
Sinal, 33
Sistema binrio, 6
Sistema de Numerao, 24, 28
Software, 49
Soma binria, 34
somador, 45
Subtrao binria, 34

T
Texto, 19
Tradutores, 65

U
Underflow, 43
Unidade Central de Processamento, 51
unidade de controle, 51
Unidade de Entrada, 53
Unidade de Sada, 53
unidade lgica e aritmtica, 51