Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introduo Computao
por Gilberto Farias e Eduardo Santana Medeiros
Ed. v1.0
Introduo Computao ii
COLLABORATORS
TITLE :
Introduo Computao
REVISION HISTORY
Sumrio
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
6 ndice Remissivo 75
Introduo Computao vii
Prefcio
texto
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].
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
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
Tire dvidas e discuta sobre as atividades do livro com outros integrantes do curso
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
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
Referncias a captulos
Prefcio [vii]
Referncias a sees
Como voc deve estudar cada captulo [viii], Caixas de dilogo [viii].
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
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);
}
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.
Voc pode contribuir com a atualizao e correo deste livro. A tabela a seguir resume os mtodos
de contribuies disponveis:
Mtodo de
contribui- Habilidades necessrias Descrio
o
Captulo 1
O BJETIVOS DO CAPTULO
Ao final deste captulo voc dever ser capaz de:
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
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
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
"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
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.
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.
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.
Dica
Voc pode consultar a biografia de Pascal em: http://www.thocp.net/biographies/-
pascal_blaise.html
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.
Um marco na histria foi a inveno de mquinas programveis, que funcionavam de forma diferente
de acordo com uma programao que lhes era fornecida.
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.
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
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.
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.
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
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.
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
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.
Nenhum dos computadores da primeira gerao possuam aplicao comercial, eram utilizados para
fins balsticos, predio climtica, clculos de energia atmica e outros fins cientficos.
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:
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).
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.
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:
VLSI (Very Large Scale Integration - 1.000 transistores): computadores da quarta 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.
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]).
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.
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.
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
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.
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
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.
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.
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.
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.
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
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.
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.
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
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:
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
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.
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.
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
Dica
Agora com voc. Qual seria o valor que cada smbolo babilnico, seguindo os exemplos
da Figura 3.2 [26]?
=?
=?
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:
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
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.
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
0 1
0 1 2 3 4 5 6 7 8 9 A B C D E F
Generalizando, representamos uma quantidade N qualquer, numa dada base b, com um nmero tal
como segue:
Nb = a0 bn + a1 bn-1 + . . . + an b0
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
Nesta seo iremos analisar as regras gerais para converter nmeros entre duas bases quaisquer.
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
Binrio Octal
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
Logo:
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:
Logo:
A8116 = A . 8 . 116
Sabemos que:
Portanto:
A8116 = 1010100000012
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:
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.
Logo temos:
1910 = 100112
Logo temos:
27810 = 11627816
Introduo Computao 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:
complemento de 1
complemento de 2
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
Importante
O problema desta representao que existem 2 padres de bits para o 0, havendo assim
desperdcio de representao:
3.4.3 Complemento de 2
Representao binria
10110 = 011001012 (com 8 bits)
possui processo para converter um nmero de positivo para negativo e de negativo para positivo;
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
Logo:
111001002 = 2810
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.
Por exemplo:
Nota
Soma-se as posies da direita para esquerda, tal como uma soma decimal.
Soluo:
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.
Nota
no esquea, subtrai-se as colunas da direita para a esquerda, tal como uma subtrao
decimal.
Soluo:
Introduo Computao 36 / 76
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.
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.
Nota
O processo idntico multiplicao entre nmeros decimais.
Exemplo:
Efetuar: 1012 x 1102
Soluo:
Introduo Computao 38 / 76
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
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.
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:
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:
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.
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
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:
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.
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.
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].
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, notamos que o bit de sinal do nosso exemplo 0, assim, o valor representado positivo
(+2,75).
Introduo Computao 42 / 76
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).
2,62510 10.1012
Expoente 110
Mantissa 10101
Logo temos:
Introduo Computao 43 / 76
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)
Normalizando:
Resultado = 1000
Expoente = 110 (2 na Notao de Excesso)
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.
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.
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.
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.
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
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. 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. 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
O BJETIVOS DO CAPTULO
Ao final deste captulo voc dever ser capaz de:
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.
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
Esta seo apresenta uma descrio sobre cada unidade desta Arquitetura, descrevendo seus compo-
nentes e funes bsicas.
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.
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
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
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.
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.
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.
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
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.
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
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
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
O BJETIVOS DO CAPTULO
Ao final deste captulo voc dever ser capaz de:
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:
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
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.
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
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
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.
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
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.
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
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.
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:
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
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.
<Identificador> + <Constante>
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.
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.
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 que o programador de incio realize valores de dados na memria antes da execuo do
programa;
Incluem um mecanismo que permite que variveis sejam definidas em um programa em linguagem
de montagem e usadas em outros programas separadamente;
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.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
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
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"
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.
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.
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.
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 .
Nota
O contedo do arquivo teste.c ficar igual a:
code/tradutor/teste.c
#include "teste.h"
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:
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
3. Sistemas Operacionais so tipos de software bsico? Quais os tipos de softwares bsicos exis-
tentes?
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