Professional Documents
Culture Documents
Introduo Computao
por Gilberto Farias e Eduardo Santana Medeiros
Ed. v1.0
Introduo Computao
ii
Introduo Computao
iii
COLLABORATORS
TITLE :
Introduo Computao
ACTION
NAME
DATE
WRITTEN BY
Gilberto Farias e
Eduardo Santana
Medeiros
20 de maio de 2013
SIGNATURE
REVISION HISTORY
NUMBER
DATE
v1.0
Maro 2013
DESCRIPTION
Primeira verso do livro
NAME
Gilberto Farias,
Eduardo Santana
Introduo Computao
iv
Sumrio
1.1
1.1.1
baco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.2
Ossos de Napier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.3
1.1.4
1.1.5
Mquinas Programveis . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.5.1
Tear de Jacquard . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.5.2
A Mquina Diferencial . . . . . . . . . . . . . . . . . . . . . . .
1.1.5.3
A Mquina Analtica . . . . . . . . . . . . . . . . . . . . . . . .
1.1.5.4
A Primeira programadora . . . . . . . . . . . . . . . . . . . . . .
Linha do tempo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.1
1.1.6
1.2
1.3
2
10
1.2.2
12
1.2.3
13
1.2.4
15
1.2.5
16
Recapitulando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
Representao da informao
17
2.1
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
3
Sistemas de numerao
24
3.1
24
3.1.1
25
3.1.2
25
3.1.3
26
3.1.4
27
28
3.2.1
28
29
3.3.1
29
3.3.2
31
3.3.3
32
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
Aritmtica Binria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
3.5.1
34
3.5.2
36
3.5.2.1
37
37
38
3.6.1
38
3.6.1.1
39
39
3.7.1
Notao de Excesso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
3.7.2
40
3.7.2.1
Ponto Flutuante . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
42
3.7.3.1
Overflow e Underflow . . . . . . . . . . . . . . . . . . . . . . . .
43
43
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
Recapitulando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
3.10 Atividades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
3.2
3.3
3.4
3.5
3.5.3
3.6
3.7
3.7.3
3.7.4
3.8
3.9
Introduo Computao
4
49
4.1
Arquitetura de um Computador . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
4.1.1
Memria Principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
4.1.2
51
4.1.3
Unidades de Entrada/Sada . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
4.1.4
O Modelo de Barramento . . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
Programando um computador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
4.2.1
Linguagem de Mquina . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
4.2.2
55
4.3
Recapitulando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
4.4
Atividades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
4.2
58
5.1
Algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
5.1.1
Exemplo de um Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
5.1.2
Programa de Computador . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
5.1.3
62
Linguagem de Programao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63
5.2.1
Primeiras geraes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63
5.2.2
Paradigma de Programao . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
Tradutor e Interpretador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
5.3.1
Tradutores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
5.3.2
Processo de Compilao . . . . . . . . . . . . . . . . . . . . . . . . . . . .
66
5.3.2.1
Passos da compilao . . . . . . . . . . . . . . . . . . . . . . . .
66
Processo de Montagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
5.3.3.1
67
5.3.3.2
Tarefas do montador . . . . . . . . . . . . . . . . . . . . . . . . .
68
5.3.3.3
68
Ligao e Carregamento . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69
5.3.4.1
Ligao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69
5.3.4.2
Carregamento . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69
5.4
Interpretadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69
5.5
70
5.6
Recapitulando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
73
5.7
Atividades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
73
5.2
5.3
5.3.3
5.3.4
vi
ndice Remissivo
75
Introduo Computao
vii
Prefcio
texto
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.
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:
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
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);
}
Introduo Computao
xi
Nota
Independente do mtodo utilizado para acessar os arquivos, os cdigos fontes esto organizados 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.
Habilidades necessrias
Descrio
Inscrio no site do
github
Issue track
Preenchimento de um
formulrio
Submisso
de correo
Realizar fork de
projetos
Atualizar texto do livro
Realizar PullRequest
Introduo Computao
xii
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 computadores
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 podemos 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 saberemos 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 Computador.
Introduo Computao
2 / 76
1.1
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
1.1.2
seguinte
site:
Ossos de Napier
Introduo Computao
4 / 76
http://euou
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.
Introduo Computao
1.1.3
5 / 76
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.
Introduo Computao
6 / 76
Dica
Voc pode consultar a biografia de Pascal em:
pascal_blaise.html
1.1.4
http://www.thocp.net/biographies/-
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 automticas.
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.
Introduo Computao
7 / 76
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.
Introduo Computao
8 / 76
http://youtu.be/-
A Mquina Analtica
Aps a inacabada mquina diferencial, em 1837, Charles Babbage anunciou um projeto para construo 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 abstratas, sejam elas instrues ou nmeros, e que poderiam ser referenciados posteriormente, adontando
para sua mquina o conceito de memria.
Introduo Computao
1.1.5.4
9 / 76
A Primeira programadora
A condessa de Lovelace, Ada Byron, se interessou pela mquina analtica de Babbage e se comunicava 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.
1.1.6
Linha do tempo
1.2
1.2.1
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
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 mquina 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 alemes, 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 poderia 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, ligando 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 artificial 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 computador. 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:
Introduo Computao
12 / 76
1.2.2
A segunda gerao de computadores foi marcada pela substituio da vlvula pelo transistor. O transistor 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, consumiam 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 consideravelmente. Outro desenvolvimento importante foi a mudana da linguagem de mquina para a
linguagem assembly, tambm conhecida como linguagem simblica. A linguagem assembly possibilita a utilizao de mnemnicos para representar as instrues de mquina.
1.2.3
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.
Introduo Computao
15 / 76
A IBM, que at ento liderava o mercado de computadores, passou a perder espao quando concorrentes 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]).
x = y*7 + 2
Mesmo cdigo em baixo nvel (assembly):
load y
mul 7
add 2
store x
//
//
//
//
carrega valor de y
multiplica valor carregado por 7
adiciona 2
salva o valor do ltimo resultado em x
1.2.4
Introduo Computao
16 / 76
1.2.5
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.
1.3
Recapitulando
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 informao
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
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 aplicados 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
2.2
18 / 76
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
0
1
Porta
Fechada
Aberta
Lmpada
Desligada
Ligada
Sexo
Masculino
Feminino
Detector de movimento
Sem movimento
Com movimente
Estado civil
Solteiro
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
00
01
10
11
Lmpada
Desligada
Ligada com intensidade
baixa
Ligada com intensidade
alta
No utilizado
Estado civil
Solteiro
Casado
Divorciado
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
25 = 32
22 = 4
26 = 64
23 = 8
27 = 128
16 bits = 65.535
32 bits = 4.294.967.295
24 = 16
28 = 256 possibilidades (um
byte)
64 bits =
18.446.744.073.709.551.615
As tabelas so bastante utilizadas para representar informaes. Em uma coluna colocamos o que desejamos 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 diferentes 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
0
1
2
3
4
5
6
7
Byte
Num
Byte
Num
Byte
Num
Byte
Num
Byte
00000000
8
00001000 16 00010000 24 00011000 248 11111000
00000001
9
00001001 17 00010001 25 00011001 249 11111001
00000010 10 00001010 18 00010010 26 00011010 250 11111010
00000011 11 00001011 19 00010011 27 00011011 251 11111011
00000100 12 00001100 20 00010100 28 00011100 252 11111100
00000101 13 00001101 21 00010101 29 00011101 253 11111101
00000110 14 00001110 22 00010110 30 00011110 254 11111110
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 hexadecimal.
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
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.
Introduo Computao
22 / 76
Nota
Os toques dos antigos celulares monofnicos utilizavam este sistema para reproduzir as msicas, 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-computacaolivro/raw/master/arquivos/midias/marcha_soldado.mid
Voc deve est pensando, "Mas as msicas MP3 que escuto tambm tem voz, como ela representada?". 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.
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
2.4
23 / 76
Atividades
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 computador
Um numeral um smbolo ou grupo de smbolos que representa um nmero em um determinado 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 computadores, 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 operaes comuns do dia a dia.
3.1
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
3.1.1
25 / 76
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.
3.1.2
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
3.1.3
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
3.1.4
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 numerao, 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.
3.2
http://www.programandoomundo.com/Sistema%20Indo-Arabico.htm.
O mtodo de numerao de quantidades ao qual estamos acostumados, utiliza um sistema de numerao 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
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
Nesta seo iremos analisar as regras gerais para converter nmeros entre duas bases quaisquer.
3.3.1
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
Octal
0
1
2
3
4
5
6
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
0000
0001
0010
0011
0100
0101
Hexadecimal
0
1
2
3
4
5
Binrio
1000
1001
1010
1011
1100
1101
Hexadecimal
8
9
A
B
C
D
Introduo Computao
31 / 76
Hexadecimal
6
7
Binrio
1110
1111
Hexadecimal
E
F
Logo:
01102 = 616
10102 = A16
11012 = D16
110101011012 = 6AD16
816 = 10002
116 = 00012
Portanto:
A8116 = 1010100000012
3.3.2
Introduo Computao
3.3.3
32 / 76
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
3.4
33 / 76
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
3.4.3
Complemento de 2
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 estudar agora a aritmtica do sistema binrio, a mesma usada pela ULA (Unidade Lgica e Aritmtica)
dos processadores.
3.5.1
+
+
+
+
+
0
1
0
1
1
=
=
=
=
+
0
1
1
0 (e vai um para o dgito de ordem superior)
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:
0
1
0
1
=
=
=
=
0
1 (vem um do prximo)
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.
Soluo:
Introduo Computao
36 / 76
3.5.2
Na eletrnica digital de dispositivos tais como computadores, circuitos simples custam menos e operam 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 nmeros 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 microprocessador 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
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
x
x
x
x
0
1
0
1
=
=
=
=
0
0
0
1
Nota
O processo idntico multiplicao entre nmeros decimais.
Exemplo:
Efetuar: 1012 x 1102
Soluo:
Introduo Computao
38 / 76
3.6
3.6.1
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
3.6.1.1
39 / 76
Para somarmos e subtrairmos duas representaes binrias contendo ponto, basta alinharmos os pontos e aplicarmos o mesmo algoritmo de adio ou subtrao binria demonstrada anteriormente.
Exemplos:
3.7
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 empregado, 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
Valor Representado
-4
-3
-2
-1
0
1
2
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 comprimento.
Exemplo:
O valor 1 equivale a 1012
Nota
No sistema de Notao de Excesso fcil distinguir entre padres que representam valores 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
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].
Introduo Computao
42 / 76
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
Introduo Computao
43 / 76
Overflow e Underflow
3.7.4
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
Mantissa 2 = 1100
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 operandos 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 Analgica, 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
0
0
1
1
B
0
1
0
1
soma
0
1
1
0
Introduo Computao
47 / 76
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 funcionamento 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
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 representaes:
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 seguintes 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 engenheiros 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 Computador
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 memria 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 equipamento 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 prprogramadas, 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 subtrao, 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 dispositivo de E/S. Em computadores comuns, estes controladores correspondem placas de circuito encaixadas 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
4.1.1
Memria Principal
A memria do computador consiste numa coleo de registradores numerados consecutivamente (endereados), 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 linearmente 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
4.1.2
A Unidade Central de Processamento, ilustrada na Figura 4.3 [52], composta por duas partes principais: 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 operadores lgicos: and, or e not. E a unidade de controle, cujos circuitos so responsveis por coordenar
as operaes da UCP.
Introduo Computao
52 / 76
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.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 captados 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 dispositivo 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
Introduo Computao
54 / 76
Durante a execuo de um programa, cada instruo levada at ULA (Unidade Lgica e Aritmtica) 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 barramentos.
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 unidade 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 programas 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 tarefas 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
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
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
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 interno. Descrevemos como estes componentes interagem entre si para o funcionamento do computador, 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 desenvolvido em linguagem de mquina, apresentando, para isso, o conceito de ciclo de mquina.
4.4
Atividades
Introduo Computao
58 / 76
Captulo 5
Algoritmos, Linguagem de Programao, Tradutor 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 linguagens 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, devido 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 sistemtica 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 passos 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 paralelos, 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 execuo 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
Introduo Computao
5.1.2
61 / 76
Programa de Computador
Um programa de computador essencialmente um algoritmo que diz ao computador os passos especficos 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.
Introduo Computao
5.1.3
62 / 76
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 adivinhar 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.
Introduo Computao
5.2
63 / 76
Linguagem de Programao
Imagine aplicaes para redes sociais como o Facebook, jogos eletrnicos e decodificadores de vdeo 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
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 desenvolvimento 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 diferencial 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 (FORmula 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
5.2.2
64 / 76
Paradigma de Programao
Um paradigma de programao fornece e determina a viso que o programador possui sobre a estruturao 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 pginas 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 programa. 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 representada 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 chamada 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, carregador 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
5.3.2
Processo de Compilao
Passos da compilao
Introduo Computao
67 / 76
<Identificador> + <Constante>
6. Existem passos adicionais que o compilador deve tomar, tais como, alocar variveis a registradores, 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 rpido (tenha tempo de execuo menor). A sada do otimizador de cdigo um novo cdigo
intermedirio.
5.3.3
Processo de Montagem
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 linguagem 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 manualmente. 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
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 inicializada 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 montagem, 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 programa 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
5.3.4
69 / 76
Ligao e Carregamento
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 seria 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. Conceitualmente, 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 residir. 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 linguagem de programao. Por exemplo, as linguagens Basic, Prolog, Python e Java, so frequentemente 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 simplificada, chamada de cdigo intermedirio, que pode ser diretamente executado por um programa
chamado interpretador. Ns podemos imaginar o cdigo intermedirio como uma linguagem de mquina 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 construes 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
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 comando: 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 necessidade 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:
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 implementado 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
Introduo Computao
75 / 76
Captulo 6
ndice Remissivo
A
Algoritmos, 58
anlise lxica, 66
anlise semntica, 67
anlise sinttica, 67
AND, 44
Arquitetura, 49
Arredondamento, 42
ASCII, 19
B
Barramento, 53
barramento, 52
base binria, 29
base decimal, 29
base octal, 29
Binrio, 29
Bit, 17
Byte, 17
C
cdigo intermedirio, 67
Calculadora, 6
carregador, 69
CISC, 16
CISC), 54
Compilao, 66
Complemento de 1, 33
Complemento de 2, 33
contador de instrues, 56
D
Decimal, 29
H
Hardware, 49
Hexadecimal, 29, 30
I
Imagem, 20
Interpretadores, 69
L
ligador, 69
Linguagem de Mquina, 54
Linguagem de Programao, 63
M
Msica, 21
Memria Principal, 50
Montador, 67
Multiplicao binria, 37
N
Nmeros, 19
Negativo, 33
NOT, 44
Notao de Excesso, 39
O
Octal, 29, 30
OR, 44
Overflow, 43
P
Paradigma de Programao, 64
Ponto Fixo, 38
Ponto Flutuante, 39, 40
R
registrador de instrues, 56
Representao
Imagem, 20
Msica, 21
Nmeros, 19
Texto, 19
RISC, 16
RISC), 54
Introduo Computao
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
76 / 76