Você está na página 1de 226

Machine Translated by Google

Machine Translated by Google


Machine Translated by Google

MAS COMO SABER?

Os princípios básicos dos computadores para todos

Por

J.Clark Scott
Machine Translated by Google

Copyright © 2009 por John Clark Scott

Projeto de computador incorporado aqui


Copyright © 2009 por John Clark Scott

Todos os direitos reservados

Publicado por John C. Scott, Oldsmar, FL 34677

ISBN 978-0-615-30376-5

buthowdoitknow.com

Arte da capa, fotografia e design de Alexander C. Scott III artbyalexscott.com

Impresso nos Estados Unidos da América

Primeira edição: julho de 2009

10 9 8 7 6 5 4 3 2 1
Machine Translated by Google

INTRODUÇÃO

O título deste livro é o desfecho de uma velha piada que diz assim:

Joe é um sujeito muito legal, mas sempre foi um pouco lento. Ele entra em uma loja onde
um vendedor está em um palanque na frente de um grupo de pessoas. O vendedor
está lançando a nova invenção milagrosa, a garrafa térmica. Ele está dizendo: “Ele
mantém a comida quente quente e a comida fria fria...” Joe pensa sobre isso por um
minuto, impressionado com esta nova invenção que é capaz de tomar uma decisão
sobre qual das duas coisas diferentes ela deve fazer. dependendo do tipo de comida
que você coloca nele. Ele não consegue conter a curiosidade, fica pulando, balançando o
braço no ar, dizendo "mas, mas, mas, mas..." Finalmente ele deixa escapar sua pergunta
candente "Mas como é que ele sabe?"

Você pode ou não ter rido da piada, mas a questão é que Joe olhou para o que essa
garrafa térmica poderia fazer e decidiu que ela deveria ser capaz de sentir algo em seu
conteúdo e então realizar uma operação de aquecimento ou resfriamento de acordo.
Ele pensou que deveria conter um aquecedor e uma geladeira. Ele não tinha ideia do
princípio muito mais simples sobre o qual ela realmente funciona, que é o de que o calor
sempre tenta se mover de uma área mais quente para uma área mais fria, e tudo o que a
garrafa térmica faz é desacelerar esse movimento. Com conteúdos frios, o calor exterior é
retardado na sua entrada, e com conteúdos quentes, o calor é retardado na sua saída. A
garrafa não precisa “saber” para cumprir sua missão e não aquece nem esfria nada.

E eventualmente, o conteúdo, quente ou frio, acaba à temperatura ambiente.


Mas o conceito de Joe sobre como a garrafa funcionava era muito mais complicado do que
a verdade.

Então a razão para o título do livro é que quando se trata de computadores, as pessoas
olham para eles, veem o que podem fazer e imaginam todo tipo de coisas que devem estar
nessas máquinas. Ou imaginam todos os tipos de princípios nos quais devem se basear e,
portanto, do que podem ser capazes. As pessoas podem atribuir qualidades humanas à
máquina. E muitos se encontram em situações em que sentem que estão se
envergonhando, como nosso amigo da piada, Joe.

Mas os computadores são realmente muito fáceis de entender. É claro que os


computadores têm um número maior de peças do que uma garrafa térmica, mas cada peça é
Machine Translated by Google

extremamente simples e todos funcionam com base em um princípio muito


simples e fácil de entender.

Com a garrafa térmica, o princípio é o do movimento do calor. Isso é algo que


podemos observar na vida. Vemos cubos de gelo derretendo ao serem retirados do
freezer e vemos a refeição quente esfriando na mesa quando a família se atrasa para
o jantar.

No computador, o princípio de funcionamento tem a ver com a eletricidade, mas isso


não significa que seja difícil de entender. Se você observou o fato de que quando
você liga um interruptor de luz, uma lâmpada acende, e quando você desliga o
interruptor, a luz apaga, então você observou o princípio segundo o qual os
computadores funcionam. Isso é tudo que você precisa saber sobre eletricidade
para entender os computadores.
Machine Translated by Google

APENAS OS FATOS , SENHORA

Este livro não tem como objetivo principal ser um livro didático. Não há problemas
para resolver no final de cada capítulo. Sua intenção é simplesmente
desmistificar o assunto computadores para quem já se perguntou o que se passa
dentro daquela caixa. Claro, também é uma introdução perfeita aos
computadores para um jovem que acabará por obter um doutorado em Ciência
da Computação. Mas deve ser facilmente compreensível para donas de casa,
idosos e crianças que saibam ler bem. Deve ser compreensível para encanadores e
varredores de rua. Não requer formação técnica prévia. Requer apenas
que você saiba ler o idioma, ligar e desligar uma lâmpada e fazer adições muito
simples da ordem de 8 + 5 = 13.

Este livro apresenta todos os fundamentos que compõem um computador.


Apresenta cada peça e parte, na ordem adequada para que cada uma faça sentido e
possa ser compreendida. Cada parte é explicada completamente e cada palavra
nova é definida minuciosamente quando é usada pela primeira vez. Qualquer tentativa
de simplificar ainda mais o assunto deixaria lacunas no quadro geral onde alguém
ainda teria que adivinhar como as partes funcionam juntas, e você simplesmente
nunca teria aquele "Aha, entendi!" momento que acho que você terá em breve.

Este livro não é uma versão “emburrecida” de algum livro universitário. É uma
explicação completa dos princípios básicos dos computadores. É um livro técnico,
mas também um livro de receitas e um manual de educação para motoristas.
Este livro começa do início e define todos os itens necessários para
entender a máquina. Não importa o que alguém já saiba sobre computadores,
isso irá preencher todas as peças que faltam e reuni-las em algo que faça sentido.

Até mesmo nosso amigo Joe conseguiu entender este livro com um estudo diligente.
Existem milhares de palavras e ideias associadas ao campo da informática que fazem
todo o assunto parecer uma bagunça. Mas os conceitos básicos subjacentes a eles
são simples.
Neste livro não haverá volumes de curiosidades sobre a construção ou a história
dos computadores, apenas o essencial, nem mais nem menos. Cada parte do
computador tem uma função simples e, quando conectadas entre si, você obtém
uma máquina útil chamada computador.
Machine Translated by Google

Não há nada para memorizar neste livro. Cada capítulo foi elaborado para lhe dar
uma ideia nova que você não tinha antes ou, se for algo que você já ouviu falar,
sempre pareceu confuso. Cada ideia é muito simples e uma coisa leva à outra.
Cada capítulo apresenta uma ideia. Cada ideia é simples e fácil de entender. Os
capítulos posteriores apresentam ideias que se baseiam nas ideias dos capítulos
anteriores.

Se alguém escrevesse um livro sobre como construir uma casa, haveria vários níveis
de detalhe. O livro mais simples diria: "estabelecer uma fundação, colocar as paredes,
cobrir com um telhado, instalar encanamento e eletricidade e pronto". Isso não
seria detalhe suficiente para alguém que ainda não tinha alguma experiência no
uso de martelo e serra, na instalação de uma torneira e na fiação de um interruptor
de luz.

No outro extremo do espectro estaria um livro com capítulos separados para cada
tipo possível de fundação, os diferentes tipos de sujeira que você pode precisar
cavar, fórmulas para uma dúzia de tipos diferentes de concreto, gráficos de
condições climáticas ideais para lançar fundações, etc. Isso seria informação
demais. Seriam tantos detalhes que o que era realmente importante se perderia.

Este livro tenta fornecer detalhes suficientes para ver o que cada computador tem
em comum e como funcionam, e não como construir o maior ou melhor
computador já feito. Não se trata de nenhuma marca específica de computador. Não
se trata de como usar um computador. Se fosse um livro sobre a construção de
uma casa, provavelmente descreveria um plano simples para um barracão de jardim
robusto com uma pia e uma lâmpada, mostrando o tamanho e a forma de cada
pedaço de madeira, onde colocar todos os pregos, como como pendurar a porta
e como montar os canos de água para que não vazassem. Não mostraria
como construir algo tão complicado quanto uma elegante escadaria curva de carvalho.

Mostraremos a única parte simples da qual os computadores são feitos e, em


seguida, conectaremos várias delas até construirmos um computador
completo. Vai ser muito mais simples do que você jamais imaginou.
Machine Translated by Google

VELOCIDADE

Os computadores parecem misteriosos e mágicos. Como eles podem fazer o que fazem?
Eles jogam, fazem desenhos, “conhecem” sua classificação de crédito. Essas máquinas
são capazes de fazer todo tipo de coisas estranhas e maravilhosas. No entanto, eles são
simples. Eles podem fazer apenas algumas coisas muito simples. E eles só podem fazer
uma dessas coisas simples por vez. Eles parecem estar fazendo coisas complexas
apenas porque fazem um grande número de coisas simples, uma após a outra, em um
curto espaço de tempo. O resultado, como num videogame, é muito complexo na
aparência, mas na realidade é muito simples, apenas muito, muito rápido.

Os computadores são projetados para fazer um pequeno número de coisas simples e


específicas, e para fazer essas coisas rapidamente, uma após a outra. Quais coisas
simples são feitas e em que ordem determinam que tipo de tarefa o computador
realiza em um determinado momento, mas tudo o que o computador faz consiste em nada
fora de suas capacidades limitadas.

Depois de ver do que é feito um computador, você perceberá como eles podem fazer o
que fazem, exatamente de que tipo de coisas são capazes e também do que não são
capazes.

Portanto, o segredo dos computadores não é que sejam complexos, mas sim a sua
velocidade. Vejamos exatamente quão rápida é sua velocidade.

Como os computadores funcionam com eletricidade, sua velocidade está relacionada à


velocidade da eletricidade. Você deve se lembrar de ter ouvido que a velocidade da luz
é de 300.000 quilômetros por segundo. Isso é muito rápido. A luz pode dar a volta à
Terra sete vezes num segundo, ou da Terra à Lua em cerca de um segundo e meio.
Segundo os físicos, a eletricidade tem muitas propriedades em comum com a luz, e
sua velocidade, ao viajar em um fio, diminui para cerca de metade da velocidade da
luz. Mesmo assim, dar uma volta completa ao redor da Terra três vezes e meia em um
segundo é extremamente rápido.

Como ponto de comparação, imagine que é um dia quente e você tem um ventilador
elétrico sobre a mesa soprando ar fresco sobre você. O ventilador gira tão rápido que as
pás ficam borradas, mas gira apenas cerca de 40 vezes por segundo. Um ponto na
borda de uma dessas lâminas só
Machine Translated by Google

viajar cerca de 150 pés naquele segundo, levará 35 segundos para esse ponto viajar apenas uma
milha.

Como as pás do ventilador já estão borradas, pode ser difícil imaginá-las indo apenas dez
vezes mais rápido. Se assim fosse, aquele ventilador estaria emitindo uma grande brisa. E se
você pudesse fazê-lo funcionar cem vezes mais rápido, ele quase certamente se autodestruiria, com
as pás do ventilador quebrando e ficando presas no teto. Mas a eletricidade viajando no mesmo
círculo daria cerca de cem milhões de voltas em um segundo, o que é dois milhões e meio de vezes
mais rápido que as pás do ventilador. É rápido.

Um milhão é um número muito grande. Se você pegasse uma grande folha de papel com 40
polegadas quadradas e pegasse uma régua e a colocasse na borda superior, e desenhasse 25 pontos
por polegada ao longo da borda superior do papel, você teria que desenhar mil pontos para
atravessar aquela folha de papel. Se você movesse a régua para baixo na página 1/25 de polegada
º
e desenhasse outros mil pontos, e continuasse fazendo isso, teria que mover a régua para baixo na
página mil vezes, cada vez desenhando mil pontos. Se você pudesse completar uma tarefa tão
chata, acabaria com um pedaço de papel com um milhão de pontos. São muitos pontos ou muita
coisa. E só para terminar o pensamento, se você pudesse encontrar mil pessoas que desenhassem,
cada uma, um desses milhões de folhas de pontos e empilhasse essas mil folhas em uma pilha,
você teria então um bilhão de pontos.

Agora, digamos que a eletricidade que se move dentro do computador possa realizar alguma
tarefa simples viajando com um pé. Isso significa que o computador poderia fazer 500 milhões
de coisas simples em um segundo. Novamente para comparação, o ventilador sobre a mesa
girará por 7 horas para girar apenas um milhão de vezes e levará seis meses completos para girar
cerca de 500 milhões de vezes.

Quando você fala sobre a velocidade com que a eletricidade pode se mover entre as partes
dentro do computador, algumas das partes que você pode ver estão a trinta centímetros de distância,
outras estão mais próximas, uma polegada, um décimo de polegada. E dentro dessas peças há
uma infinidade de outras peças que estão muito próximas umas das outras, algumas com apenas
milésimos de polegada de distância. E quanto menor a distância que a eletricidade tem que
percorrer, mais cedo ela chega lá.

Não faz sentido dizer quantas coisas os computadores de hoje fazem em um único segundo,
porque isso dataria este livro. Fabricantes de computadores
Machine Translated by Google

continuar a produzir novos computadores que funcionam duas vezes mais rápido
que os computadores mais rápidos de apenas dois ou três anos atrás. Há um limite
teórico para o quão rápido eles podem ir, mas os engenheiros continuam encontrando
maneiras práticas de contornar as teorias e fazer máquinas cada vez mais rápidas.

Durante todo esse tempo em que os computadores foram ficando mais rápidos, menores e
mais baratos, as coisas que os computadores fazem realmente não mudaram desde que
foram inventados na década de 1940. Eles ainda fazem as mesmas coisas simples,
apenas mais rápidas, mais baratas, mais confiáveis e em um pacote menor.

Existem apenas algumas seções em um computador e todas são feitas dos mesmos
tipos de peças. Cada seção tem uma missão específica, e a combinação dessas
peças em uma máquina foi uma invenção verdadeiramente maravilhosa.
Mas não é difícil de entender.
Machine Translated by Google

LINGUAGEM

Neste livro, precisaremos definir algumas palavras usadas para descrever as peças
dentro de um computador.

Em algumas profissões, nomeadamente a Médica e a Jurídica, há uma tendência para


inventar muitas palavras novas, e retirá-las das antigas línguas grega e latina, e torná-las
longas e difíceis de pronunciar.

No mundo dos computadores, parece que os inventores pioneiros eram pessoas menos
formais. A maioria das palavras que usaram são palavras simples da linguagem cotidiana,
palavras que já existiam, mas são usadas de uma nova maneira.

Algumas das novas palavras são palavras que já conhecemos, usadas como uma classe
gramatical diferente, como um substantivo existente agora usado como verbo. Algumas
das palavras são siglas, as primeiras letras das palavras de uma frase.

Cada palavra será descrita detalhadamente quando for usada pela primeira vez. E embora
existam milhares de palavras e siglas em uso se considerarmos toda a indústria de
computadores, há apenas cerca de uma dúzia ou duas palavras necessárias para
compreender o próprio computador. Você provavelmente já ouviu algumas dessas
palavras antes e descobriu o que elas significavam pela forma como foram usadas, mas
agora obterá as definições completas e adequadas. Em muitos casos, você pode descobrir
que eles são mais simples do que você pensava.
Machine Translated by Google

SÓ UM POUCO

O que há em um computador? Ele mostra imagens estáticas, imagens em movimento,


música, seu talão de cheques, cartas que você escreveu, joga videogame,
se comunica com todo o mundo e muito mais. Mas existem fotos dentro do
computador? Se você pegasse um microscópio e soubesse onde procurar, conseguiria
encontrar pequenas imagens em algum lugar dentro do computador?
Você veria "A" e "B" e "8" e "12" se movendo por aí em algum lugar?

A resposta é não, não existem imagens, números ou letras num computador.


Existe apenas um tipo de coisa em um computador. Há um grande número desse tipo
de coisa, mas só existe um tipo de coisa aí. É chamado de um pouco.

Quando você joga uma moeda para cima e a deixa cair no chão, ela acabará no chão
em um dos dois estados possíveis - com a cabeça aparecendo ou com a cauda.

A luz da sua sala (supondo que você tenha um interruptor e não um dimmer)
pode estar ligada ou desligada.

A fechadura da porta da frente pode ser trancada ou destrancada.

o que todas essas coisas tem em comum? Todos são lugares que contêm algo
que pode estar em um dos dois estados possíveis. Esta é a definição de um
pouco.

Um bit é algum tipo de objeto físico que tem um tamanho e uma localização no
espaço, e tem alguma qualidade sobre si mesmo, que a qualquer momento pode estar
em um de dois estados possíveis, e talvez ser levado a mudar entre esses dois
estados.

Um pedaço de barro não é nada. Pode ser moldado em uma bola, um cubo, uma
panqueca, um anel, um tronco, um rosto ou qualquer outra coisa que você possa
imaginar. Ele tem um tamanho e uma localização no espaço, mas há muitos estados
em que pode estar para ser chamado de bit. Se você pegar aquele pedaço de argila,
alisá-lo, riscar "sim" de um lado e "não" do outro lado, e depois colocá-lo em um
forno e queimar até ficar duro, então você pode estar capaz de chamar isso um pouco. Poderia sentar
Machine Translated by Google

em uma mesa com o "sim" ou o "não" aparecendo. Então só teria


dois estados.

Você provavelmente já ouviu falar de bits em relação a computadores e agora sabe o que
são. Num computador, os bits não são como uma moeda ou uma fechadura, são mais
parecidos com a luz. Ou seja, os bits de um computador são locais que possuem eletricidade
ou não. Num computador, os bits são muito, muito pequenos e há um número muito grande
de bits, mas isso é tudo o que existe.

Assim como a luz da sala, a broca está acesa ou apagada. Na sala, há eletricidade na
parede entrando no interruptor. Quando você liga o interruptor, a eletricidade passa do
interruptor, através dos fios na parede e no teto, até a tomada de luz e depois para a lâmpada.
Então essa parte da sala tem vários metros de comprimento, inclui o interruptor, os fios, a
tomada e a lâmpada. Em um computador, os bits são em sua maioria minúsculos, na verdade
microscópicos. Além disso, o bit do computador não possui um interruptor mecânico
em uma extremidade ou uma lâmpada na outra. Se você removesse a lâmpada da tomada da
sala, o interruptor ainda enviaria eletricidade para a tomada quando estivesse ligado, e
ainda seria um pouco - você simplesmente não conseguiria ver se estava ligado ou
apagado olhando para uma lâmpada. Seu computador tem algo parecido com interruptores,
como as teclas do teclado, e algo parecido com lâmpadas, como pequenos pontos na tela, mas
a maioria dos bits está dentro e não pode ser vista.

Isso é basicamente tudo o que existe em um computador: bits. Existem muitos e muitos
deles, e eles estão organizados e conectados de várias maneiras, que examinaremos em
detalhes à medida que o livro avança, mas é isso que está dentro de todos os computadores
– bits. Um bit está sempre em um de seus dois estados possíveis, desligado ou ligado, e eles
mudam entre ligado e desligado quando são instruídos a fazê-lo.
Os bits de computador não são como uma moeda que precisa virar fisicamente para mudar
de um estado para outro. Os bits não mudam de forma ou localização, não parecem
diferentes, não se movem, não giram, nem ficam maiores ou menores. Um bit de
computador é apenas um lugar; se não houver eletricidade naquele local, o bit está
desligado. Quando a eletricidade está presente, o bit está ligado.

Se você quiser mudar uma moeda de cara para coroa, você terá que movê-la fisicamente para
virá-la, o que leva algum tempo.
Porque a única coisa que precisa se mover num bit de computador é a eletricidade,
Machine Translated by Google

mudar seu estado de desligado para ligado ou desligado pode acontecer muito mais
rapidamente do que qualquer coisa que precise ser movida fisicamente.

Como outro exemplo, lembra-se do selvagem oeste americano dos filmes?


Havia pequenas cidades separadas por vastas distâncias. As cidades maiores teriam
uma estação telegráfica. Neste escritório havia um cara usando um chapéu engraçado que
tinha um interruptor de mola chamado chave, e ele enviava mensagens pressionando e
desligando essa tecla em certos padrões que representavam as letras do alfabeto. Essa chave
estava conectada a uma bateria (sim, eles tinham baterias naquela época) e a um fio que era
amarrado em postes até chegar a outra cidade. A chave simplesmente conectou a bateria
ao fio quando foi pressionada e desconectou a bateria quando a tecla não foi
pressionada. Na outra cidade tinha outra agência telegráfica, o fio entrava naquela agência, a
ponta dele estava enrolada em uma barra de ferro (que vira ímã quando há eletricidade
no fio), a barra magnetizada atraiu uma barrazinha de ferro preso por perto com uma mola
e fazia um clique toda vez que a eletricidade era ligada. O cara do escritório ouviu o padrão dos
cliques e anotou as letras da mensagem. Eles poderiam ter usado uma lâmpada em vez do
clicker, exceto que as lâmpadas ainda não haviam sido inventadas.

O objetivo de trazer esse assunto à tona é que toda essa máquina telegráfica, desde a tecla
que é pressionada em uma cidade, passando pelo longo fio que viaja para outra cidade
a muitos quilômetros de distância, até o clicker, todo esse aparato compreende
apenas um único bit . É um lugar que pode ter ou não eletricidade, e liga e desliga conforme é
mandado. E este método de comunicação revolucionou o mundo de várias maneiras. Mas
esta invenção muito importante da década de 1840 consistia em nada mais do que um
bit.

Espero que isso comece a simplificar o assunto de computadores para você. Só existe uma
coisa dentro dos computadores: bits. Muitos deles, com certeza, mas quando você entende os
pedaços, você entende o que está lá dentro.
Machine Translated by Google

O QUE ...?

Imagine que é um dia ensolarado e você entra em uma sala com muitas janelas abertas.
Você percebe que a luz do teto está acesa. Você decide que isso é um desperdício e vai
apagar a luz. Você olha para a parede ao lado da porta e vê uma placa de interruptor com
dois interruptores. Então você assume que o que está mais perto da porta é para a luz do
teto. Mas então você percebe que o interruptor já está desligado. E o outro interruptor
também está desligado. Então você pensa "bem, talvez alguém tenha instalado o
interruptor de cabeça para baixo", então decide acioná-lo de qualquer maneira. Você liga e
desliga, mas nada acontece, a luz do teto permanece acesa. Então você decide que
deve ser o outro interruptor e liga, desliga, liga, desliga. Novamente nada acontece,
aquela luz do teto continua brilhando para você. Você olha em volta, não há outra porta,
não há outros interruptores, nenhuma maneira aparente de apagar esta maldita luz. Só tem
que ser um desses dois interruptores, quem construiu essa casa maluca, afinal? Então
você pega um botão com cada mão e começa a girá-lo descontroladamente. Então, de
repente, você percebe que a luz do teto pisca brevemente. Então você diminui a
velocidade do interruptor e para quando a luz do teto está apagada. Ambos os interruptores
indicam "ligado" e a luz está apagada. Você desliga um interruptor, liga-o e a luz acende
e depois desliga. Isso está ao contrário. Um desligamento equivale a uma luz acesa? Então
você desliga o outro interruptor, liga, a mesma coisa, a luz acende e depois apaga. Que
diabos? De qualquer forma, você finalmente descobriu como funciona. Se ambos os
interruptores estiverem ligados, a luz apaga-se. Se um ou outro ou ambos os interruptores
estiverem desligados, a luz do teto está acesa. Meio bobo, mas você consegue o que
pretendia, liga os dois interruptores, a luz se apaga e você dá o fora dessa sala maluca.

Agora, qual é o propósito desta pequena história sobre os estranhos interruptores de luz?
A resposta é que neste capítulo apresentaremos a parte mais básica de que são feitos os
computadores. Esta parte funciona exatamente como o sistema de iluminação daquela
sala estranha.

Esta parte do computador é um dispositivo simples que possui três conexões onde
pode ou não haver eletricidade. Duas dessas conexões são locais onde a eletricidade
pode ser colocada no dispositivo, e a terceira conexão é um local onde a eletricidade pode
sair do dispositivo.
Machine Translated by Google

Das três conexões, duas delas são chamadas de “entradas”, porque a


eletricidade pode ser enviada para elas de algum outro lugar. A terceira conexão é
chamada de “saída” porque a eletricidade pode sair dela e depois ser enviada para
outro lugar.

Esta parte do computador é um dispositivo que faz algo com bits. Se você tiver dois
bits e conectar esses dois bits às entradas, este dispositivo "analisa" esses dois bits e
"decide" se liga ou desliga o bit de saída.

A forma como “decide” é muito simples e é sempre a mesma. Se ambas as entradas


estiverem ligadas, a saída estará desligada. Se uma ou ambas as entradas estiverem
desligadas, a saída estará ligada. Era assim que funcionava a sala com
interruptores de luz estranhos.

Lembre-se de que não há nada além de bits dentro do computador. Este dispositivo
simples é de onde vêm os bits e para onde vão. A “decisão” que este dispositivo toma
é como os bits são ligados e desligados em um computador.

Dois bits entram no dispositivo e um bit sai. Dois bits vêm de outro lugar, são
examinados pelo dispositivo e um novo terceiro bit é gerado para que possa ir
para outro lugar.

Se você foi extremamente observador, pode ter se perguntado esta pergunta:


"quando ambas as entradas estão desligadas, a saída está ligada, então... como você
obtém eletricidade na saída se ambas as entradas estão desligadas?" Bem, essa é
uma excelente pergunta, e a excelente resposta é que cada um desses dispositivos
também está conectado à energia. Como todo eletrodoméstico ou abajur da sua
casa, onde cada um possui um plugue com dois pinos, este aparelho possui um par de
fios, um deles conectado a um local onde a eletricidade está sempre ligada, e o
outro conectado a um local onde a eletricidade está sempre desligada. É daí que
vem a eletricidade para a produção. Quando alguém constrói um computador, ele
tem que fazer todas aquelas conexões de energia em cada uma dessas partes para
que ele funcione, mas quando desenhamos diagramas de peças, como elas estão
conectadas e o que farão, nós ganhamos. não se preocupe em desenhar os fios
de energia - eles apenas bagunçariam o desenho. Entende-se que cada parte
tem sua ligação de energia e não nos preocupamos com isso. Apenas entenda que
ele está aí e não o mencionaremos mais no resto do livro. Eu nem teria mencionado
isso aqui, exceto porque imaginei que você provavelmente se faria essa pergunta mais
cedo ou mais tarde.
Machine Translated by Google

Agora eu sei que disse que você não precisa entender muito de eletricidade para entender
computadores. Aqui é o mais complicado possível. Na verdade, há meia dúzia de
peças eletrônicas dentro deste dispositivo que o fazem funcionar, mas não examinaremos
essas peças neste livro. Alguém com experiência em eletrônica poderia olhar o que está lá
dentro e em cerca de 30 segundos diria "Ah, sim, se ambas as entradas estiverem
ligadas, a saída estará desligada, e para qualquer outra combinação a saída estará ligada,
assim como o livro diz." E então essa pessoa poderia prosseguir e ler este livro sem
nunca mais ter que pensar no que ele contém. Alguém que não entende de eletrônica perde
aqueles poucos segundos de compreensão, mas este livro é igual para todos.

Na fiação doméstica normal, um interruptor acende e apaga uma luz. No computador,


são necessários dois interruptores, e é meio inverso, pois ambos precisam estar ligados para
desligar a luz. Mas se você aceitar o fato de que algo poderia ser feito que funciona dessa
maneira, você poderá entender como tudo funciona no computador.

Este tipo de peça de computador é na verdade o ÚNICO tipo de peça necessária para construir
um computador. É claro que são necessários muitos deles para construir um computador
completo, mas com um número suficiente deles, você pode fazer qualquer tipo de computador.
Então lá vai você de novo, viu como um computador é simples? Está cheio desse tipo de
coisinha – muitas delas, com certeza, mas isso é tudo que existe.

Agora precisamos dar um nome a esse dispositivo, essa coisa dentro do computador de que
são feitos os bits, é chamada de "portão". Não consigo encontrar uma boa razão para
ser chamado de portão, um portão em uma cerca permite a passagem de pessoas quando
está aberto e impede as pessoas quando está fechado. Uma porta de computador gera
um terceiro bit a partir de dois outros bits, ela não abre e fecha, nem para, nem deixa
passar nada. O significado deste termo informático "portão" não parece se encaixar no
significado comum da palavra, mas desculpe, não fui eu que inventei o nome, é apenas assim
que é chamado. Você vai se acostumar com isso. Pelo menos não é uma palavra longa
do grego antigo.

Nos próximos capítulos, mostraremos como podemos fazer algo útil conectando várias
portas. Usaremos desenhos como os seguintes. A forma de 'D' com o pequeno círculo na
ponta representa o dispositivo que descrevemos, e as linhas representam os fios que entram
e saem dele e que ficam presos a outras partes do computador. A imagem no
Machine Translated by Google

à esquerda mostra um portão completo com seus fios de energia, mas como prometido,
não nos preocuparemos com eles no restante deste livro. O desenho à direita mostra
tudo o que precisamos:

Esta é uma representação de um portão. Os dois fios à esquerda (aeb) são as entradas
e o fio à direita (c) é a saída. Todos os três fios são bits, o que significa que estão
ligados ou desligados. Cada bit de entrada vem de algum outro lugar no computador
e está ligado ou desligado dependendo do que está acontecendo de onde veio, e então
esta porta ativa ou desativa sua saída dependendo dos estados de suas duas entradas.

Às vezes é útil fazer um pequeno gráfico que mostre como as diversas combinações
de entrada criam a saída, como este:

Cada linha mostra uma combinação possível de entradas e qual será a saída
nessas circunstâncias.

Compare este pequeno gráfico com a experiência da sala ímpar com os dois
interruptores de luz. Se um interruptor for chamado de 'a', o outro interruptor for
chamado de 'b' e a luz do teto for chamada de 'c', então este pequeno gráfico descreve completamente
Machine Translated by Google

e exatamente como funciona o equipamento naquela sala. A única maneira


de apagar essa luz é ligar o interruptor 'a' e o interruptor 'b'.
Machine Translated by Google

VARIAÇÕES SIMPLES

Como mencionado, esse portão é a única coisa que você precisa para construir um
computador, mas você precisa de muitos deles, e eles precisam ser conectados de
maneira inteligente para que possam fazer algo útil. O que vamos fazer aqui é mostrar
duas coisas simples que muitas vezes são feitas dentro de qualquer computador.

Este primeiro é muito simples. Pegue o portão acima e os dois fios de entrada, 'a'
e 'b', e amarre-os. Assim, 'a' e 'b' serão sempre iguais. Eles ainda podem ser
ativados e desativados, mas 'a' e 'b' nunca podem ser diferentes. 'A' e 'b' podem
estar ativados ou desativados. Assim, o gráfico desta combinação possui apenas
duas linhas, duas possibilidades:

Na verdade, como as colunas 'a' e 'b' são iguais, existe apenas uma entrada e
ela pode ser desenhada simplesmente assim com um triângulo em vez da forma de
'D'. Seu gráfico também é muito simples:
Machine Translated by Google

Para a nossa segunda variação, vamos combinar um dos nossos tipos originais de portão
com o novo portão que acabamos de inventar, assim:

E combinaremos os gráficos de como eles funcionam. O 'a', 'b' e 'x' são como o primeiro
portão, o 'x' e 'c' são como o segundo portão.

Essa combinação é usada com tanta frequência em computadores que é construída


como uma unidade única e o bit 'x' não está disponível para conexão. Então, para
facilitar a compreensão, ele é desenhado como uma unidade única assim:
Machine Translated by Google

A única diferença entre esta imagem e a imagem do nosso portão original é que falta
o pequeno círculo após o grande 'D'.

Como 'x' não é usado, o gráfico também pode ser simplificado e fica assim:

A única diferença entre este gráfico e o gráfico do nosso portão original é que cada
item na coluna 'c' é o oposto do que estava no gráfico original.

Imagine que essa combinação de portões foi instalada naquela sala com os dois
interruptores de luz e a luz de teto. A única maneira de a luz acender é se ambos os
interruptores estiverem ligados. Então, se você entrasse lá e visse a luz acesa, e
depois olhasse para os interruptores, veria que ambos estavam ligados. Não importa
qual interruptor você decidiu ser para a luz e o desligou, a luz se apagaria. Você pode
não perceber que, se desligasse os dois e depois quisesse acender a luz novamente,
não conseguiria fazer isso apenas apertando um botão. Você teria que passar pelo
mesmo experimento, acionando os dois interruptores até que a luz acendesse, e
descobriria que um interruptor e o outro teriam que estar ligados para que a luz
acendesse.

Esta porta combinada poderia ser descrita desta forma: Para que a saída esteja
ligada, uma entrada E a outra entrada devem estar ambas ligadas. Portanto, esse tipo
de porta tem um nome e, na tradição da terminologia informal inventada
pelos especialistas em informática, porque nos lembra o que a palavra AND significa,
é simplesmente chamada de "porta AND".
Machine Translated by Google

Agora, para preencher alguns detalhes deixados de fora propositalmente acima, a


porta original que vimos funciona como a porta AND, exceto que a saída é o oposto, ou o
negativo da porta AND. Portanto, é chamada de porta AND negativa ou apenas "porta
NAND", para abreviar.

A porta simples que tinha as duas entradas interligadas também tem seu próprio nome.
A saída é sempre o oposto de uma entrada, ou seja, se a entrada estiver ligada, a saída
não está ligada (desligada). Se a entrada estiver desligada, a saída não está desligada
(ligada). a entrada é, portanto, chamada de "porta NOT".

Observe a diferença entre os diagramas da porta AND e da porta NAND. Eles são
iguais, exceto que há um pequeno círculo no início da saída da porta NAND. Aquilo
que se parece com uma letra grande 'D' significa executar a função AND, o que significa
agir apenas se ambas as entradas estiverem ativadas, e o pequeno círculo significa mudar
para o oposto. Portanto, uma porta AND estará ligada se ambas as entradas estiverem
ligadas, uma porta NAND estará desligada se ambas as entradas estiverem ligadas. A
porta NOT começa com um triângulo, o que significa apenas pegar a entrada e transformá-
la em uma saída. O círculo significa então mudar para o oposto.

A porta AND é muito usada em computadores e é provavelmente a mais fácil de


entender, mas examinamos primeiro a porta NAND por dois motivos. A primeira e menos
importante razão é que a porta NAND é a porta mais fácil de construir.
Quando você tiver que construir um grande número de portões, será mais barato e
mais confiável se você puder usar o tipo de portão mais fácil de construir.

A segunda e muito importante razão pela qual olhamos primeiro para a porta NAND é
esta: tudo em um computador que o torna um computador pode ser feito de uma ou mais
portas NAND. Já vimos que a porta NOT e a porta AND podem ser feitas de portas NAND,
e veremos mais algumas combinações interessantes à medida que avançamos. Mas
cada um deles é baseado nessa coisinha boba chamada porta NAND.

O problema neste capítulo é que a porta NAND é o bloco básico de construção dos
computadores, mas a porta AND é a primeira porta que tem um nome que faz sentido.
Portanto, examinamos primeiro a porta NAND e a porta NOT sem lhes dar nomes. Então
construímos uma porta AND, demos-lhe um nome e voltamos e nomeamos as duas
primeiras.

Como observação sobre o idioma aqui, a palavra 'e' é uma conjunção no inglês normal.
Conecta duas coisas, como em “Gosto de ervilhas e cenouras”. Em
Machine Translated by Google

computadores, usamos a palavra de duas novas maneiras. Primeiro, é um


adjetivo, uma palavra que modifica um substantivo. Quando dizemos “esta é uma
porta AND”, a palavra “porta” é um substantivo, e a palavra “E” nos diz que tipo de
porta é. É assim que "AND" foi usado neste capítulo. "AND" também será usado
como verbo, como em "deixe-nos AND esses dois bits". Veremos AND usado dessa
forma mais adiante neste livro.

Então, voltando ao tema da simplicidade deste livro, dissemos que só existe uma
coisa nos computadores: bits. E agora vemos que os bits são construídos usando
portas, e todas as portas vão até a porta NAND. Portanto, tudo o que você precisa
saber para entender os computadores é este dispositivo muito simples, a porta
NAND. Sem brincadeiras! Você consegue entender isso? Então você poderá
entender todo o computador.
Machine Translated by Google

DIAGRAMAS

Se você quiser ver como funciona uma máquina mecânica, a melhor maneira de fazer isso é
olhar para dentro dela, observar o movimento das peças enquanto ela funciona, desmontá-la, etc.
A segunda melhor maneira é estudá-lo em um livro que contém muitas fotos mostrando
as partes e como elas interagem.

Um computador também é uma máquina, mas a única coisa que se move dentro dele é a
eletricidade invisível e silenciosa. É muito chato observar o interior de um computador, parece
que não está acontecendo nada.

A construção real das partes individuais de um computador é um assunto muito


interessante, mas não vamos abordá-lo além de dizer o seguinte: A técnica começa com uma
fina bolacha de cristal e, em uma série de etapas, é submetido a vários produtos químicos,
processos fotográficos, calor e metal vaporizado. O resultado é algo chamado “chip”, que
possui milhões de peças eletrônicas construídas em sua superfície. O processo inclui
conectar as peças em portas e conectar as portas em seções completas do computador. O
chip é então envolto em um pedaço de plástico do qual saem pinos. Vários deles estão
conectados a uma placa e aí você tem um computador. O computador que vamos “construir”
neste livro poderia facilmente caber em um chip com menos de um quarto de polegada
quadrada.

Mas a questão é que, diferentemente de uma máquina mecânica, a estrutura real de um chip
é muito confusa e difícil de acompanhar, e você não consegue ver a eletricidade de qualquer
maneira. Os diagramas que vimos no capítulo anterior são a melhor maneira de mostrar
como um computador funciona, por isso é melhor sermos bons em lê-los.

Ao longo do restante deste livro, construiremos novas peças conectando vários


portões. Descreveremos o que a nova peça faz e, em seguida, daremos a ela um nome e seu
próprio símbolo. Então podemos conectar várias dessas novas partes em outra coisa que
também recebe um nome e um símbolo.
Antes que você perceba, teremos montado um computador completo.

Cada vez que há um novo diagrama, o texto explicará qual é o seu propósito e como as partes
o alcançam, mas o leitor realmente deve examinar o diagrama até que possa ser visto que
as portas realmente fazem o que o livro diz que farão. . Se isso for feito fielmente com cada
um, em breve você verá exatamente como funciona um computador.
Machine Translated by Google

Existem apenas duas coisas em nossos desenhos: existem peças que possuem
entradas e saídas e existem linhas, ou fios, que conectam saídas e entradas.

Quando a eletricidade sai pela saída de um portão, a eletricidade percorre todo


o fio o mais rápido possível. Se a saída de um portão estiver ligada, então a
eletricidade estará ligada no fio que está conectado a ele, até onde for. Se a saída
de uma porta estiver desligada, todo o fio estará desligado. Eu acho que você
poderia considerar que a parte que sai do portão inclui todo o fio também.

As entradas dos portões não consomem a eletricidade do fio, portanto, uma saída
pode ser conectada à entrada de um ou mais portões.

Quando os fios são conectados entre si, isso é mostrado por um ponto onde eles se
encontram no diagrama, e todos os fios conectados recebem eletricidade como se
fossem um só fio. Quando os fios se cruzam em um diagrama sem ponto, significa
que não há conexão entre eles, eles não estão se tocando, os dois bits estão
separados.

Sempre que houver escolha, os diagramas mostrarão o caminho da


eletricidade movendo-se da esquerda para a direita, ou do topo da página para baixo.
No entanto, haverá muitas exceções a isso, especialmente mais adiante neste livro.
Mas você sempre pode saber em que direção a eletricidade está se movendo em
um fio, começando em uma saída e seguindo até uma entrada.

A maioria dos diagramas do livro são muito fáceis de seguir. Em alguns casos,
haverá também um daqueles gráficos que mostra qual será o resultado para cada
combinação possível de insumos. Se você tiver problemas para seguir um
diagrama, você pode escrever os prós e contras diretamente na página ou colocar
moedas na página e virá-las de modo que cara signifique ligada e coroa signifique fora.

Infelizmente, o diagrama do próximo capítulo é provavelmente o mais difícil de seguir


em todo o livro, mas depois de dominá-lo, você será um especialista em
leitura de diagramas.
Machine Translated by Google

LEMBRE- SE QUANDO

Você provavelmente já ouviu falar em memória de computador e agora veremos exatamente


o que é. Como a única coisa dentro dos computadores são os bits, e a única coisa que acontece
com os bits é que eles ligam ou desligam, segue-se que a única coisa que um computador pode
“lembrar” é se um bit estava ligado ou desligado. Veremos agora como isso é feito.

O diagrama a seguir mostra um bit de memória do computador. Acontece que é um dos truques
mais legais que você pode fazer com alguns portões. Examinaremos detalhadamente como ele
funciona aqui e, depois de entendê-lo, iremos substituí-lo por seu próprio símbolo e usá-lo
como um alicerce para coisas maiores e melhores.

Ele é feito de apenas quatro portas NAND, mas sua fiação é especial. Aqui está:

Esta combinação como um todo possui duas entradas e uma saída. "I' é onde inserimos o bit
que queremos lembrar, e 'o' é a saída do bit lembrado. 'S' é uma entrada que
informa a essas portas quando 'definir' a memória. Existem também três portas
internas fios rotulados como 'a', 'b' e 'c' que teremos que observar para ver como essas
partes funcionam juntas. Tente seguir isso com atenção, depois de ver que funciona, você
entenderá um dos mais importantes e coisas mais comumente usadas em um computador.

Para ver como isso funciona, comece com 's' ativado e 'i' desativado. Como 'i' e 's' vão para
o portão 1, uma entrada está desligada, então 'a' estará ligado. Como 'a' e 's' vão para a porta
2, ambas as entradas estão ligadas e, portanto, 'b' estará desligada. Olhando para a porta 4,
como 'b' está desligado, a saída da porta 4, 'c' estará ligada. Como 'c' e 'a' estão ligados, a saída
do portão 3, '0', estará desligada. 'O' volta para o portão 4 proporcionando um segundo de folga
Machine Translated by Google

entrada, deixando 'c' ainda ativado. O importante a notar aqui é que com 's' ativado, '0' termina
igual a 'i'.

Agora com 's' ainda ativado, vamos mudar 'i' para ativado. Como 'i' e 's' vão para o portão 1, 'a'
estará desativado. 'A' vai para um lado da porta 2 e da porta 3, portanto suas saídas '0' e 'b'
devem estar ambas ligadas. 'O' e 'b' vão para o portão 4 e desligam 'c', que volta para o portão 3
fornecendo uma segunda entrada de desligamento, deixando '0' ainda ligado. O importante a
notar aqui é o mesmo que observamos no parágrafo anterior - que com 's' ativado, '0' termina
igual a 'i'.

Até agora, vimos que quando 's' está ativado, você pode ativar e desativar 'i', e '0' mudará com
ele. 'O' irá ligar e desligar da mesma forma que 'i'. Com 's' ativado, essa combinação não é mais
útil do que um fio conectando 'i' a '0'.

Agora vamos ver o que acontece quando desligamos o 's'. Olhe para o portão 1. Quando 's' estiver
desativado, 'a' estará ativado, não importa o que você faça com 'i'. Agora você pode ligar e desligar
o 'i' e nada acontecerá. O mesmo vale para o portão 2. 'A' talvez esteja ligado, mas 's' está
desligado, então 'b' só pode estar ligado. Tanto 'a' quanto 'b' estão ativados e alterar 'i' não
faz nada. Agora a única coisa que importa, a grande questão é: qual será o '0'?

Se 'i' e '0' estivessem ligados antes de 'ser desligado, o portão 3 teria ambas as entradas
desligadas e o portão 4 teria ambas as entradas ligadas. Quando 's' apaga, 'a' acende, que é
uma entrada para a porta 3. Mas a outra entrada está desligada, então nada muda, '0' permanece ligado.

Se 'i' e '0' estivessem desligados antes de 'ser desligado, o portão 3 teria ambas as entradas
ligadas e o portão 4 teria ambas as entradas desligadas. Quando 's' apaga, 'b' acende, que é
uma entrada para a porta 4. Mas a outra entrada está desligada, então nada muda, 'c'
permanece ligado e '0' desligado.

Portanto, a resposta à questão do que acontece com '0' quando 's' é desligado é que ele permanece
como estava e não é mais afetado por 'i'.

Agora, o que temos aqui? Com 's' ativado, '0' faz tudo o que 'i' faz. Com o 's' desativado, o '0'
permanece como estava e o 'i' estava, no último instante, pouco antes do 's' disparar.
Agora 'i' pode mudar, mas '0' permanece como era. Esta combinação de portões bloqueia a forma
como o 'i' era antigamente. É assim que uma combinação de quatro portas NAND pode “lembrar”.
Este é apenas um bit de memória, mas é o alicerce básico de toda memória do computador.
Tudo o que a memória do computador é é uma forma de preservar a forma como um bit
foi configurado em algum momento.
Machine Translated by Google

Espero que você tenha seguido os fios e os prós e contras deste capítulo. Depois de
ver exatamente como isso funciona, você saberá que essas portas NAND simples
podem criar um bit de memória, e garanto que você nunca mais se perguntará sobre
isso.

Agora que sabemos como isso funciona, não precisamos mais olhar para a
complicada fiação interna dessa combinação. Vimos como funciona e de agora em
diante usaremos apenas este diagrama para representá-lo:

'I' é o bit de entrada que você deseja salvar. 'S' é a entrada que permite 'i' no bit de
memória quando 's' está ativado e o trava no lugar ou o 'configura' quando 's' dispara.
'O' é a saída dos dados atuais ou salvos. 'M' significa Memória. Muito simples, hein?

Vamos voltar para o nosso quarto com os engraçados interruptores de luz. Ele
tinha um portão NAND conectado. Vamos retirar a porta NAND e substituí-la por
este novo bit de memória. Conectaremos o interruptor esquerdo ao fio 'i', o interruptor
direito ao fio 's' e a luz do teto ao fio 'o'. Poderíamos começar com tudo igual, ou
seja, a luz está acesa, mas os dois interruptores estão desligados. Isso significaria
que em algum momento no passado, tanto 'i' quanto 's' estavam ativados, e 's' foi
desligado primeiro, bloqueando o estado de 'i' em nosso bit de memória, que então
sai em ' ó.' Então 'i' poderia ter sido desligado sem afetar nada. Então, se
entrássemos e decidíssemos que queríamos apagar a luz, primeiro tentaríamos o
interruptor 'i', ligaríamos e desligaríamos, e nada aconteceria. Então tentaríamos a
opção 's'. Quando ligamos, a luz se apaga. Sim, dizemos, o interruptor 's' controla
a luz, mas está instalado de cabeça para baixo! Então desligamos o interruptor
's', esperando que a luz volte a acender, mas a luz permanece apagada. Agora os
interruptores estão na mesma posição que estavam quando entramos na sala, ambos
estão desligados, mas agora a luz também está apagada, cara, isso é confuso.
Agora, não quero especular sobre quantas maldições aconteceriam antes que
alguém descobrisse isso, mas no final eles descobririam que quando 's' estava
aceso, a luz acendia e apagava com 'i', e quando 's' estava apagado, a luz
permaneceria como estava antes de ser apagada.
Machine Translated by Google

O QUE PODEMOS FAZER COM UM POUCO ?

Agora descrevemos um bit, mostramos como construir um, como lembrar ao longo do tempo em
que estado um bit estava em um instante anterior, e agora? O que fazemos com isso?

Como um bit nada mais é do que a eletricidade ligada ou desligada, a única coisa real que podemos
fazer com um bit é ligar ou desligar as luzes, ou torradeiras, ou qualquer outra coisa.

Mas também podemos usar um bit para representar outra coisa em nossas vidas. Podemos pegar
um bit e conectá-lo a uma luz vermelha, e dizer que quando esse bit estiver ligado, significa parar,
e quando esse bit estiver desligado, você pode ir. Ou, se estiver servindo um pedaço específico, você
quer batatas fritas com seu hambúrguer; se estiver desligado, você quer apenas o hambúrguer.

Esta é a ação de usar um código. O que é um código? Um código é algo que informa o que outra coisa
significa. Quando se supõe que algo signifique alguma coisa, em algum lugar alguém tem que fazer
uma lista de todos os estados da “coisa” e dos significados associados a cada um desses estados.
Quando se trata de um bit, uma vez que só pode estar em dois estados diferentes, então um
bit só pode significar uma de duas coisas. Um código para um bit precisaria apenas de dois
significados, e um desses significados estaria associado ao bit estar desligado, e o outro
significado estaria associado ao bit estar ligado.

É assim que você atribui significado a um bit. O bit não contém nenhum significado por si só;
não há espaço para nada além da presença ou ausência de eletricidade. O significado é atribuído a um
bit por algo externo ao bit. Daqui a pouco não há nada sobre trânsito ou batata frita, só
estamos dizendo que para esse trecho neste lugar, conectado a um semáforo vermelho pendurado
sobre um cruzamento, quando estiver aceso você deve parar, quando estiver desligado, você pode
ir. Outro pedaço, na caixa registradora de um restaurante fast food, significa colocar batatas fritas no
saco quando o pedaço estiver ligado ou não colocar batatas fritas quando estiver desligado.

Estes são dois casos em que alguém inventou um código simples de dois itens. Em um caso, o
código é: bit ligado significa batatas fritas, bit off significa sem batatas fritas, no outro caso, bit off
significa ir, bit on significa parar. Esses dois bits são iguais, apenas são usados para propósitos
diferentes e alguém decide qual será o significado desses dois bits. O código está escrito em algum
lugar nos livros jurídicos ou no manual do gerente do restaurante, mas o código não está no
Machine Translated by Google

pedaço. O estado do bit apenas informa a alguém qual linha do código ele deve acreditar
ser verdadeira no momento atual. Isso é o que é um código.

Tal como os espiões que passam mensagens usando um código secreto, a mensagem
pode ser vista por outras pessoas, mas essas outras pessoas não têm o código, por isso
não sabem o que a mensagem significa. Talvez um espião tenha um vaso de flores no
parapeito da janela da frente de seu apartamento. Quando o pote está no lado esquerdo
do peitoril, significa "Encontre-me na estação de trem às 13h30". E quando o vaso está
do lado direito do peitoril, significa "Não há reunião hoje".
Todos os dias, o outro espião caminha pela rua e olha para aquela janela para ver
se precisa ir à estação de trem hoje. Todas as outras pessoas que andam naquela rua
podem facilmente ver esta mensagem, mas não têm o código, então isso não significa nada
para eles. Então, quando os dois espiões se encontrarem, eles poderão passar um
pedaço de papel escrito em outro código secreto. Eles codificam e decodificam a
mensagem usando um livro de códigos que não carregam quando se encontram. Portanto,
se a mensagem deles for interceptada por outra pessoa, isso não significará nada para
essa outra pessoa. Alguém que não possui o livro de códigos não terá os significados
adequados para os símbolos na folha de papel.

Um bit de computador ainda é, e sempre será, nada mais do que um lugar onde há ou não
eletricidade, mas quando nós, como sociedade de seres humanos, usamos um bit para um
determinado propósito, damos sentido ao bit. Quando ligamos um bit a um semáforo
vermelho e o penduramos num cruzamento, e fazemos com que as pessoas estudem
os manuais de condução antes de lhes concederem a carta de condução, damos
sentido a esse bit. Vermelho significa 'parar', não porque o freio seja capaz de fazer qualquer
coisa com um veículo viajando na estrada, mas porque nós, como pessoas, concordamos
que vermelho significa parar, e nós, vendo esse freio ligado, pararemos nosso carro para
evitar sermos atropelados por um carro que circulava no cruzamento, e esperamos
que todos os outros façam o mesmo, para que possamos ter a certeza de que ninguém
nos atropelará quando chegar a nossa vez de atravessar o cruzamento.

Portanto, há muitas coisas que podem ser feitas com um pouco. Pode indicar verdadeiro
ou falso, ir ou parar. Um único sim ou não pode ser importante, como na resposta a "Quer
se casar comigo?" ou uma questão cotidiana como "Você gostaria de batatas fritas com
isso?"

Mesmo assim, há muitas coisas que não podem ser feitas com um bit ou que parecem ser
totalmente incompatíveis com a ideia de bits. Pode haver muitos exemplos
Machine Translated by Google

de coisas sim/não na vida cotidiana, mas há muito mais coisas que não são um
simples sim ou não.

No caso do telégrafo, que indiscutivelmente era apenas um bit, como pode haver
mais de dois itens no código Morse? A resposta é que a capacidade de enviar e
receber mensagens dependia das habilidades e da memória dos operadores
nas duas pontas da linha. No Código Morse, se a tecla fosse pressionada por um
período muito curto, isso era chamado de "ponto (.)", e se fosse pressionada por um
tempo um pouco mais longo, isso era chamado de "traço (-)." Cada letra do alfabeto
recebeu uma combinação única de pontos e/ou travessões, e ambos os operadores
estudaram o código, memorizaram-no e praticaram seu uso. Por exemplo, o código
para a letra 'N' era traço ponto (-.) e o código para a letra 'C era traço ponto traço
ponto (-.-.). A duração dos tempos ligados era diferente para formar pontos e traços, e a
duração dos tempos desligados era diferente para distinguir entre o tempo que
separa pontos e traços dentro de uma letra, o tempo que separa letras e o tempo
que separa palavras. Você precisa de mais tempo para não confundir um 'C com
dois' N's. A pessoa receptora tinha que reconhecê-los como padrões - isto é, ele
tinha que ouvir e lembrar a duração de vários momentos de ativação e desativação até
reconhecer uma letra. O aparelho telegráfico não tinha memória alguma, nunca havia
uma letra inteira no fio ao mesmo tempo, os pedaços de letras desciam pelo fio, para
serem reunidos em pontos e traços na mente do operador, depois em letras e depois
em palavras e frases escritas em uma folha de papel. Portanto, o bit telegráfico alcança
mais de dois significados ao ter vários momentos individuais em que talvez haja
ativação ou desativação.

Se um computador fosse construído com base nos princípios do código Morse, ele
teria apenas uma lâmpada em cima dele mostrando o código para nós. Como
preferimos ver letras, palavras e frases inteiras na tela simultaneamente, precisamos
de algo mais do que um único bit e esse código antigo.

Mesmo nos exemplos usados neste capítulo, os semáforos reais possuem, na


verdade, três bits, um para vermelho, um para amarelo e um para verde. Se você tivesse
apenas um bit, poderia simplesmente ter um sinal vermelho no cruzamento, e quando
estivesse aceso significaria parar, e quando estivesse apagado significaria ir. Mas
quando ela estava desligada, você poderia se perguntar se ela estava realmente
desligada ou se a lâmpada acabou de queimar. Portanto, usar três bits é muito mais útil neste caso.
Machine Translated by Google

No mundo real, já vimos que os computadores podem conter letras, palavras, frases, livros
inteiros, bem como números, imagens, sons e muito mais. E, no entanto, tudo isso se
resume a nada mais do que pedaços.

Se quisermos que a memória do nosso computador seja capaz de armazenar mais do que
ligado ou desligado, ou sim ou não, teremos que ter algo mais do que apenas um bit.
Felizmente, podemos fazer algo muito mais útil simplesmente usando vários bits juntos e
depois criando um código (ou talvez vários códigos) para atribuir-lhes algum significado útil.
Machine Translated by Google

UMA ROSA COM QUALQUER OUTRO NOME

Antes de prosseguirmos, vamos introduzir uma mudança no que chamamos


de algo. Como sabemos, todos os bits do computador são locais onde existe
ou não alguma eletricidade. Chamamos esses estados de “ligado” e “desligado”,
e é exatamente isso que eles são. Embora sejam palavras curtas, há lugares
onde é muito mais fácil, claro e simples usar um único símbolo para descrever
esses estados. Felizmente não vamos inventar nada complicado, apenas usaremos
dois símbolos que você já conhece bem, os números zero e um. De agora em
diante, cancelaremos o e ligaremos para o 1.
E às vezes ainda usaremos liga e desliga.

Assim, o gráfico da nossa porta NAND ficará assim:

Isto é muito fácil de entender, claro, mas o ponto que precisa ser ressaltado
aqui é que as peças do computador não mudaram, a única coisa que mudou foi
como nós, como pessoas que olham para a máquina, a chamamos.
Só porque chamamos um bit de zero ou um, isso não significa que de repente
números apareceram e estão circulando dentro do computador. Ainda não existem
números (ou palavras, sons ou imagens) num computador, apenas bits,
exatamente como descrito anteriormente. Poderíamos tê-los chamado de mais e
menos, sim e não, verdadeiro e falso, cara e coroa, alguma coisa e nada, norte e
sul, ou mesmo Bert e Ernie. Mas zero e um bastarão. Este é apenas um código
simples de dois itens. Ligado significa l e desligado significa 0.

Como comentário aqui, parece haver uma tendência entre os fabricantes


de eletrodomésticos do mundo em substituir os termos obsoletos e antiquados
Machine Translated by Google

de ligar e desligar com os modernos 0 e 1. Em muitos interruptores, eles colocam


ao na posição desligado e 1 na posição ligado. O primeiro lugar que vi isso foi
em um computador pessoal, e achei uma novidade fofa estar no computador,
mas agora essa prática se espalhou para celulares, cafeteiras e painéis de
automóveis. Mas acho que isso é um erro. Você entende que o código poderia
facilmente ter sido definido como "desligado significa 1 e ligado significa 0?" O
computador funcionaria exatamente da mesma maneira, apenas mudaria a
impressão dos manuais técnicos que descrevem o que está acontecendo
dentro do computador.
Quando você vê uma dessas opções o/1, você precisa traduzi-la desse código
de computador muito comumente usado para o que ela realmente significa,
ligado ou desligado. Então, por que se preocupar? Você não quer ligar sua
máquina de café em '1', você quer ligá-la para poder pegar seu Java e já acordar.
Imagine colocar esses símbolos em uma máquina de waffles em 1935. Ninguém
teria ideia do que isso significava. Provavelmente é apenas para que os fabricantes
não precisem imprimir interruptores em idiomas diferentes. Ou talvez esta
tendência venha de um desejo altruísta de educar o público sobre o “facto”
moderno de que 1 é o mesmo que on, mas não é um facto, é um código arbitrário.
Machine Translated by Google

OITO É SUFICIENTE

Para poder representar algo mais do que simples questões de sim/não, o que vamos fazer
é empilhar oito bits em um único pacote e usá-los como uma única unidade. Aqui está um
diagrama de como isso é feito. Pegamos oito de nossos bits de memória, cada um
ainda tem sua própria entrada de dados 'i' e sua própria saída 'o', mas conectamos todas
as oito entradas 's' do conjunto. Assim, quando o 's' único é ligado e desligado
novamente, todos esses oito 'M's capturarão os estados de seus 'i' s correspondentes ao
mesmo tempo. A imagem à esquerda mostra todos os oito 'M's, a da direita é a
mesma coisa, só que um pouco mais simples.

Esta montagem tem um nome; é chamado de byte, portanto, o "B" no diagrama.


Existem várias explicações conflitantes sobre a origem exata dessa palavra, mas como
soa exatamente como a palavra “mordida”, você pode pensar nela como um bocado inteiro
em comparação com uma unidade menor, um pouco. Só para mostrar que os designers
de computador têm senso de humor, quando usam quatro bits como unidade, eles
chamam isso de mordidinha. Então você pode comer um pedacinho de torta de cereja,
ou dar uma mordida ou pegar um byte inteiro.
Machine Translated by Google

Quando tínhamos um bit, diríamos apenas que seu estado era o ou 1. Agora que temos
um byte, escreveremos o conteúdo do byte assim: 0000 0000, e você pode ver por
que deixamos de usar off /em para 0/1. Isso mostra o conteúdo de cada um dos oito
bits, neste caso são todos zeros.
O espaço no meio existe apenas para facilitar a leitura. O o ou 1 à esquerda
corresponderia ao bit superior em nosso byte, e o o ou 1 mais à direita
representaria o bit inferior.

Como você já deve saber, um bit tem dois estados possíveis em que pode estar - ativado
ou desativado. Se você tiver dois bits, existem quatro estados possíveis em que esses
dois bits podem estar. Você se lembra do gráfico que desenhamos para as entradas da
porta NAND? Havia quatro linhas no gráfico, uma para cada combinação possível
dos dois bits de entrada da porta, 0-0, 0-1, 1-0 e 1-1.

Observe que a ordem dos bits importa - isto é, se você olhar para dois bits e perguntar
apenas quantos bits estão ativados, haverá apenas três possibilidades: nenhum bit ativado,
um bit ativado ou dois bits ativados. Isso seria chamar as combinações 1-0 e
0-1 da mesma coisa. Com o propósito de usar vários bits para implementar um
código, definitivamente nos preocupamos com a ordem dos bits em um byte.
Quando há dois bits, queremos usar todas as quatro possibilidades, por isso temos que
manter os bits em ordem.

Quantas possibilidades diferentes existem quando você usa oito bits? Se tudo que
você tem é um bit, ele pode estar em um dos dois estados. Se você adicionar um
segundo bit, o par terá o dobro de estados que antes, porque o bit antigo tem seus dois
estados, enquanto o novo bit é de uma maneira, e então o bit antigo tem seus dois
estados, enquanto o novo bit é de outra maneira. Portanto, dois bits têm quatro estados.
Quando você adiciona um terceiro bit, os dois primeiros têm quatro estados com o novo
bit desativado e quatro estados com o novo bit ativado, totalizando oito estados. Cada
vez que você adiciona um bit, você apenas duplica o número de estados possíveis.
Quatro bits têm 16 estados, cinco têm 32, seis têm 64, sete têm 128, oito têm 256,
nove têm 512 estados e assim por diante.

Vamos pegar oito bits e chamá-los de byte. Como um bit é algo que possui uma
localização no espaço, que pode estar em um de dois estados, então um byte é algo
que possui oito locais separados no espaço, cada um dos quais pode estar ativado ou
desativado, que são mantidos no mesma ordem. O byte, tomado como um todo, é um
local no espaço que pode estar em qualquer um dos 256 estados a qualquer momento e
pode mudar de estado ao longo do tempo.
Machine Translated by Google

CÓDIGOS

Um pouco só poderia representar coisas do tipo sim/não, mas agora que temos 256
possibilidades, podemos procurar coisas em nossas vidas que são um pouco
mais complicadas.

Uma das primeiras coisas que podem ser adequadas é a linguagem escrita. Se você
olhar em um livro e ver todos os diferentes tipos de símbolos usados para imprimir o
livro, verá todas as 26 letras do alfabeto em maiúsculas e minúsculas. Depois, há os
números de 0 a 9 e há sinais de pontuação como pontos, vírgulas, aspas,
pontos de interrogação, parênteses e vários outros. Depois, há símbolos
especiais como o sinal 'arroba' (@,), moeda ($,) e muito mais. Se você somar 52
letras, 10 números, algumas dezenas para pontuação e símbolos, obterá algo
em torno de 100 símbolos diferentes que podem aparecer impressos nas páginas de
um livro comum.

De agora em diante, usaremos a palavra “caractere” para significar algo desse tipo,
uma das letras, números ou outros símbolos usados na linguagem escrita. Um
caractere pode ser uma letra, um número, um sinal de pontuação ou qualquer outro
tipo de símbolo.

Então temos uma linguagem escrita com cerca de 100 caracteres diferentes, e
nosso byte com 256 possibilidades, talvez possamos representar a linguagem com bytes.
Vamos ver, como você coloca um 'A' em um byte? Não há nada inerente a um byte
que o associe a um caractere, e não há nada inerente a um caractere que tenha algo a
ver com bits ou bytes. O byte não contém formas ou imagens. Dividir um caractere em
oito partes não encontra nenhum bit.

A resposta, como antes, é usar um código para associar um dos estados possíveis do
byte a algo que existe no mundo real. A letra A' será representada por um padrão
particular de 1s e 0s nos bits de um byte. O byte tem 256 estados possíveis
diferentes, então alguém precisa sentar com lápis e papel e listar todas as 256
combinações e, ao lado de cada uma, colocar um dos caracteres que deseja que aquele
padrão represente. É claro que, quando ele chegar à 101ª linha, ele ficará sem
caracteres, então poderá adicionar todo tipo de símbolo raramente usado que puder
imaginar, ou poderá
Machine Translated by Google

apenas diga que o resto das combinações não terá significado no que diz
respeito à linguagem escrita.
E assim, nos primórdios dos computadores, cada fabricante sentou-se e
inventou um código para representar a linguagem escrita. A certa altura, as
diferentes empresas perceberam que seria benéfico se todas usassem o
mesmo código, caso quisessem que os computadores da sua empresa
pudessem comunicar com outra marca. Então formaram comitês,
realizaram reuniões e fizeram tudo o que fosse necessário para chegar a um
código com o qual todos pudessem concordar.
Existem várias versões deste código concebidas para diferentes propósitos, e
ainda hoje realizam reuniões para chegar a acordos sobre vários detalhes
esotéricos das coisas. Mas não precisamos nos preocupar com tudo isso para
ver como funciona um computador. O código básico que eles criaram ainda
está em uso hoje e não conheço nenhum motivo pelo qual ele precisaria
ser alterado.
O código tem nome, é: American Standard Code for Information Interchange.
Geralmente é abreviado para ASCII, pronunciado "aass-key".
Não precisamos imprimir o código inteiro aqui, mas aqui está um exemplo.
Estes são 20 códigos que eles criaram, as primeiras 10 letras do alfabeto em
maiúsculas e minúsculas:
Machine Translated by Google

Cada código é único. É interessante notar a maneira como eles organizaram os códigos
de modo que os códigos de letras maiúsculas e minúsculas da mesma letra usem o
mesmo código, exceto por um bit. O terceiro bit da esquerda está desativado para
todas as letras maiúsculas e ativado para todas as letras minúsculas.

Se você quisesse colocar uma mensagem na tela do seu computador dizendo "Olá
Joe", você precisaria de nove bytes. O primeiro byte teria o código para "H" maiúsculo,
o segundo byte teria o código para "e" minúsculo, o terceiro e quarto bytes teriam o código
para "1" minúsculo, o quinto byte teria o código para "1" minúsculo. "o", o sexto byte teria
o código para um espaço em branco, e os bytes sete, oito e nove conteriam os códigos
para "J", "o" e "e".

Observe que existe até um código para um espaço em branco (a propósito, é 0010
0000). Você pode se perguntar por que precisa haver um código para um espaço em
branco, mas isso só serve para mostrar como os computadores são burros. Eles
realmente não contêm sentenças ou palavras, há apenas um número de bytes definidos
com os códigos da tabela de códigos ASCII que representam os símbolos individuais que
Machine Translated by Google

usamos na linguagem escrita. E um desses “símbolos” é a falta de qualquer símbolo,


chamado espaço, que usamos para separar palavras. Esse espaço nos diz, leitor, que
este é o fim de uma palavra e o início de outra. O computador possui apenas bytes, cada um
dos quais pode estar em um de seus 256 estados.
O estado em que um byte está atualmente não significa nada para o computador.

Então vamos pegar um byte de memória e definir os bits como 0100 0101. Isso significa que
colocamos a letra E no byte, certo? Bem, na verdade não. Definimos o padrão que aparece
próximo à letra E na tabela de códigos ASCII, mas não há nada inerente ao byte que
tenha a ver com um 'E'. Se Thomas Edison estivesse testando oito de suas novas
lâmpadas experimentais e as colocasse enfileiradas em uma prateleira, e a primeira, a
terceira, a quarta, a quinta e a sétima lâmpadas tivessem queimado, as lâmpadas restantes
seriam um byte com esse padrão. Mas não havia uma única pessoa na face da Terra que
tivesse olhado para aquela fileira de lâmpadas e pensado na letra “E”, porque o ASCII
ainda não havia sido inventado. A letra é representada pelo código. A única coisa no byte é o
código.

Aí está o assunto dos códigos. Um código de computador é algo que permite associar
cada um dos 256 padrões possíveis em um byte a outra coisa.

Outra observação linguística aqui, às vezes a palavra código refere-se a toda a lista de
padrões e ao que eles representam, como em “Esta mensagem foi escrita com um código
secreto”. Às vezes, o código refere-se apenas a um dos padrões, como em "Que código está
nesse byte?" Será bastante óbvio a partir do contexto de que forma está sendo usado.
Machine Translated by Google

VOLTAR AO BYTE

Você se lembra do byte de memória que desenhamos há alguns capítulos? Eram


oito bits de memória com seus fios todos conectados. Quase sempre que precisamos
lembrar um byte dentro de um computador, também precisamos de uma peça
adicional que seja conectada à saída do byte. Esta parte extra consiste em oito
portas AND.

Essas oito portas AND, juntas, são chamadas de "Habilitador". O desenho à esquerda
mostra todas as peças, o desenho à direita é uma forma mais simples de desenhar.

A segunda entrada de todas as oito portas AND é conectada entre si e recebe o


nome de 'enable' ou 'e', abreviadamente. Quando 'e' está desligado, tudo o que
entra no Enabler não vai mais longe, porque o outro lado de cada porta AND está
desligado, portanto, as saídas dessas portas estarão todas desligadas. Quando 'e'
está ativado, as entradas passam pelo Enabler inalteradas até as saídas, 'o.'
Machine Translated by Google

A propósito, quando portões são usados para algo assim, o nome “portão” começa a fazer
algum sentido. Um Enabler permite a passagem de um byte quando o bit 'e' é le e interrompe
o byte quando é o. Portanto, 'e' estar ligado é como abrir um portão, e 'e' estar desligado é
como fechar um portão.

Pegaremos nosso byte e o conectaremos a um habilitador, conforme mostrado no


desenho à esquerda. Para simplificar mais uma vez, podemos desenhá-lo conforme
mostrado à direita.

Agora temos uma combinação que pode armazenar oito bits. Ele captura todos eles ao mesmo
tempo e pode mantê-los para si ou liberá-los para uso em outro lugar. Essa combinação de
um Byte e um Enabler, tem um nome, é chamado de Registrador, daí o 'R' do desenho.

Haverá alguns lugares neste livro onde há registradores que nunca precisam ter suas saídas
desligadas. Nesses casos, desenharemos um registrador que possui apenas um bit 'set' e
nenhum bit 'enable'. Provavelmente deveríamos nos referir a esses dispositivos como
'bytes', mas mesmo assim os chamaremos de registradores.

Cadastro significa simplesmente um local para registrar algum tipo de informação, como o
cadastro de um hotel onde todos os hóspedes se inscrevem, ou um cadastro de cheques
onde você anota cada cheque que é emitido. No caso desta peça de computador, você registra
o estado dos oito bits de entrada. Este registro é muito limitado, pois só pode conter um
conjunto de valores; no cadastro de um hotel há uma nova linha para cada hóspede. Cada
vez que você armazena um novo estado em um registrador de computador, o estado anterior
dos oito bits de memória é perdido. A única coisa que está lá é o valor salvo mais recentemente.
Machine Translated by Google

O ÔNIBUS MÁGICO

Existem muitos lugares em um computador onde são necessários oito fios


para conectar os registros. Nosso registrador, por exemplo, possui oito bits de
memória, cada um com uma entrada e uma saída. Para simplificar nossos
diagramas, substituiremos nossos oito fios por uma linha dupla.

Portanto, nosso registro pode ser parecido com um destes:

Ou podemos simplificar e substituí-lo por um destes:

É exatamente a mesma coisa, só economizaremos muita tinta em nossos


desenhos e eles ficarão mais fáceis de entender.
Quando há uma conexão entre dois desses feixes de fios, um fio de cada feixe é
conectado a um fio do outro feixe, conforme mostrado no diagrama à esquerda. Mas
vamos simplificá-lo e apenas desenhá-lo como no diagrama à direita.
Machine Translated by Google

Agora, esse agrupamento de oito fios é tão comum dentro de computadores que tem
nome. É chamado de ônibus. Por que é chamado de ônibus? Bem, provavelmente tem
a ver com o antigo termo elétrico 'buss', que significa uma barra de metal usada como
fio muito grande em locais como usinas de geração de energia. Mas há também
uma semelhança interessante com o tipo de ônibus que as pessoas usam para transporte.

Um ônibus é um veículo que normalmente percorre uma rota predeterminada e faz


muitas paradas onde as pessoas entram ou saem. Eles começam em algum lugar e o
ônibus os leva para algum outro lugar onde eles precisam estar. No mundo dos
computadores, um barramento é simplesmente um conjunto de oito fios que vão para
vários locais dentro do computador. Claro, oito é o número de fios necessários para
transportar um byte de informação. Dentro do computador, o conteúdo dos bytes precisa
ir de onde estão para outros lugares, então o barramento vai para todos esses lugares,
e o design do registrador permite que o conteúdo de qualquer byte selecionado
entre no barramento e saia. em um destino selecionado.

No exemplo a seguir, temos um barramento e cinco registros, cada um com sua


entrada e saída conectadas ao mesmo barramento.

Se todos os bits 's' e 'e' estiverem desativados, cada registro será definido como está e
permanecerá assim. Se você deseja copiar as informações de R1 para R4, primeiro
ative o bit 'e' de R1. Os dados em R1 estarão agora no barramento e disponíveis
nas entradas de todos os cinco registradores. Se você ligar e desligar brevemente o bit
's' do R4, os dados no barramento serão capturados no R4. O byte foi copiado.
Portanto, um ônibus de computador é um pouco como o ônibus que transporta pessoas.
Há várias paradas e os bytes podem chegar aonde precisam.

Observe que podemos copiar qualquer byte em qualquer outro byte. Você pode copiar
R2 em R5 ou R4 em R1. O ônibus funciona em qualquer direção. A eletricidade
colocada no barramento quando você habilita qualquer registro vai o mais rápido
possível para as entradas de todo o resto do barramento. Você pode até habilitar um
registro no barramento e configurá-lo em dois ou mais registros ao mesmo tempo.
A única coisa que você não quer fazer é habilitar as saídas de dois registradores no
barramento ao mesmo tempo.
Machine Translated by Google

Em termos de tamanhos de bits, você poderia ver desta forma: quando o bit 'e' de R1 é ativado,
os bits em R1 agora ficam mais longos, eles são um espaço maior porque agora estão
conectados ao barramento, então esses 8 bits agora incluem R1 e todo o barramento. Quando
o bit 'S' de R4 é ativado, os bits R1 ficam ainda maiores porque agora incluem R1, o
barramento e R4. Se alguma coisa em R1 mudasse de alguma forma neste momento, o
barramento e R4 mudariam imediatamente com ele. Quando o bit 's' de R4 é desligado, R4
recupera seu status como um byte separado, e quando o bit 'e' de R1 é desligado, o barramento
deixa de fazer parte de R1.

Então este é um ônibus. É um feixe de oito fios que normalmente vai para muitos lugares.

Mais uma coisa sobre registradores: há muitos lugares onde conectaremos a entrada e a saída
de um registrador ao mesmo barramento, então para simplificar ainda mais, podemos apenas
mostrar um feixe de fios rotulado como 'i/0', significando entrada e saída. Todos os itens a
seguir são exatamente equivalentes no que diz respeito à forma como funcionam. A colocação
dos fios no desenho pode ser ajustada para torná-lo o mais organizado possível.

Outra observação sobre linguagem: um byte é um local que pode estar em um dos 256 estados.
Às vezes falamos sobre mover um byte daqui para lá. Por definição, os bytes não se movem
dentro do computador. O byte refere-se apenas à localização, mas às vezes quando alguém
quer se referir à configuração atual do byte e deveria dizer "vamos copiar o conteúdo de R1
para R4", eles simplificam e dizem "mover R1 para R4" ou "mova este byte para lá."

Eles estão usando a palavra byte para se referir ao conteúdo do byte. Novamente, o contexto
geralmente deixa isso muito claro. No exemplo acima de cópia do conteúdo de R1 para R4,
você pode ouvir isso descrito como "mover um byte de R1 para R4". Tecnicamente, R1 e R4
são os bytes, que não se movem, apenas o conteúdo vai de um lugar para outro.

Além disso, o conteúdo não sai do local de onde veio. Quando você termina de "mover" um
byte, o byte "de" não mudou, ele não perde
Machine Translated by Google

o que tinha. Na outra extremidade, o padrão que estava originalmente no byte


“to” agora “desapareceu”, não foi a lugar nenhum, foi apenas substituído
pelas novas informações. O antigo padrão simplesmente deixa de existir. A
nova informação é exatamente a mesma que ainda está no primeiro byte. O byte
não se moveu, ainda existem dois bytes em dois locais, mas a informação do
primeiro byte foi copiada para o segundo byte.
Machine Translated by Google

MAIS COMBINAÇÕES DE PORTÕES

Agora vamos mostrar apenas mais duas combinações, e então poderemos juntar o que
sabemos até agora, para fazer a primeira metade de um computador.
Então não desanime, só mais um pouco e estaremos na metade do caminho para casa.

A primeira combinação é muito simples. É apenas uma porta AND com mais de duas
entradas. Se você conectar duas portas AND como este diagrama à esquerda, verá que
para 'd' estar ligado, todas as três entradas, 'a,' 'b' e 'c' devem estar ligadas. Portanto, esta
combinação pode ser simplesmente desenhada como este diagrama à direita:

E o gráfico que mostra como funciona fica assim:


Machine Translated by Google

Imagine substituir a entrada 'c' por outra porta AND, então você teria uma porta AND de quatro
entradas. Você poderia então substituir qualquer uma das quatro entradas por outra porta AND
e ter uma porta AND de cinco entradas. Isso pode ser feito quantas vezes forem necessárias
para o que você está fazendo.

À medida que você adiciona entradas, o gráfico precisará de mais e mais linhas. Cada vez que
você adiciona outra entrada, você dobra o número de combinações que as entradas podem ter.
O gráfico que vimos para as duas portas AND de entrada originais tinha quatro linhas, uma para
cada possibilidade. As três entradas, diretamente acima, possuem oito linhas. Uma porta AND
de quatro entradas terá 16 linhas, uma porta de cinco entradas terá 32, etc. Em todos os casos,
porém, para uma porta AND, apenas uma combinação resultará na ativação da saída, sendo essa
a linha onde todas as entradas estão ativadas.

Aqui está a última combinação que precisamos para fazer a primeira metade de um computador.
Esta combinação é diferente de tudo o que vimos até agora, na medida em que tem mais
resultados do que entradas. Nosso primeiro exemplo tem duas entradas e quatro saídas. Não é
muito complicado, apenas tem duas portas NOT e quatro portas AND.

No diagrama abaixo, 'a' e 'b' são as entradas que vêm da esquerda. Ambos estão conectados a
portas NOT. As portas NOT geram o oposto de suas entradas. Existem quatro fios verticais
descendo pela página que vêm de 'a' e 'b' e dos opostos de 'a' e 'b'. Assim, para cada 'a' e 'b',
existem dois fios descendo a página, onde um deles estará ligado se sua entrada estiver
ligada, e o outro estará ligado se sua entrada estiver desligada. Agora colocamos quatro portas AND
à direita e conectamos cada uma a um par diferente de fios verticais, de modo que cada
porta AND será ativada para uma diferente das quatro combinações possíveis de 'a' e 'b'. A
porta AND superior, rotulada como "0/0", é conectada ao fio que está ligado quando 'a' está
desligado e ao fio que está ligado quando 'b' está desligado e, portanto, liga quando 'a' e 'b '
são ambos o. A próxima porta AND, "0/1" é conectada ao fio que está ligado quando 'a' está
desligado e 'b', então ele liga quando 'a' é o e 'b' é 1, etc.

As entradas podem estar ativadas em qualquer combinação, ambos os bits desativados, um ativado,
o outro ativado ou ambos ativados. Nenhum, um ou dois. As saídas, porém, sempre terão uma
e apenas uma saída ligada e as outras três desligadas. Aquele que está ativado é determinado
pelos estados atuais de 'a' e 'b'.
Machine Translated by Google

Essa combinação é chamada de decodificador. O nome significa que se você considerar


os quatro estados possíveis das duas entradas como um código, a saída informará qual dos
códigos está atualmente na entrada. Talvez não seja um grande nome, mas foi o que
significou para alguém uma vez, e o nome pegou. Este decodificador possui duas entradas,
o que significa que podem haver quatro combinações dos estados das entradas, e
existem quatro saídas, uma correspondente a cada uma das combinações de entradas
possíveis.

Isso pode ser estendido. Se adicionarmos uma terceira entrada, haveria oito combinações
de entrada possíveis, e se usássemos oito, três portas AND de entrada, poderíamos
construir um decodificador de três entradas e oito saídas. Da mesma forma, poderíamos construir
Machine Translated by Google

um decodificador de quatro entradas e 16 saídas. Os decodificadores são nomeados


pelo número de entradas “X” o número de saídas. Como 2X4, 3X8, 4X16, 5X32, 6X64, etc.

Novamente, simplificaremos nossos desenhos, não mostraremos nenhuma parte interna


ou fiação, teremos apenas uma caixa com um nome e as entradas e saídas que
nos interessam. Vimos como as portas NAND fazem NOT portas e portas AND, e
então portas NOT e portas AND formam um decodificador. É uma caixa cheia de portas
NAND conectadas para fazer algo útil.
Sabemos o que faz, uma e apenas uma das saídas está sempre ligada, e qual delas é
determinada pelo estado das três entradas. Isso é tudo que faz.
Machine Translated by Google

PRIMEIRA METADE DO COMPUTADOR

Vamos construir algo com as peças que temos até agora. Na verdade, agora podemos
construir metade do que existe em um computador.

Primeiro, vamos construir algo semelhante em madeira (em nossas mentes), depois
voltaremos e mostraremos como construir uma versão para computador que faça praticamente a
mesma coisa.

Você sabe, em um hotel, na recepção, na parede atrás do recepcionista, há uma série de


cubículos de madeira, um para cada quarto do hotel.
É onde eles guardam as chaves extras do quarto e mensagens ou correspondências
para os hóspedes. Ou você pode ter visto um filme antigo em que alguém em uma antiga
agência dos correios separava a correspondência. Ele está sentado em uma mesa com uma
série de cubículos no fundo. Ele tem uma pilha de correspondência não classificada sobre a
mesa, pega uma de cada vez, lê o endereço e coloca a carta no cubículo apropriado.

Então vamos construir alguns cubículos. O nosso terá sete centímetros quadrados e terá
dezesseis cubículos de altura e dezesseis cubículos de largura.
É um tamanho total de um metro por um metro e meio, com um total de duzentos e cinquenta e
seis cubículos.

Agora vamos acrescentar algo que não tem nos correios ou no hotel.
Vamos colocar um grande painel de madeira bem na frente dos cubículos, que tem o dobro da
largura do conjunto, e no meio tem uma fenda vertical grande o suficiente para expor uma coluna
de 16 cubículos. O painel terá rodas na parte inferior para que possa deslizar para a
esquerda e para a direita para expor qualquer uma das colunas verticais de dezesseis cubículos
por vez e cobrir todas as outras colunas.

Vamos pegar outro painel de madeira igual ao primeiro, mas vire-o de lado para que fique duas
vezes mais alto que nossos cubículos, e a fenda no meio fique de um lado para o outro. Este
segundo painel será montado bem na frente do primeiro, em algo parecido com uma
moldura de janela, para que possa deslizar para cima e para baixo, expondo apenas uma fileira
de dezesseis cubículos por vez.

Portanto, agora temos uma série de 256 cubículos e dois painéis de madeira com fendas na
frente deles que permitem que apenas um cubículo de cada vez fique visível. Em cada um
desses cubículos colocaremos um único pedaço de papel no qual escreveremos uma das
combinações possíveis de oito zeros e uns.
Machine Translated by Google

Este dispositivo cubículo tem 256 lugares para guardar algo. A qualquer momento,
podemos selecionar um e apenas um desses locais deslizando os painéis de madeira
de um lado para o outro ou para cima e para baixo. No cubículo selecionado, podemos
pegar o pedaço de papel e lê-lo, ou substituí-lo por outro.

Agora pegaremos as portas, registradores e decodificadores que descrevemos e


faremos algo com eles que faça praticamente a mesma coisa que nosso dispositivo
de cubículo. Essa coisa terá 256 locais para guardar algo, e poderemos selecionar
um e apenas um desses locais a qualquer momento.

Fazendo referência ao diagrama abaixo, começamos com um único registro. Sua


entrada 'a' é um barramento que vem de algum outro lugar do computador. Uma
combinação de bits é colocada no barramento e o bit 'sa' (conjunto a) vai para 1 e depois
para o. Esse padrão de bits agora é armazenado neste registrador, que é um daqueles
registradores cuja saída está sempre ligada. Os primeiros quatro bits de saída são
conectados a um decodificador 4X16 e os outros quatro bits de saída são conectados
a outro decodificador 4X16. As saídas dos dois decodificadores são dispostas em um
padrão de grade. Os fios não se tocam, mas há 16 por 16, ou 256 interseções aqui
que utilizaremos em breve. Um decodificador, como afirmado, tem uma e apenas
uma de suas saídas ligadas a qualquer momento, e as demais estão desligadas.
Como temos dois decodificadores aqui, haverá um fio de grade horizontal ligado e um
fio de grade vertical ligado. Portanto, destas 256 intersecções, haverá apenas uma
intersecção onde estão ligados os fios horizontais e verticais. Qual interseção mudará
toda vez que o valor em R for alterado, mas sempre haverá uma onde ambos os fios
estão ligados enquanto os outros 255 terão apenas um ligado ou
nenhum ligado.
Machine Translated by Google

Na parte inferior deste diagrama há um barramento e um bit 's' e 'e', exatamente


como as conexões que vão para um registro. Como você pode ver, eles
sobem e entram na grade. O diagrama não mostra isso, mas eles sobem
sob a grade até o topo, de modo que cada uma das 256 interseções tenha
um ônibus e um bit 's' e 'e' próximo.
Há um círculo no diagrama acima, em torno de uma das interseções da grade.
O que está neste círculo é ampliado no diagrama abaixo, mostrando que
existem três portas AND e um registro em cada uma das 256
interseções. Como podemos ver, há uma porta AND 'x' conectada a um fio da
grade vertical e ao um fio da grade horizontal nesta interseção. Esses portões 'x'
são as únicas coisas conectadas à rede. O restante das conexões
vai até o barramento e os bits 's' e 'e' na parte inferior do diagrama. Lembre-
se de que há apenas uma interseção onde os dois fios da rede estão
ligados. Portanto, existem 256 dessas portas 'x', mas apenas uma delas tem
sua saída ativada em um determinado momento. A saída dessa porta 'x' vai
para um lado de cada uma das mais duas portas AND. Estas duas portas
controlam o acesso ao conjunto e permitem entradas do registrador naquela interseção. Então,
Machine Translated by Google

gate está desativado, os bits 's' e 'e' desse registro não podem ser ativados. Esse será o caso
de 255 desses registradores, aqueles onde a porta ‘x’ está desligada. Mas uma interseção
tem sua porta 'x' ativada e seu registro pode ser definido no barramento, ou seu conteúdo
pode ser ativado no barramento e enviado para outro lugar usando os bits 's' e 'e' na parte
inferior do diagrama. .

A descrição acima é a memória principal do computador. É metade do que é necessário para


construir um computador. Às vezes é chamado por nomes diferentes, mas o nome mais
correto vem do fato de que você pode selecionar qualquer um dos 256 bytes em um
momento, e então você pode selecionar imediatamente qualquer outro dos 256 bytes, e
não importa onde o último foi, ou onde está o próximo, não há vantagem ou desvantagem de
velocidade na ordem em que você seleciona os bytes. Por causa dessa qualidade, esse é
um bom tipo de memória para usar se você quiser acessar os bytes de memória em ordem
aleatória. Portanto, esse tipo de memória é chamado de “memória de acesso aleatório”
ou “RAM”, abreviadamente.

Esta é a RAM. Ele usa 257 registros. 256 registros são locais de armazenamento de
memória, um registro é usado para selecionar um dos locais de armazenamento e é
chamado de "Registro de Endereço de Memória" ou "MAR", abreviadamente. Agora que
sabemos o que contém, podemos fazer um diagrama simplificado como este, e uma versão
de barramento ainda mais simples:
Machine Translated by Google

Isso é metade de um computador. Um computador tem apenas duas partes e esta é


uma delas. Então agora você sabe metade do que há dentro de um computador. Cada
parte é feita de portas NAND. Isso não foi muito difícil, foi?

Há um problema aqui: 256 bytes é um tamanho muito pequeno para a RAM de um


computador. Talvez consigamos fazer isso neste livro, mas se você quiser um
computador de verdade, ele precisará de uma RAM com muito mais bytes para escolher.

Uma RAM maior pode ser construída fornecendo dois registros que são usados para
selecionar um local de armazenamento de memória. Isso permite o uso de
decodificadores 8X256 e resulta em uma grade com 65.536 interseções e, portanto,
em uma RAM com 65.536 locais diferentes para armazenar algo.

Aqui está uma ideia de como ficaria: (Não se preocupe em tentar contar as linhas da
grade, só foi possível encaixar cerca de metade delas na página impressa.)
Machine Translated by Google

Um barramento carrega um byte por vez, portanto, selecionar um dos 65.536


locais de memória dessa RAM seria um processo de duas etapas. Primeiro, um
byte teria que ser colocado no barramento 'a' e colocado em R0, depois o segundo
byte teria que ser colocado no barramento 'a' e colocado em R1. Agora você
pode acessar o local de memória desejado com o barramento e os bits 's' e
'e' na parte inferior do desenho.
Machine Translated by Google

Simplificando novamente, temos algo que se parece muito com a nossa RAM
de 256 bytes, só tem mais um bit de entrada.

No restante deste livro, usaremos a RAM de 256 bytes apenas para manter as
coisas simples. Se você quiser imaginar um computador com uma RAM maior,
cada vez que enviamos um byte para o Memory Address Register, basta
imaginar o envio de dois bytes.
Machine Translated by Google

NÚMEROS

Voltaremos ao assunto dos códigos por um momento. Anteriormente vimos um


código chamado ASCII que é usado para representar a linguagem escrita.
Bem, os números também são usados na linguagem escrita, portanto existem
códigos ASCII para os dígitos de zero a nove. Anteriormente vimos 20 códigos
ASCII para parte do alfabeto, aqui estão mais 10, os códigos para números na
linguagem escrita:

Este é um código muito útil, mas nem tudo o que os computadores fazem tem a
ver com linguagem escrita. Para outras tarefas, existem outros códigos que são mais
adequados para essas tarefas. Quando se trata de números, se você usar ASCII, um
byte pode ser qualquer um dos 10 dígitos de 0 a 9. Mas às vezes há um byte que é
sempre usado para armazenar um número, e esse número nunca será impresso
ou exibido em a tela. Nesse caso, podemos usar um código diferente que não
desperdice nenhum de seus estados possíveis com letras do alfabeto ou qualquer
coisa que não seja números. Como um byte tem 256 estados possíveis, você pode ter isso
Machine Translated by Google

código representa 256 números diferentes. Como queremos incluir zero, este código
começa em zero e vai até 255.

Agora, como esse código é organizado? O ASCII acima não é usado; este é um código
completamente diferente. Este código não exigiu nenhuma reunião de comitê
para ser inventado porque é o código mais simples e óbvio que os computadores
usam. É a coisa mais próxima que existe de um código de computador “natural”.

Como este é um capítulo longo, aqui está uma prévia deste código. Consiste em
atribuir um valor numérico a cada bit do byte. Para usar este código, basta ativar os bits
que somam o número que você deseja representar.

Para ver como esse código funciona, por que é usado em computadores e como esses
valores de bits foram escolhidos, examinaremos o assunto dos números fora dos
computadores.

Existem três sistemas numéricos com os quais você provavelmente está familiarizado e
que podemos analisar. A meu ver, cada um desses três sistemas é composto de duas
ideias ou elementos – primeiro, uma lista de símbolos e, segundo, um método para usar
esses símbolos.

Provavelmente o sistema numérico mais antigo que existe é uma coisa simples
chamada Tally Marks. Possui dois símbolos, “|” e "/." O método para usar esses símbolos
é escrever um “|” para cada uma das primeiras quatro coisas que você está
contando, então, para a quinta marca, você escreve um “/” nas quatro primeiras. Você
repete isso indefinidamente enquanto for necessário e, quando terminar, conta as notas
em grupos de cinco – 5, 10, 15, 20, etc. Este sistema é muito bom para contar as coisas
à medida que elas passam, digamos seu rebanho de ovelhas. À medida que cada animal
passa, basta riscar mais uma marca – não é necessário riscar “6” e escrever “7”. Este
sistema tem outra vantagem: na verdade, há uma marca para cada coisa contada. Mais
adiante neste capítulo, faremos algumas coisas interessantes com números que podem
ficar confusos; portanto, para manter as coisas claras, usaremos esse sistema antigo.
Machine Translated by Google

Você se lembra dos algarismos romanos? É um sistema numérico que também


consiste em dois elementos. O primeiro elemento são os símbolos, apenas letras
selecionadas do alfabeto, 'I' para um, 'V para cinco, 'X' para dez, 'L' para cinquenta,
'C para cem, 'D' para quinhentos, 'M' por mil. O segundo elemento é um método
que permite representar números que não possuem um único símbolo. O método
romano diz que você escreve vários símbolos, os maiores primeiro, e os soma,
exceto quando um símbolo menor está à esquerda de um maior, então você o
subtrai. Portanto, 'II' é dois (somar um mais um) e TV é quatro (subtrair um de cinco).
Uma das coisas que deixou este autor muito feliz com a chegada do ano 2000 foi o
fato de os algarismos romanos representarem o ano ficou muito mais simples. 1999 foi
‘MCMXCIX’, você tem que fazer três subtrações de cabeça só para ler essa. 2000
foi simplesmente 'MM'.

O sistema numérico normal que usamos hoje também consiste em duas ideias,
mas estas são duas ideias muito diferentes que nos chegaram através da Arábia e não
de Roma. A primeira dessas ideias também trata de símbolos, neste caso 0, 1, 2, 3, 4,
5, 6, 7, 8 e 9. Esses dígitos são símbolos que representam uma quantidade. A
segunda ideia é um método com o qual estamos tão acostumados, que o usamos instintivamente.
Este método diz que se você escrever um dígito, isso significa o que diz. Se você
escrever dois dígitos um ao lado do outro, o da direita significa o que diz, mas o da
esquerda significa dez vezes o que diz. Se você escrever três dígitos um ao lado do
outro, o da direita significa o que diz, o do meio significa dez vezes o que diz e o da
esquerda significa cem vezes o que diz. Quando você deseja expressar um número
maior que 9, você o faz usando vários dígitos e usa este método que diz que o número
de posições à esquerda do primeiro dígito indica quantas vezes você o multiplica por
dez antes de você adicione-os. Então, se você tem “246” maçãs, isso significa que
você tem duzentas maçãs mais quarenta maçãs mais seis maçãs.

Então, como isso funciona? Um número de qualquer valor pode ser escrito com os
dígitos de zero a nove, mas quando você ultrapassa nove, é necessário usar dois
dígitos. Quando você ultrapassa noventa e nove, precisa usar três dígitos.
Acima de novecentos e noventa e nove, você passa para quatro dígitos, etc. Se
você estiver contando para cima, os números em qualquer uma das posições giram
e giram - zero a nove, depois zero a nove novamente, e assim por diante, e sempre
que você vai de nove para zero, você aumenta o dígito à esquerda em 1. Então você
Machine Translated by Google

têm apenas dez símbolos, mas você pode usar mais de um deles conforme
necessário e suas posições em relação uns aos outros especificam seu valor total.

Há algo de estranho nisso, pois o sistema é baseado em dez, mas não existe um
símbolo único para dez. Por outro lado, há algo de certo nisso - os símbolos de
'0' a '9' constituem dez símbolos diferentes. Se também tivéssemos um único
símbolo para dez, haveria na verdade onze símbolos diferentes. Então, quem
pensou nisso foi muito inteligente.

Uma das novas ideias deste sistema árabe era ter um símbolo para zero.
Isso é útil se você quiser dizer que tem zero maçãs, mas também é necessário
para manter as posições dos dígitos corretas. Se você tiver 50 maçãs ou 107
maçãs, precisará dos zeros nos números para saber em que posição cada
dígito está realmente, para poder multiplicar por dez o número correto de vezes.

Agora, essas duas ideias do sistema numérico arábico (os dígitos e o método)
têm uma coisa em comum. Ambos têm o número dez associado a eles.
Existem dez dígitos diferentes e, à medida que você adiciona dígitos ao lado esquerdo
de um número, cada posição vale dez vezes mais que a anterior.

Na escola, quando ensinam números às crianças pela primeira vez, dizem algo sobre
o nosso sistema numérico ser baseado no número dez, porque temos dez dedos.
Então aqui vai uma pergunta estranha: e se esse sistema numérico tivesse sido
inventado por preguiças de três dedos? Eles têm apenas três dedos em cada mão
e nenhum polegar. Eles teriam inventado um sistema numérico com apenas seis
dígitos – 0, 1, 2, 3, 4 e 5. Isso funcionaria? Se você tivesse oito maçãs, como
você escreveria? Não existe número '8' neste sistema. A resposta é que, como a
primeira ideia, os dígitos, foi alterada para ter apenas seis dígitos, então a segunda
ideia, o método, também teria que ser alterada para que, à medida que você
adicionasse posições à esquerda, cada uma teria que ser multiplicado por seis
em vez de dezenas. Então esse sistema funcionaria. Ao contar suas maçãs, você
diria "0, 1, 2, 3, 4, 5..." e depois?

Não há '6' para o próximo número. Bem, de acordo com o método, quando você
quiser ir além do dígito mais alto, você volta para 'o' e adiciona um '1' à esquerda.
OK, "o, 1, 2, 3, 4, 5, 10, 11, 12." Agora você contou todas as suas maçãs. O que
esse '12' significaria? Seriam tantos: acho que você chamaria de oito, mas
escreveria '12'. Muito estranho, mas funciona -1
Machine Translated by Google

vezes seis mais dois é igual a oito maçãs, segue o método árabe, mas geralmente se
baseia em seis. Se você continuasse contando, quando chegasse a '15', que é (um
vezes seis mais cinco), o próximo número seria '20', mas o '2' significaria dois seis, ou
este número: E 55 seria ser seguido por 100. O '1' nessa terceira posição seria
quantos '36 havia (seis vezes seis)

Este é um sistema numérico muito estranho, mas adivinhe, você já o usa no dia a
dia. Sim, pense na maneira como escrevemos as horas ou no tipo de relógio que mostra
os números em seu mostrador. O dígito direito dos minutos e segundos segue
nossos números normais, 0-9, 0-9, indefinidamente. Mas o dígito esquerdo dos
minutos e segundos vai apenas de 0 a 5. Após 59 minutos, o relógio avança para a
próxima hora e 00 minutos. Uma hora tem 60 minutos, numerados de 00 a 59.
Essa posição esquerda nunca ultrapassa 5. Essa posição usa o sistema numérico
baseado em seis símbolos (0-5). A parte horária do relógio indica quantos anos 60
existem, embora você nunca veja um 60 no mostrador do relógio. E você está tão
acostumado com isso que não precisa pensar nisso. Quando o relógio marca 1h30,
você sabe que está na metade do caminho entre 1h e 2h, não precisa fazer nenhuma
matemática de cabeça para descobrir.
Você já teve que adicionar tempo? Se você somar 40 minutos e 40 minutos, obtém 80
minutos, mas para anotar isso em horas e minutos, você tem que descobrir quantos
60 há em 80, neste caso 1, e então descobrir quantos minutos há além de 60, neste
caso 20. Então você escreve 1:20. O 1 representa 60 minutos, adicione 20 e você terá
80 novamente. Então isso é bem complicado, dois sistemas numéricos diferentes no
mesmo número! Mas você já o usou durante toda a sua vida.

As posições horárias são ainda mais estranhas. Em um relógio de 12 horas, ele pula
zero e vai da 1h às 12h e depois das 13h às 12h. Em um relógio de 24 horas, vai das
00h às 23h. Não tentaremos analisá-los. O que queríamos enfatizar é que você já
está familiarizado com sistemas numéricos baseados em números diferentes de dez.
Machine Translated by Google

Você poderia inventar um sistema numérico para qualquer quantidade de dígitos, 10


ou 6 como vimos acima, ou 3 ou 14 ou qualquer número que você escolher. Mas o mais
simples seria se você tivesse apenas 2 dígitos, 0 e 1. Como funcionaria isso?
Bem, você contaria 0, 1... e então você já estaria sem dígitos – então volte para 0 e
adicione 1 à esquerda, fazendo o próximo número 10 e depois 11, então você estará
sem dígitos novamente, então 100 depois 101, 110, 111 depois 1000. Este sistema é
baseado em dois, então existem apenas dois dígitos, e conforme você adiciona
posições à esquerda, cada um vale duas vezes mais que o anterior. A posição direita
significa o que diz, a próxima à esquerda significa duas vezes o que diz, a próxima
significa quatro vezes o que diz, a próxima significa oito vezes, etc.
Quando você passa a ter apenas dois dígitos possíveis, não precisa fazer muitas
multiplicações para descobrir o valor total de uma posição. Na posição que vale “oito”,
por exemplo, só pode haver um, significando um “oito”, ou um zero, significando “sem oitos”.

Já que estamos nisso, vamos imaginar um animal muito estranho com oito dedos em
cada mão. Esse animal teria inventado números baseados em dezesseis. Em seu
sistema, eles seriam capazes de escrever de dez a quinze cada um com um único
símbolo. Somente quando chegassem aos dezesseis anos eles voltariam para 0 e
precisariam colocar um 1 na posição à esquerda. Para ver como isto funcionaria,
precisamos de seis novos símbolos, então vamos utilizar apenas as primeiras seis letras
do alfabeto. 'A' significará dez, 'B' significará onze, 'C' significará doze, 'D' significará
treze, 'E' significará quatorze e 'F' significará quinze. Somente depois de usar todos os
dezesseis símbolos na posição correta é que ficaremos sem símbolos, e o próximo número
será dezesseis, escrito '10' neste sistema. Se você está familiarizado com o sistema
de pesos de libras e onças, é mais ou menos como este sistema. Existem 16 onças em
uma libra, então você sabe que 8 onças equivalem a meia libra. Adicionar 9 onças e 9
onças resulta em 1 libra e 2 onças.

Aqui está um gráfico que mostra cinco sistemas numéricos diferentes. A primeira coluna
é o antigo sistema de marcações para mantê-lo sensato.
Machine Translated by Google

Nossos números normais de 0 a 9 são chamados de sistema decimal, porque


'dec' significa dez em alguma língua antiga. O sistema 0-5 seria chamado de
sistema senário, porque 'sen' significa seis em alguma outra língua antiga.
Este novo sistema com apenas 0 e 1 é chamado de sistema binário porque 'bi'
significa dois, também por causa de alguma linguagem antiga. Este outro novo
sistema, o sistema 0-F, será chamado de sistema hexadecimal, porque 'hex' é
outra palavra antiga que significa seis e 'dec' ainda significa dez, então é o sistema
seis mais dez.

Outro método de nomear diferentes sistemas numéricos é chamá-los pelo número


em que se baseiam, como 'base 10' ou 'base 2', etc., significando decimal ou
binário, etc. 'é escrito no sistema decimal. '2' escrito em binário é '10', então 'base
10' significaria binário se '10' fosse escrito em binário. Na verdade, todo sistema
numérico seria de 'base 10' se o '10' fosse escrito nos números desse sistema!

Portanto, poderíamos falar sobre base 2, base 6, base 10 e base 16 se quiséssemos,


desde que nos lembremos que esses números de base são escritos em decimal.
Se falamos de binário, senário, decimal e hexadecimal, é a mesma coisa, só que
possivelmente um pouco menos confuso.
Machine Translated by Google

Novamente, nos nossos números decimais normais, a posição mais à direita é o número
de unidades. A próxima posição à esquerda é o número de dezenas, etc. Cada
posição vale dez vezes a anterior. No sistema binário, a posição mais à direita
também é o número de unidades, mas a próxima posição à esquerda é o número de
“dois”, a próxima à esquerda é o número de “quatros”, a próxima é “oitos”. Cada
posição vale duas vezes o valor à sua direita.
Como cada posição possui apenas dois valores possíveis, zero ou um, isso é
algo que poderíamos usar em um byte.

Este é o ponto deste capítulo. O sistema numérico binário é uma combinação


“natural” com as capacidades das peças do computador. Podemos usá-lo como um
código, com off representando zero e on representando um, seguindo o método
dos números arábicos com apenas dois símbolos. Em um byte, temos oito bits. Quando
usamos este código, o bit à direita valerá 1 quando o bit estiver ativado ou 0 quando
estiver desativado. O próximo bit à esquerda valerá 2 quando estiver ativado ou o
quando estiver desativado. O próximo à esquerda é 4, e assim por diante com
8,16, 32, 64 e 128. Na ordem que normalmente os vemos, os valores dos oito bits são
assim: 128 64 32 16 8 4 2 1.

Neste código, 0000 0001 significa um, 00010000 significa dezesseis, 0001 0001
significa dezessete (dezesseis mais um), 11111111 significa 255, etc. Em um byte
de oito bits, podemos representar um número em qualquer lugar de o a 255. Este
código é chamado o "código numérico binário".

O computador funciona muito bem com esse arranjo, mas é irritante para as pessoas
usarem. Apenas dizer o que está em um byte é um problema. Se você tiver 0000
0010, poderá chamá-lo de "zero zero zero zero zero zero um zero binário" ou pode
traduzi-lo mentalmente para decimal e chamá-lo de "dois", e geralmente é isso que
é feito. Neste livro, quando um número é escrito por extenso, como “doze”, significa 12
em nosso sistema decimal. Um binário 0000 0100 seria chamado de 'quatro', porque é
isso que significa em decimal.

Na verdade, na indústria de computadores, as pessoas costumam usar hexadecimal (e


apenas o chamam de 'hex'). Se você olhar o gráfico acima, verá que quatro dígitos
binários podem ser expressos por um dígito hexadecimal. Se você tiver um
byte contendo 00111100, poderá convertê-lo para 60 casas decimais ou simplesmente
chamá-lo de "3C hex". Agora não se preocupe, não usaremos hexadecimal neste livro,
mas você pode ter visto esses tipos de números em algum lugar e agora sabe do que
se trata.
Machine Translated by Google

ENDEREÇOS

Agora que temos o código numérico binário, podemos usá-lo para diversos
fins em nosso computador. Um dos primeiros lugares que iremos utilizá-lo é no
Registrador de Endereços de Memória. O padrão de bits que colocamos neste
registrador usará o código numérico binário. Os bits deste número em MAR
selecionam então um dos 256 locais de armazenamento de RAM. O número
em MAR é considerado um número entre 0 e 255 e, portanto, cada um dos 256
bytes de RAM pode ser considerado como tendo um endereço.

Isso é bastante simples, mas é preciso ressaltar aqui o que exatamente significa
um endereço dentro de um computador. Num bairro de casas, cada casa tem um
endereço, como 125 Maple Street. Há uma placa na esquina que diz "Maple
St." e escritos na casa estão os números "125". É assim que normalmente
pensamos em endereços. O ponto a ser destacado aqui é que as casas e ruas
têm números ou nomes escritos nelas. No computador, o byte não contém nenhuma
informação de identificação nele ou contida nele. É simplesmente o byte que é
selecionado quando você coloca esse número no Registro de Endereço de Memória.
O byte é selecionado em virtude de onde está, e não por qualquer outro fator
contido naquele local. Imagine um bairro de casas que tivesse dezesseis
ruas e dezesseis casas em cada rua. Imagine que as ruas não tenham
sinalização e as casas não tenham números escritos. Você ainda seria capaz de
encontrar qualquer casa específica se lhe dissessem, por exemplo, para ir para 'a
quarta casa na sétima rua'. Aquela casa ainda possui endereço, ou seja, forma
de localizá-la, só não possui nenhuma informação de identificação no local.
Portanto, um endereço de computador é apenas um número que faz com que um
determinado byte seja selecionado quando esse endereço é colocado no Registro
de Endereço de Memória.
Machine Translated by Google

A OUTRA METADE DO COMPUTADOR

A outra metade do computador também é feita, em última análise, de nada


além de portas NAND, e provavelmente tem menos peças totais do que a RAM
que construímos, mas não é organizada de forma tão regular e repetitiva, por isso
demorará um pouco mais para explicar . Chamaremos essa metade do
computador de “Unidade Central de Processamento”, ou CPU, porque ela faz
algo com e para os bytes da RAM. Ele os “processa” e veremos o que isso
significa nos próximos capítulos. O que é comum aos dois lados do
computador é o barramento.

Aqui estão os primórdios da CPU. A RAM é mostrada à direita e o barramento


faz um grande loop entre as duas conexões de barramento na RAM.
A CPU inicia com seis registros conectados ao barramento. Esses seis
registradores são todos os locais que a CPU usará para “processar” bytes. Isso
não é tão complicado, não é?
A grande caixa chamada “Seção de Controle” no meio do diagrama será
examinada em detalhes posteriormente. Ele controla todos os bits 'set' e
'enable' na CPU e na RAM. As caixas com os pontos de interrogação serão
explicadas imediatamente após este capítulo. Por enquanto, veremos para onde
os bytes podem ir dentro da CPU.
R0, R1, R2 e R3 são registros usados como armazenamento de curto prazo
para bytes necessários na CPU. Suas entradas e saídas estão conectadas a
Machine Translated by Google

o ônibus. Eles podem ser usados para muitos propósitos diferentes, por isso são conhecidos
como “registros de uso geral”.

O registro denominado 'TMP' significa temporário. Sua entrada vem do barramento e sua
saída desce para uma e depois para a outra das caixas marcadas com interrogações. O
TMP tem um bit 'set', mas nenhum bit 'enable' porque nunca temos um motivo para desligar
sua saída.

O último registro é chamado de acumulador, ou ACC, abreviadamente. Esta é uma palavra


que vem da época das antigas máquinas de somar mecânicas (antes de 1970). Acho
que significava que, à medida que você somava uma coluna de números, ela "acumularia" um
total acumulado. Em um computador, significa apenas que ele armazena temporariamente
um byte que vem daquela grande caixa marcada com uma interrogação. A saída do ACC é
então conectada ao nosso velho amigo, o barramento, para que possa ser enviada
para outro lugar, conforme necessário.

Os registros na CPU e na RAM são os locais de onde vem e para onde vai o conteúdo
dos bytes enquanto o computador opera. Todos os movimentos envolvem a ativação
de um registro no barramento e a configuração do conteúdo do barramento em outro
registro.

Agora veremos o que há nessas caixas com pontos de interrogação.


Machine Translated by Google

MAIS PORTÕES

Usamos portas NAND, AND e NOT até agora. Existem mais duas portas combinadas que
precisamos definir. O primeiro é construído assim:

Tudo o que ele faz é NÃO as duas entradas de um de nossos bons e velhos portões NAND.
Aqui está o gráfico, mostrando os fios intermediários para que seja fácil de seguir.

Neste caso, quando ambas as entradas estão desligadas, a saída está desligada, mas se 'a'
OU 'b' estiver ligado, ou ambos, então a saída estará ligada. Portanto, tem outro nome muito
simples, é chamado de “porta OR”. Em vez de desenhar todas as partes, ele tem seu próprio
diagrama em forma de escudo. O diagrama e o gráfico são assim:
Machine Translated by Google

Assim como a porta AND, você pode construir portas OR com mais de duas entradas. Basta
adicionar outra porta OR no lugar de uma das entradas e você terá três entradas,
qualquer uma das quais ativará a saída. Também como a porta AND, cada vez que você
adiciona uma entrada, o número de linhas no gráfico duplicará. Com a porta OR,
apenas a linha que estiver com todas as entradas desligadas terá a saída desligada. Todo
o resto das linhas mostrará a saída ativada.

O último portão combinado que precisamos aqui leva cinco portões para ser feito, mas o que
ele faz é bastante simples. Semelhante à porta OR, a saída está ligada quando uma
das entradas está ligada, mas nesta versão, a saída é desligada se ambas as entradas
estiverem ligadas. Portanto, é chamada de porta OR exclusiva ou, abreviadamente, porta XOR.
A saída estará ligada se OU a outra entrada estiver ligada, exclusivamente. Somente se
for OU, não se for E. Outra maneira de ver isso é que a saída é ativada se uma e apenas
uma entrada estiver ativada. Ainda outra maneira de ver isso é que a saída está desligada
se as entradas forem iguais e ligada se as entradas forem diferentes.
Machine Translated by Google

O diagrama simplificado é semelhante a uma porta OR, mas possui uma linha
curva dupla no lado de entrada. O diagrama e o gráfico são assim:

Agora temos quatro tipos de portas que recebem duas entradas e geram uma saída.
Eles são NAND, AND, OR e XOR. Aqui está um gráfico que o torna bonito
Machine Translated by Google

simples:

Para as quatro combinações de entrada possíveis de 'a' e 'b', cada tipo de porta
tem seu próprio conjunto de estados de saída, e os nomes das portas podem
ajudá-lo a lembrar qual é qual.

Apesar de tudo no computador ser feito de portas NAND, não usaremos nenhuma
porta NAND sozinha neste computador! Agora que os usamos para construir portas
AND, OR, XOR e NOT, e o bit de memória, concluímos a porta NAND. Obrigado, Sr.
portão NAND, tchau por enquanto.
Machine Translated by Google

Mexendo com bytes

Portas individuais operam em bits. Dois bits dentro, um pouco fora. Mas a RAM
armazena e recupera um byte de cada vez. E o ônibus move um byte de cada vez.
Aqui na CPU, queremos poder trabalhar com um byte inteiro de uma vez.
Queremos algumas 'portas' que afetem um byte inteiro. No capítulo sobre barramento, vimos
como o conteúdo de um byte pode ser copiado de um registrador para outro.
Isso geralmente é chamado de movimentação de um byte. Agora veremos algumas
variações disso.

Primeiro veremos três maneiras pelas quais podemos alterar o conteúdo de um byte à
medida que ele passa de um registrador para outro. Em segundo lugar, veremos quatro
maneiras pelas quais podemos pegar o conteúdo de dois bytes e fazê-los interagir entre
si para criar o conteúdo de um terceiro byte. Essas são todas as coisas que os
computadores realmente fazem com os bytes. Em última análise, todas as coisas se
resumem a essas sete operações.
Machine Translated by Google

OS MUDANÇAS ESQUERDA E DIREITA

O shifter é muito fácil de construir. Ele não usa nenhum portão, apenas conecta o ônibus de
maneira um pouco estranha. É feito assim:

Isto mostra dois registros conectados por um shifter direito. O shifter são apenas os fios entre os
dois registros. Quando o bit 'e' de R1 é ativado e o bit 's' de R2 é ativado e desativado, todos os
bits em R1 são copiados para R2, mas são deslocados em uma posição. O que está na parte
inferior (shift out) pode ser conectado a algum outro bit no computador, mas geralmente é
conectado de volta ao que está no topo (shift in) e quando isso é feito, o bit mais à direita passa
para o bit mais à esquerda na outra extremidade do byte.

Um shifter direito mudará 0100 0010 para 0010 0001.

Se 'shift out' estiver conectado a 'shift in', um deslocamento para a direita mudará de 0001 1001
para 1000 1100

Um shifter esquerdo mudará de 0100 0010 para 1000 0100. O shifter esquerdo está conectado
assim:
Machine Translated by Google

Mais uma vez, temos versões em ônibus desses desenhos. Cada um deles tem um
barramento 'i' e 'o', e também um bit de entrada e saída, como este:

Agora, para que serve isso? As mentes dos programadores criaram todo tipo de coisas, mas
aqui está uma interessante. Suponha que você esteja usando o código numérico binário. Você
tem o número 0000 0110 em R1. Isso resulta no número decimal 6. Agora mude esse
código para a esquerda em R2. R2 será então 0000 1100. Isso resulta no número decimal
12. Como você sabe, acabamos de multiplicar o número por 2. Esta é a base de como
a multiplicação é feita em nosso computador. Como você multiplica por algo diferente de
2 será visto mais tarde, mas é simples assim, basta deslocar os bits.

Isso é semelhante a algo que fazemos com números decimais. Se você quiser multiplicar
algo por dez, basta adicionar um zero ao lado direito, deslocando efetivamente cada dígito
uma posição para a esquerda. No sistema binário, isso resulta apenas na multiplicação por
dois porque é em dois que o sistema se baseia.

Então esse é o shifter, sem nenhum portão.


Machine Translated by Google

A NOTEIRA

Este dispositivo conecta dois registradores com oito portas NOT. Cada bit será
alterado para o seu oposto. Se você começar com 0110 1000, terminará com
1001 0111. Esta operação é usada para muitos propósitos, sendo o
primeiro em algumas funções aritméticas. Veremos exatamente como isso
funciona logo após descrevermos algumas outras coisas. Outro nome
para uma porta NOT é “inversor”, porque ela faz o oposto do que você dá, vira
de cabeça para baixo ou inverte.

Como a entrada e a saída são ambas de oito fios, simplificaremos usando nossa imagem
de tipo de barramento.
Machine Translated by Google

O ANDER

O ANDer recebe dois bytes de entrada e transforma cada bit desses dois em um terceiro byte. Como você
pode ver, os oito bits do barramento de entrada 'a' estão conectados ao lado superior de oito portas AND. Os oito
bits do barramento de entrada 'b' estão conectados ao lado inferior das mesmas oito portas AND. As saídas
das oito portas AND formam a saída do barramento 'c' deste conjunto. Com isso, podemos AND dois bytes
juntos para formar um terceiro byte.

Existem muitos usos para isso. Por exemplo, você pode certificar-se de que um código de letra ASCII
esteja em maiúscula. Se você tiver o código para a letra 'e' em R0, 0110 0101, poderá colocar o padrão de bits
1101 1111 em R1 e depois AND R1 e R0 e colocar a resposta de volta em R0. Todos os bits que estavam em
R0 serão copiados de volta para R0, exceto o terceiro bit. Quer o terceiro bit estivesse ativado ou desativado
antes, agora ele estará desativado. R0 agora conterá 0100 0101, o código ASCII para 'E.' Isso funciona para
todos os códigos de letras ASCII devido à forma como o ASCII foi projetado.

Aqui está uma imagem mais simples do tipo de barramento para o ANDer.
Machine Translated by Google
Machine Translated by Google

O ORER

O ORer recebe dois bytes de entrada e OR cada bit desses dois em um terceiro
byte. Como você pode ver, os oito bits do barramento de entrada 'a' estão
conectados ao lado superior de oito portas OR. Os oito bits do barramento
de entrada 'b' estão conectados ao lado inferior das mesmas oito portas OR. As
saídas das oito portas OR são a saída do barramento 'c' deste conjunto. Com isso,
podemos OR dois bytes juntos para formar um terceiro byte.

Qual a utilidade disso? Existem muitos, mas aqui está um deles. Digamos que
você tenha o código ASCII para a letra 'E' em R0, 0100 0101. Se quiser que esta letra
fique minúscula, você pode colocar o padrão de bits 0010 0000 em R1 e então OR R0
e R1 e colocar a resposta de volta em R0. O que vai acontecer?
Todos os bits de R0 serão copiados de volta para R0 como estavam, exceto que
o terceiro bit agora estará ativado, não importa o que tenha sido. R0 agora será
0110 0101, o código ASCII para 'e.' Isso funcionará independentemente do código
de letras ASCII em R0 devido à forma como o ASCII foi projetado.

Aqui está uma imagem mais simples do tipo de barramento para o ORer.
Machine Translated by Google
Machine Translated by Google

O ORER EXCLUSIVO

O XORer recebe dois bytes de entrada e faz um XOR de cada bit desses dois em
um terceiro byte. Como você pode ver, os oito bits do barramento de entrada 'a' estão
conectados ao lado superior de oito portas XOR. Os oito bits do barramento de
entrada 'b' estão conectados ao lado inferior das mesmas oito portas XOR. As saídas
das oito portas XOR são a saída do barramento 'c' deste conjunto. Com isso,
podemos XOR dois bytes juntos para formar um terceiro byte.

Qual a utilidade disso? Novamente, pessoas imaginativas criaram muitos usos. Mas
aqui está um deles. Digamos que você tenha um código em R1 e outro código em
R2. Você quer descobrir se esses dois códigos são iguais. Então você XOR R1 e
R2 em R1. Se R1 e R2 contivessem os mesmos padrões, então R1 agora será
totalmente zero. Não importa qual padrão de 0s e 1s estava em R1, se R2 continha o
mesmo padrão, após um XOR, R1 será todo zeros.

Como as entradas e a saída são todas de oito fios, simplificaremos usando nossa
imagem de tipo de barramento.
Machine Translated by Google
Machine Translated by Google

O ADICIONADOR

Esta é uma combinação de portas surpreendentemente simples considerando o


que faz. Em nosso sistema numérico binário, temos números no intervalo de 0 a 255
representados em um byte. Se você pensar em como a adição é feita com dois de
nossos números decimais regulares, comece adicionando os dois números na coluna
da direita. Como os dois números podem estar entre 0 e 9, a soma desses dois
estará entre 0 e 18. Se a resposta estiver entre 0 e 9, escreva-a abaixo dos
dois números. Se a resposta for de 10 a 18, você anota o dígito da direita e
carrega o 1 para somar na próxima coluna à esquerda.

No sistema numérico binário, na verdade é muito mais simples. Se você fizer o


mesmo tipo de adição em binário, os dois números na coluna da direita podem
ser cada um apenas 0 ou 1. Assim, as únicas respostas possíveis para adicionar a
coluna da direita de dois números binários serão 0, 1 ou 10 (zero, um ou dois). Se
você adicionar 0+0, obterá 0, 1+0 ou 0+1, obterá 1,1+1, obterá o na coluna da
direita e carregará 1 para a coluna da esquerda.

Os portões que descrevemos podem fazer isso facilmente. Um XOR dos dois
bits nos dirá qual deve ser a resposta da coluna da direita, e um AND dos dois bits
nos dirá se precisamos carregar 1 para a coluna da esquerda. Se um bit estiver
ativado e o outro desativado, ou seja, estamos somando 1 e 0, a resposta para a
coluna da direita será 1. Se ambos os números forem 1, ou ambos os
números forem o, a coluna da direita será ó. A porta AND é ativada apenas no
caso em que ambos os números de entrada são 1.
Machine Translated by Google

Portanto, adicionamos a coluna certa facilmente. Agora queremos adicionar a


próxima coluna à esquerda. Deveria ser igual, certo? Existem dois bits que podem
ser 0 ou 1, mas desta vez também temos a possibilidade de um carry da coluna
anterior. Então não é a mesma coisa, desta vez estamos realmente somando três
números, os dois bits nesta coluna, mais o possível carry da coluna anterior.

Ao somar três bits, as respostas possíveis são 0, 1, 10 ou 11 (zero, um, dois ou


três). É mais complexo, mas não impossível. Aqui está a combinação
que faz isso:

O XOR esquerdo nos diz se 'a' e 'b' são diferentes. Se estiverem, e 'carry in' estiver
desativado, ou se 'a' e 'b' forem iguais e 'carry in' estiver ativado, então o XOR
direito gerará 1 como a soma da coluna atual. A porta AND inferior irá
Machine Translated by Google

ative 'realizar' se ambas as entradas estiverem ativadas. A porta AND superior ativará
'carry out' se 'carry in' e uma das entradas estiver ativada. Esta é a simplicidade de como
os computadores fazem adição! Agora que vemos que funciona, podemos fazer uma
imagem mais simples:

Para fazer um somador que some dois bytes, precisamos de um somador de um bit
para cada bit dos bytes, com a saída de transporte de cada bit conectada à entrada de
transporte do próximo. Observe que cada bit tem um carry, até mesmo o primeiro bit
(a coluna da direita). Isso é usado quando queremos adicionar números que podem ser
maiores que 255.

E a imagem simplificada com entradas e saídas de barramento:


Machine Translated by Google

O bit de saída de transporte da coluna mais à esquerda (superior) será ativado se a soma
dos dois números for maior que 255 e esse bit será usado em outro lugar no computador.

É assim que os computadores fazem adições, apenas cinco portas por bit, e o computador
pode fazer aritmética!
Machine Translated by Google

O COMPARADOR E O ZERO

Todas as coisas que descrevemos acima recebem um ou dois bytes como entrada e
geram um byte de saída. Os shifters e o somador também geram um bit extra de saída
relacionado ao seu byte de saída. O comparador gera apenas dois bits de saída, não um
byte inteiro.

Na verdade, o comparador está embutido no XORer porque pode fazer uso das portas que
já estão lá. O XORer gera seu byte de saída e o comparador gera seus dois bits. Essas
duas funções não estão realmente relacionadas entre si, apenas é fácil construí-las dessa
maneira.

O que queremos que o comparador faça é descobrir se os dois bytes no barramento de


entrada são exatamente iguais e, se não, se aquele no barramento 'a' é maior de acordo
com o sistema numérico binário.

A igualdade é muito simples. As portas XOR são desligadas quando as entradas são iguais;
portanto, se todas as portas XOR estiverem desligadas, as entradas serão iguais.

Determinar o maior de dois números binários é um pouco mais complicado. Você tem que
começar com os dois bits superiores e, se um estiver ativado e o outro desativado, o que
estiver ativado será o número maior. Se eles forem iguais, você deverá verificar o próximo
par de bits inferior, etc., até encontrar um par em que sejam diferentes. Mas depois de
encontrar um par diferente, você não deseja verificar mais nenhum bit. Por exemplo, 0010
0000 (32) é maior que 0001 1111 (31). Os primeiros dois bits são iguais em ambos os bytes.
O terceiro bit está ativado no primeiro byte e desativado no segundo e, portanto, o primeiro
byte é maior.
Embora o restante dos bits esteja ativado no segundo byte, seu total é menor que o bit ativado
no primeiro byte.

É isso que queremos que aconteça, e são necessários cinco portões vezes oito posições
para conseguir isso. Como estamos começando com o XORer, adicionaremos mais quatro
portas a cada posição, conforme mostrado neste diagrama. Lembre-se, no somador,
tínhamos um bit de transporte que passava da posição do bit mais baixo até o bit mais alto.
No comparador, temos dois bits que passam da posição de bit mais alta para a mais
baixa.

Aqui está um pouco do comparador. Você pode ver a porta XOR original, rotulada
como '1', conectada a um bit de cada barramento de entrada à esquerda, e
Machine Translated by Google

gerando um bit para o barramento de saída à direita.

Se a saída da porta 1 estiver ligada, isso significa que 'a' e 'b' são diferentes ou
desiguais. Adicionamos o portão 2, que será ativado quando 'a' e 'b' forem iguais.

Se a porta 2 estiver ligada em todas as posições, então a porta 3 também estará ligada
em todas as posições, e o bit que sai da parte inferior nos diz que os dois bytes de
entrada são iguais.

O portão 4 é ativado se três coisas forem verdadeiras. 1) Os bits 'a' e 'b' são diferentes.
2) O bit 'a' é aquele que está ativado. 3) Todos os bits acima deste ponto foram iguais.
Quando a porta 4 é ligada, ela liga a porta 5, e ela liga todas as outras portas 5 abaixo
deste ponto e, portanto, a saída 'maior' do comparador.

Quando o byte 'b' é o maior, tanto o bit 'igual' quanto o bit 'maior' estarão desativados.

Você empilha oito desses comparadores de bits como no diagrama a seguir, com um '1' e
um '0' conectados ao superior para começar. Você ainda tem a função XOR saindo em 'c'
e agora os dois bits comparadores na parte inferior.
Machine Translated by Google

Simplificando novamente, voltaremos ao diagrama XOR tipo barramento, e apenas


adicionaremos os dois novos bits de saída do comparador.

Há mais uma coisa que precisaremos em nosso computador que nos fornecerá mais
informações. Esta é uma combinação simples de portas que recebe um byte inteiro como
entrada e gera apenas um bit como saída. O bit de saída é ativado quando todos os bits
do byte estão desativados. Em outras palavras, o bit de saída nos informa quando o conteúdo
do byte é totalmente zero.

É simplesmente uma porta OR de oito entradas e uma porta NOT. Quando qualquer uma das
entradas da porta OR estiver ligada, sua saída estará ligada e a saída da porta NOT estará
desligada. Somente quando todas as oito entradas do OR estiverem desligadas e sua saída estiver
Machine Translated by Google

portanto desligado, a saída da porta NOT estará ligada. A representação mais


simples do barramento é mostrada à direita.
Machine Translated by Google

LÓGICA

O tema do pensamento tem sido objeto de muito estudo e especulação ao longo dos
tempos. Houve um homem na Grécia antiga chamado Aristóteles que trabalhou muito
nesta área. Ele deve ter conhecido muitas pessoas ilógicas em sua vida, porque inventou
um assunto que deveria ajudar as pessoas a pensarem com mais sensatez.

Uma de suas idéias era que, se você tiver dois fatos, poderá derivar um terceiro fato dos
dois primeiros. Na escola, por vezes, fazem testes que apresentam dois factos, depois dão-
te um terceiro facto e perguntam se o terceiro facto é “lógico” com base nos dois
primeiros. Você pode se lembrar de perguntas como:

Se Joe é mais velho que Bill,


e Fred é mais velho que Joe,
então Fred é mais velho que Bill. Verdadeiro ou falso?

Ou

As crianças gostam de doces.


Jane é uma criança.

Portanto Jane gosta de doces. Verdadeiro ou falso?

Aristóteles chamou seu estudo desse tipo de coisa de 'Lógica'

A única relevância que isto tem para a nossa discussão sobre computadores é a
palavra “lógica”. A lógica de Aristóteles envolvia dois fatos formando um terceiro fato.
Muitas de nossas peças de computador, como portas AND, pegam dois bits e formam
um terceiro bit, ou oito portas AND pegam dois bytes e formam um terceiro byte. E assim,
as coisas que esses portões fazem passaram a ser conhecidas como lógica. Talvez
haja lógica AND e lógica OR e lógica XOR, mas o termo geral para todas elas é lógica.

ANDing, ORing e XORing levam dois bytes para formar um terceiro, então eles se encaixam
muito bem nessa definição de lógica. Shifting e NOTing também passaram a ser
conhecidos como lógica, embora usem apenas um byte de entrada para gerar sua
saída. O ADDer, embora tenha duas entradas e também seja muito lógico, de alguma
forma não é conhecido por estar na categoria de lógica, está em sua própria categoria,
aritmética.
Machine Translated by Google

Portanto, todas as maneiras que descrevemos acima de fazer coisas


com bytes estão sob o título de 'aritmética e lógica'
Machine Translated by Google

A UNIDADE ARITMÉTICA E LÓGICA

Agora construímos sete dispositivos diferentes que podem fazer aritmética ou lógica
em bytes de dados. Vamos pegar todos esses sete dispositivos, colocá-los juntos
em uma unidade e fornecer um método para selecionar qual desses dispositivos
queremos usar em um determinado momento. Isso é chamado de "Unidade Aritmética
e Lógica" ou "ALU", abreviadamente.
Machine Translated by Google

Todos os sete dispositivos estão conectados à entrada 'a', os dispositivos que possuem duas
entradas também estão conectados à entrada 'b'. Todos os sete dispositivos estão sempre
conectados às entradas, mas cada saída está conectada a um desses ativadores. Os fios
que ligam os habilitadores são conectados às saídas de um decodificador, portanto apenas
um habilitador pode estar ligado por vez. Sete das saídas do decodificador permitem que um
único dispositivo continue na saída comum, 'c.' A oitava saída do decodificador é usada
quando você não deseja selecionar nenhum dispositivo. Os três fios de entrada do
decodificador são rotulados como 'op' porque escolhem a 'operação' desejada. A única
pequena complicação aqui são os bits de transporte do somador e os bits de 'deslocamento
para dentro' e 'deslocamento para fora' dos shifters.
Eles são usados de maneiras muito semelhantes e, a partir de agora, nos referiremos a todos
eles como carry bits. O somador e ambos os shifters recebem o carry como entrada e
geram o carry como saída. Assim, as três entradas de transporte são conectadas a
uma única entrada da ALU, e uma das três saídas é selecionada junto com a saída do
barramento do seu dispositivo. Observe a saída mais à direita do decodificador 3X8 acima e
veja que ela habilita tanto o barramento somador quanto o bit de transporte do somador.

O que temos aqui? É uma caixa que possui duas entradas de barramento, uma saída de
barramento e outros quatro bits de entrada e outros quatro bits de saída. Três dos bits de
entrada selecionam qual “operação” ocorrerá entre os barramentos de entrada e saída.
Novamente, agora que sabemos o que contém e como funciona, não precisamos mostrar
todas as suas partes. Aqui está uma maneira simplificada de desenhá-lo:

Observe que as três entradas de bit único identificadas como “op” acima podem ter oito
combinações diferentes. Sete dessas combinações selecionam um dos dispositivos
descritos anteriormente. A oitava combinação não seleciona nenhum byte de saída, mas os
bits 'a maior' e 'igual' ainda funcionam, como sempre, então este é o código a ser escolhido
se você quiser apenas fazer uma comparação.

A combinação de bits em 'op' significa alguma coisa. Isso soa como outro código. Sim, aqui
está um código de três bits que utilizaremos em breve.
Machine Translated by Google

A Unidade Aritmética e Lógica é o centro, o coração do computador.


É aqui que toda a ação acontece. Aposto que isso é muito menos complicado do
que você pensava.
Machine Translated by Google

MAIS DO PROCESSADOR

Precisamos de mais um pequeno dispositivo. É uma coisa muito simples, tem uma
entrada de barramento, uma saída de barramento e mais um bit de entrada. É
muito semelhante a um facilitador. Sete dos bits passam pelas portas AND e um
deles passa pela porta OR. A entrada de bit único determina o que acontece quando um
byte tenta passar por este dispositivo. Quando o bit 'barramento 1' está desligado, todos
os bits do barramento de entrada passam inalterados para o barramento de saída.
Quando o bit 'barramento 1' está ativado, o byte de entrada é ignorado e o byte de saída
será 0000 0001, que é o número l em binário. Chamaremos este dispositivo de
'barramento 1' porque ele colocará o número 1 em um barramento quando precisarmos dele.

Agora podemos colocar este 'barramento 1' e a ALU na CPU. Vamos mudar onde
os fios entram e saem da ALU para que se ajuste melhor ao nosso diagrama. As
entradas do barramento ficam na parte superior, a saída do barramento sai na parte
inferior e todos os bits de entrada e saída estão à direita.
Machine Translated by Google

A saída da ALU está conectada ao ACC. O ACC recebe e armazena


temporariamente o resultado da operação mais recente da ALU. A saída do ACC é então
conectada ao barramento, para que seu conteúdo possa ser enviado para outro lugar,
conforme necessário.

Quando queremos fazer uma operação ALU de uma entrada, temos que definir os três bits
'op' da ALU para a operação desejada, habilitar o registro que desejamos no barramento e
definir a resposta em ACC.

Para uma operação ALU de duas entradas, existem duas etapas. Primeiro habilitamos um
dos registradores no barramento e configuramos-o em TMP. Em seguida, habilitamos o
segundo registro no barramento, escolhemos a operação da ALU e configuramos a
resposta em ACC.

Como você pode ver, agora podemos mover bytes de dados de e para a RAM, de e para os
registradores, através da ALU para o ACC, e de lá, para um registrador ou RAM se ativarmos
e definirmos os bits apropriados. no tempo certo. Isto é o que acontece dentro dos
computadores. Isso não é tão complicado, não é?

Só falta uma coisa aqui, e isso tem a ver com todos esses bits de controle nos
registradores, ALU e RAM. A RAM possui três bits de controle, um para definir MAR, um
para definir a entrada do byte atualmente selecionado e um para ativar a saída do byte
atualmente selecionado. Cada um dos registradores, R0, R1, R2, R3 e ACC possui um bit
definido e um bit habilitado, TMP possui apenas um bit definido, o barramento 1 possui um bit definido.
Machine Translated by Google

bit de controle, e a ALU possui esses três bits 'op' que selecionam a operação
desejada.
Precisamos de algo que ligue e desligue todos esses bits de controle nos
momentos apropriados para que possamos fazer algo que seja útil. Agora é
hora de olhar para a caixa chamada 'Seção de Controle'.
Machine Translated by Google

O RELÓGIO

Precisamos ligar e desligar os bits de controle apropriados nos momentos


apropriados. Veremos os bits apropriados mais tarde, primeiro veremos os
momentos apropriados.

Aqui está um novo tipo de desenho, chamaremos de gráfico. Mostra como um bit
muda com o tempo. O tempo começa à esquerda e avança para a direita.
A linha no gráfico tem duas posições possíveis: para cima significa que o bit está ativado e para baixo
significa que o bit está desativado.

Este gráfico mostra o bit 'X' ligando e desligando regularmente. Poderia haver uma
escala de tempo na parte inferior para mostrar o quão rápido isso está
acontecendo. Se toda a largura da página representasse um segundo, então o
bit 'X' seria ativado e desativado cerca de oito vezes por segundo. Mas não
precisaremos de uma escala de tempo nestes gráficos, pois estaremos preocupados
apenas com o tempo relativo entre dois ou mais bits. A velocidade em um
computador real será muito rápida, como o bit ligando e desligando um bilhão de vezes por segundo.

Quando algo repete alguma ação regularmente, uma dessas ações,


individualmente, é chamada de ciclo. O gráfico acima mostra cerca de oito ciclos.
Você pode dizer que de uma vez que o bit é ligado até a próxima vez que o bit é ligado
é um ciclo, ou você pode dizer que do meio do tempo desligado até o meio do
próximo tempo desligado é o ciclo, contanto que o ciclo começa em um ponto no
tempo quando o bit está em algum estágio de sua atividade e continua até que o bit
retorne ao mesmo estágio de atividade novamente. A palavra 'Ciclo' vem da palavra
'círculo', então quando a broca completa o círculo, isso é um ciclo.

Houve um cientista que viveu na Alemanha em 1800 que fez algumas das primeiras
pesquisas que levaram ao rádio. Seu nome era Heinrich Hertz e, entre outras
coisas, ele estudou eletricidade que ligava e desligava muito rapidamente. Algumas
décadas após sua morte, decidiu-se usar seu nome para descrever a rapidez com
que a eletricidade ligava e desligava, ou quantos ciclos
Machine Translated by Google

ocorreu por segundo. Assim, um Hertz (ou Hz, para abreviar) significa que a
eletricidade liga e desliga uma vez por segundo. 500 Hz significa 500 vezes por
segundo. Para velocidades mais rápidas, voltamos a encontrar essas línguas
antigas, e mil vezes por segundo é chamado de quilohertz ou kHz, para abreviar.
Ligar e desligar um milhão de vezes por segundo é chamado de megahertz, ou
mHz, para abreviar, e um bilhão de vezes é chamado de gigahertz, ou gHz, para abreviar.

Cada computador possui um bit especial. Todos os outros bits em um computador


vêm de algum lugar e são ativados e desativados por outros bits ou interruptores.
Este bit especial liga e desliga sozinho. Mas não há nada de misterioso nisso,
apenas liga e desliga com muita regularidade e rapidez. Este bit especial é construído
de forma muito simples, assim:

Isso parece uma coisa boba de se fazer. Basta conectar a saída de uma porta NOT
de volta à sua entrada? O que isso fará? Bem, se você começar com a
saída ligada, a eletricidade volta para a entrada, onde entra na porta que desliga a
saída, que volta para a entrada que liga a saída. Sim, este portão irá ligar e desligar
o mais rápido possível. Na verdade, isso será rápido demais para ser usado para
qualquer coisa e, portanto, pode ser desacelerado apenas alongando o fio que
forma o laço.

O diagrama simplificado mostra que este é o bit especial do computador que possui
uma saída, mas não possui nenhuma entrada.

Esta parte tem um nome. É chamado de relógio. Agora geralmente pensamos em


um relógio como algo com mostrador e ponteiros, ou alguns números em uma tela, e
vimos esses relógios no canto da tela de um computador. Infelizmente,
Machine Translated by Google

alguém chamou esse tipo de bit de relógio, e o nome ficou com os pioneiros da
computação. Poderia ter sido chamado de batida de tambor, ou marca-passo, ou coração,
ou seção rítmica, mas eles o chamavam de relógio. É isso que queremos dizer quando
dissermos relógio no restante deste livro. Acho que é um relógio que funciona, mas não
tem mostrador. Se quisermos falar sobre o tipo de relógio que indica que horas são, vamos
chamá-lo de 'relógio da hora' ou 'relógio TOD', para abreviar. Mas a palavra 'relógio'
significará esse tipo de bit.

Com que rapidez esse relógio liga e desliga? Hoje em dia, é bem mais de um bilhão
de vezes por segundo, ou vários gigahertz. Esta é uma das principais características
que as empresas de informática apresentam para mostrar como seus computadores
são excelentes. Quando você vê computadores à venda, a velocidade que eles anunciam
é a velocidade do seu clock. Quanto mais rápido for um computador, mais caro ele será,
porque pode fazer mais coisas em um segundo. É a velocidade desse único bit ligando e
desligando que define o ritmo de todo o computador.

Para mover dados através do barramento, precisamos primeiro habilitar a saída de um e


apenas um registro, para que sua eletricidade possa viajar através do barramento até as
entradas de outros registros. Então, enquanto os dados estão no barramento, queremos
ativar e desativar o bit definido do registrador de destino. Como o registrador de destino
captura o estado do barramento no instante em que o bit definido é desativado, queremos
ter certeza de que ele será desativado antes de desligarmos o bit de ativação no primeiro
registrador para garantir que não haja problemas.

Vamos primeiro anexar um pedaço de fio à saída do relógio. Isso atrasará um pouco a
eletricidade. Queremos que seja adiado cerca de um quarto de ciclo.

Se mostrarmos a saída do clock original (clk) e a saída do clock atrasada (clk d) em um


gráfico, elas ficarão assim:
Machine Translated by Google

Agora vamos fazer algo bastante simples. Pegaremos o relógio original e o relógio
atrasado, e ambos AND e OR para criar dois novos bits, assim:

Um dos novos bits está ativado quando 'clk' ou 'clk d' estão ativados, e o outro novo
bit está ativado somente quando 'clk' e 'clk d' estão ativados. O gráfico das
entradas e saídas das portas AND e OR é mostrado aqui. Ambos ainda ligam e
desligam regularmente, mas um deles fica ligado por mais tempo do que desligado
e o outro fica desligado por mais tempo do que ligado. O horário do segundo está
bem no meio do horário do primeiro.

Observe que eles têm nomes, 'clk e', que significa clock enable, e 'clk s', que
significa clock set. E você sabe, esses dois bits têm o tempo perfeito para mover um
byte de dados de um registro, através do barramento, e para outro registro. Basta
conectar 'clk e' ao bit de ativação do registro 'from' e conectar 'clk s' ao bit set do
registro 'to'.

Aqui está um único ciclo liga/desliga desses dois bits.


Machine Translated by Google

Se você observar o tempo aqui, isso atende aos nossos requisitos de precisar
primeiro ativar a saída de um registro e, depois que os dados tiverem um pouco de
tempo para percorrer o barramento, ativar o bit definido do registro de destino e off
antes de desligar o bit de habilitação no primeiro registro.

É claro que esses bits de clock não podem ser simplesmente conectados
diretamente a cada registrador. Deve haver outras portas intermediárias, que
permitam que apenas um registro seja habilitado por vez, e apenas o(s) registro(s)
desejado(s) receba(m) um conjunto. Mas todas as ativações e configurações vêm
desses dois bits porque têm o tempo certo.

Como usaremos clk, clk e e clk s em todo o computador, este é o diagrama que
usaremos para mostrar o relógio:
Machine Translated by Google

FAZENDO ALGO ÚTIL

Digamos que queremos fazer algo útil, como somar um número a outro número.
Temos um número em R0 e há outro número em R1 que queremos adicionar ao
número em R0. O processador que construímos até agora possui todas as conexões
para fazer essa adição, mas será necessário mais de um ciclo de clock para fazê-lo.

No primeiro ciclo de clock, podemos habilitar R1 no barramento e configurá-lo em TMP.

No segundo ciclo podemos habilitar R0 no barramento, definir a ALU para ADD e


definir a resposta para ACC.

No terceiro ciclo, podemos habilitar o ACC no barramento e configurá-lo para Ro.

Agora temos o valor antigo de R0, mais R1 em R0. Talvez isso não pareça muito útil,
mas é um dos pequenos passos que os computadores realizam. Muitos desses
pequenos passos fazem com que o computador pareça capaz de fazer coisas muito
complexas.

Assim vemos que para o processador fazer algo útil são necessários vários passos.
Ele precisa ser capaz de executar ações em sequência. Precisamos de outra peça
dentro desta 'Seção de Controle'.
Machine Translated by Google

PASSO A PASSO

Este capítulo apresenta uma nova parte chamada "Stepper". Primeiro, descreveremos o stepper
completo, mostrando exatamente o que ele faz. Depois disso, veremos exatamente como ele é construído.
Se acontecer de você confiar em seu autor o suficiente para acreditar que tal stepper pode ser construído a
partir de portões, e você estiver com tanta pressa que queira pular a parte 'como ele é construído' do
capítulo, você ainda poderá entender o computador.

Aqui está um passo a passo completo.

Possui duas entradas. Um deles é chamado de 'clk', porque é aqui que conectamos um bit que está ligado
e desligado, como o bit de clock original. A outra entrada é chamada de 'reset', que é usada para
retornar o stepper à etapa um. Para saídas, ele possui vários bits, cada um dos quais será ativado
por um ciclo de clock completo e, em seguida, desativado, um após o outro. A saída denominada
'Etapa 1' é ativada para um ciclo de clock, depois 'Etapa 2' para o próximo ciclo de clock, etc. Um
stepper pode ser construído para ter quantas etapas forem necessárias para qualquer tarefa específica que
você deseja realizar. No caso deste computador que estamos construindo, sete passos são suficientes.
Quando a última etapa (7) é ativada, ela permanece ativada e o stepper não faz mais nada até que
o bit de reinicialização seja ativado brevemente, momento em que as etapas recomeçam, começando com
a 'Etapa 1'.

Aqui está um gráfico do bit de entrada 'clk' e das saídas de um stepper de sete passos.
Machine Translated by Google

Veja como o stepper é construído. Isso é feito usando alguns dos mesmos bits de memória
que usamos para fazer os registradores, mas eles estão organizados de maneira muito diferente.
Não vamos armazenar nada nesses bits, vamos utilizá-los para criar uma série de etapas.

O stepper consiste em vários bits de memória conectados em uma string, com a saída de um
conectado à entrada do próximo. Aqui está um diagrama que mostra a maior parte do
stepper:

Primeiro observe a série de bits de memória 'M' exatamente como os que usamos
anteriormente neste livro. Nesta imagem, há doze deles conectados entre si, com a
saída de um conectada à entrada do próximo, em toda a linha. A entrada para o primeiro bit
à esquerda está conectada a um local onde a eletricidade está sempre ligada, então
quando o bit definido daquele 'M' for ligado, esse 'M' receberá aquele estado ligado e o
passará para seu saída.
Machine Translated by Google

Se você olhar para os bits definidos desses 'M's, verá que os bits definidos dos 'M's pares estão
conectados a clk, e os bits definidos dos 'M's numerados ímpares estão conectados ao mesmo
relógio depois que ele passa uma porta NÃO. Este novo bit criado ao passar clk por uma porta NOT pode
ser chamado de 'not clk' e podemos mostrar ambos neste gráfico:

Então, o que acontecerá com esse monte de portões? Se você assumir que todos os 'M's começam no
estado desligado e depois iniciam 'clk' "tiquetaqueando", aqui está o que ele fará.

Na primeira vez que 'clk' for ativado, nada acontecerá, porque o bit definido do primeiro 'M' está
conectado a 'not clk', que está desativado quando 'clk' está ativado. Quando 'clk' dispara, 'not clk' é
ativado e o primeiro 'M' será ativado, mas nada acontecerá no segundo 'M' porque seu bit 'set' está
conectado a 'clk', que agora é desligado. Quando 'clk' voltar, o segundo 'M' aparecerá. À medida que
o relógio avança, o 'on' que entra no primeiro bit de memória descerá na linha, um bit para cada vez
que o relógio for ligado e um bit para cada vez que o relógio for desligado. Assim, dois bits são
ativados para cada ciclo de clock.

Agora, voltando ao diagrama de passo completo abaixo, o passo 1 vem de uma porta NOT conectada
à saída do segundo 'M.' Como todos os 'M's iniciam, o passo 1 permanecerá ativado até que o segundo
'M' seja ativado, momento em que o passo l terminará.
Para as etapas restantes, cada uma durará desde o momento em que seu lado esquerdo 'M' liga
até o momento em que seu lado direito 'M' liga. As portas AND para as etapas 2 a 6 têm ambas as
entradas ativadas quando o 'M' esquerdo está ativado e o 'M' direito está desativado. Se conectarmos a
saída de um 'M' e o NOT da saída de um 'M' dois espaços adiante em uma porta AND, sua saída
ficará ligada por um ciclo de clock completo. Cada um acende quando a entrada esquerda é ativada,
mas a entrada direita ainda não foi ativada. Isso nos dá uma série de bits que são ativados por um
ciclo de clock e depois desativados.

A única coisa que falta aqui é que os bits 'M' apareçam e permaneçam. Depois que todos estiverem
ligados, não haverá mais ação, apesar do tique-taque contínuo do relógio.
Portanto, precisamos de uma maneira de redefini-los para que possamos começar de novo. Nós temos
Machine Translated by Google

ter uma maneira de desligar a entrada do primeiro 'M' e, em seguida, ligar todos os bits
definidos ao mesmo tempo. Quando isso acontecer, o 'desligado' na entrada do primeiro
'M' percorrerá todos os 'M's o mais rápido possível. Adicionaremos uma nova entrada
chamada 'reset', que realizará essas coisas.

Quando ativamos 'reset', ele torna a entrada do primeiro bit 'M' um zero e ativa todos
os 'conjuntos' ao mesmo tempo para que o zero possa percorrer a linha de 'M's muito
rapidamente. A redefinição também recebe operação OR com a etapa l para que a
etapa l seja ativada imediatamente. Agora todos os bits estão desligados e iniciamos
outra sequência. A reinicialização só precisa ser ativada por uma fração de um ciclo de clock.

Para recapitular, este é um passo a passo. Possui duas entradas: um relógio e um reset.
Para saídas, possui vários bits, cada um dos quais será ativado por um ciclo de clock.
Na verdade, podemos fazer isso pelo tempo que for necessário, mas para os propósitos
deste livro, um stepper de sete estágios será suficiente. Haverá apenas um stepper
em nosso computador, iremos representá-lo com este diagrama simplificado.

Reposicionamos o bit Reset para o lado direito do diagrama e o conectamos à


última etapa (7) para que o stepper se reinicie automaticamente. Entretanto, o passo 7
não ficará ativado por muito tempo, porque ele se desliga assim que o zero consegue
passar pela sequência de 'M's. Isso significa que a etapa 7 não durará o suficiente
para ser usada em uma de nossas transferências de dados pelo barramento. Todas as
coisas que queremos realizar ocorrerão nas etapas 1 a 6.
Machine Translated by Google

TUDO ESTÁ SOB CONTROLE

Com o nosso relógio, temos uma batida para fazer as coisas andarem.
Possui uma saída básica e mais duas que visam facilitar a movimentação do
conteúdo dos registros de um para outro. Com o stepper, temos uma série de bits
que aparecem um após o outro, cada um durante um ciclo de clock.

Lembra do diagrama da CPU que vimos alguns capítulos atrás? Ele mostrou o
barramento, a ALU, seis registros e até a outra metade do computador (a RAM),
todos conectados de maneira muito organizada. Pelo menos todas as conexões
de ônibus estavam lá. Mas todos os registradores, a RAM, o Barramento 1 e
a ALU são controlados por fios que vêm daquela caixa misteriosa chamada
'Seção de Controle' sobre a qual nada sabemos ainda. Agora é hora de olhar
dentro dessa caixa.

Este desenho é o início da seção de controle do computador. No topo estão o


relógio e o stepper. Então, todos os bits de controle dos registradores e da
RAM foram reunidos aqui em um só lugar, com todos os bits de 'ativação' à esquerda
e todos os bits de 'definição' à direita. Em seguida, conectamos a saída de
uma porta AND a cada bit 'enable' e cada bit 'set'.
Uma entrada de cada porta AND é conectada a 'clk e' para 'ativar'
Machine Translated by Google

à esquerda, ou 'clk s' para os 'sets' à direita. Assim, se usarmos a outra entrada dessas
portas AND para selecionar qualquer um desses registradores, o bit 'enable' de todos
os itens à esquerda nunca será ativado, exceto durante o tempo 'clk e'. Da mesma
forma, à direita, o bit 'set' de qualquer um desses registradores só será ativado
durante o tempo de 'clk s'.

Isto é uma espécie de central telefônica. Tudo o que precisamos para fazer o
computador fazer alguma coisa está aqui, em um só lugar. Tudo o que precisamos
fazer é conectar alguns bits de controle a algumas etapas de maneira inteligente e
algo útil acontecerá.
Machine Translated by Google

FAZENDO ALGO ÚTIL, REVISITADO

Agora que temos o início da nossa seção de controle, podemos apenas adicionar
alguns fios e seremos capazes de fazer a simples adição que postulamos
anteriormente, a de adicionar R1 a R0.

Tudo o que precisamos fazer para “fazer algo útil”, como adicionar R1 a R0, é
conectar alguns fios no meio, conforme mostrado neste diagrama nas etapas quatro, cinco
e seis. Cada etapa faz com que algo aconteça com algumas das partes mostradas no
diagrama da CPU. Cada etapa é conectada a um 'habilitar' à esquerda e a um 'definir'
à direita e, portanto, faz com que uma parte conecte sua saída ao barramento e outra
parte salve o que agora aparece em sua entrada.
A etapa quatro está conectada ao R1 'enable' e ao TMP 'set'. A etapa cinco está
conectada a R0 'habilitar' e ACC 'definir'. Os bits 'op' da ALU não precisam de
nenhuma conexão, pois o código 'op' para ADD é 000. A etapa seis é conectada ao
ACC 'enable' e R0 'set'.

Durante a etapa quatro, R1 é habilitado e TMP é definido. O conteúdo de R1 viaja pelo


barramento (no diagrama da CPU) e é capturado pelo TMP.

Durante a etapa cinco, R0 é habilitado e ACC é definido. Se quiséssemos fazer


algo diferente de ADD, este é o passo em que ativaríamos o
Machine Translated by Google

bits de código 'op' apropriados da ALU.

Durante a etapa seis, ACC é habilitado e R0 é definido.

Aqui está um gráfico das etapas, mostrando quando cada registro é habilitado e
definir.

R0 agora contém a soma do conteúdo original de R0 mais R1.

É assim que o computador faz as coisas acontecerem em um balé rigidamente controlado de


bits e bytes movendo-se dentro da máquina.

Na etapa sete, o stepper é redefinido para a etapa 1, onde o processo se repete. É claro
que não é muito útil fazer essa adição repetidas vezes, mesmo se você começar com o
número 1 em R0 e R1, R0 chegará a 255 muito rapidamente.

Se o relógio do nosso computador bater um bilhão de vezes a cada segundo, também


conhecido como um gigahertz, e mesmo se usarmos vários ciclos de relógio para “fazer
algo útil” como isto, isso significa que o computador pode fazer algo assim centenas de
milhões de vezes. vezes em um segundo. Mas não queremos apenas adicionar R1 a R0
repetidamente.
Machine Translated by Google

Talvez agora que adicionamos R1 a R0, queiramos armazenar esse novo


número em um endereço específico na RAM, e R2 tenha esse endereço nele.
Novamente, nosso processador possui todas as conexões necessárias para fazer isso
e, novamente, será necessário mais de um ciclo de clock para fazer isso. No passo 4,
podemos mover R2 através da barra até MAR. Na etapa 5 podemos mover R0 através
do barramento para a RAM. Isso é tudo que é necessário, apenas dois ciclos de clock e pronto.

A fiação para esta operação é mais simples que a anterior, apenas duas habilitações e
dois conjuntos.

Existem muitas combinações de coisas que podemos fazer com a RAM, os seis
registradores e a ALU. Poderíamos obter um byte da RAM e movê-lo para qualquer
um dos quatro registradores, poderíamos mover qualquer um ou dois dos
registradores através da ALU e ADICIONÁ-los, AND, OR, XOR, etc.

Precisamos de uma maneira de nossa CPU fazer uma coisa uma vez e outra diferente
na próxima. A seção de controle precisa de algo que lhe diga o que fazer em cada
sequência.
Machine Translated by Google

O QUE SE SEGUE?

Agora, aqui está uma ideia assustadora. Imagine que o trabalho que um funcionário
realiza em um restaurante fast food seja dividido em seus elementos individuais. Vá
até o balcão e diga "Posso anotar seu pedido?" ouça a resposta, pressione o
botão "cheeseburger" na caixa registradora, etc. Agora digamos que existam 256 ou
menos ações individuais envolvidas no trabalho de tal estabelecimento. Você
poderia então inventar um código que associasse um dos estados de um byte a cada
uma das atividades individuais de um funcionário. Então você poderia expressar a
sequência de ações de um funcionário como uma sequência de bytes.

Primeiro criamos uma tabela de códigos. Escrevemos alguns códigos no lado esquerdo
da página. Então decidimos o que queremos que esses códigos signifiquem e
escrevemos esses significados ao lado dos códigos. Agora temos uma lista com todas
as ações possíveis que um funcionário pode realizar e um código que representa cada
uma delas:

0000 0000 = Caminhe até o balcão

0000 0001 = Diga "Posso anotar seu pedido?"


0000 0010 = Ouça a resposta

0000 0011 = Pressione o botão cheeseburger


0000 0100 = Pressione o botão de batatas fritas.

0000 0101 = Pressione o botão leite

0000 0110 = Pressione o botão total

0000 0111= Colete o dinheiro

0000 1000 = Dê o troco ao cliente

0000 1001 = Abra uma sacola vazia

0000 1010 = Coloque um cheeseburger no saco

0000 1011= Coloque as batatas fritas no saco

0000 1100 = Coloque um recipiente de leite no saco


Machine Translated by Google

0000 1101= Entregar a sacola ao cliente 1000 0000

= Ir para o número do passo nos 6 bits à direita.

0100 0000 = Se "sim", vá para o número da etapa nos 6 bits à direita.

0001 0000 = Vá para casa.

Agora, se quisermos descrever como o funcionário deve agir, escrevemos uma sequência de
eventos que ele deverá seguir:

1. 0000 0000 = Caminhe até o balcão.

2. 0000 0001 = Diga "Posso anotar seu pedido?"

3. 0100 0010 = Se o cliente não atender, vá para o passo 2.

4. 0000 0010 = Ouça a resposta.

5. 0100 0111 = Se o cliente não disser cheeseburger, vá para a etapa 7.

6. 0000 0011 = Pressione o botão cheeseburger.

7. 0100 1001 = Se o cliente não disser batatas fritas, vá para a etapa 9.

8. 0000 0100 = Pressione o botão de batatas fritas.

9. 0100 1011 = Se o cliente não disser leite, vá para o passo 11.

10. 0000 0101 = Pressione o botão leite.

11. 0100 1101 = Se o cliente disser que é tudo, vá para o passo 13.

12. 1000 0100 = Volte para a etapa 4.

13. 0000 0110 = Pressione o botão total.

14. 0000 0111 = Recolha o dinheiro.

15. 0000 1000 = Faça o troco e entregue ao cliente.

16. 0000 1001 = Abra uma sacola vazia.

17. 0101 0011 = Se o pedido não incluir cheeseburger, vá para o passo 19.

18. 0000 1010 = Coloque um cheeseburger no saco.

19. 0101 0110 = Caso o pedido não inclua batatas fritas, vá para o passo 22.
Machine Translated by Google

21. 0000 1011 = Coloque as batatas fritas no saco.

22. 0101 1000 = Se o pedido não incluir leite, vá para o passo 24.

23. 0000 1100 = Coloque um recipiente de leite no saco.

24. 0000 1101 = Entregar a sacola ao cliente.

25. 0101 1011 = Se for hora de encerrar, vá para o passo 27.

26. 1000 0001 = Volte para a etapa 1.

27. 0001 0000 = Vá para casa.

Espero que ninguém tente fazer com que os funcionários de um restaurante fast food aprendam
um código como este. As pessoas não aceitam ser tão mecanizadas. Mas talvez algum dia
alguém tente equipar um desses restaurantes com robôs. Nesse caso, os robôs
provavelmente funcionariam melhor usando esse tipo de código.

E o nosso computador poderá ser capaz de “entender” um código como este.


Machine Translated by Google

A PRIMEIRA GRANDE INVENÇÃO

O que precisamos é de alguma maneira de realizar operações diferentes de


uma sequência de passo para outra. Como poderíamos conectá-lo de uma
maneira para uma sequência e depois de uma maneira diferente para a
sequência seguinte? A resposta, claro, é usar mais portas. A fiação para uma
operação pode ser conectada ou desconectada com portas AND, e a fiação
para uma operação diferente pode ser conectada ou desconectada com mais
portas AND. E poderia haver uma terceira e quarta possibilidade ou mais. Contanto
que apenas uma dessas operações esteja conectada por vez, isso funcionará
bem. Agora temos diversas operações diferentes que podem ser feitas, mas
como selecionar qual delas será feita?

O título deste capítulo é “A Primeira Grande Invenção”, então qual é a


invenção? A invenção é que teremos uma série de instruções na RAM que
dirão à CPU o que fazer. Precisamos de três coisas para fazer isso funcionar.

A primeira parte da invenção é adicionar outro registro à CPU. Este registro será
chamado de "Registro de Instrução" ou "IR", abreviadamente. Os bits deste
registro irão “instruir” a CPU sobre o que fazer. O IR recebe sua entrada do
barramento e sua saída vai para a seção de controle da CPU, onde os bits
selecionam uma das várias operações possíveis.

A segunda parte da invenção é outro registro na CPU denominado "Registro de


Endereço de Instrução" ou "IAR", abreviadamente. Este registrador tem sua
entrada e saída conectada ao barramento assim como os registradores de uso
geral, mas este tem apenas uma finalidade, que é armazenar o endereço RAM
da próxima instrução que queremos mover para o IR. Se o IAR contiver 0000
1010 (10 decimal), então a próxima instrução que será movida para o IR será o
byte residente no endereço dez da RAM.

A terceira parte da invenção é uma fiação na seção de controle que usa o


stepper para mover a "instrução" desejada da RAM para o IR, adicionar 1 ao
endereço no IAR e executar a ação solicitada pela instrução que foi colocar no
IR. Quando essa instrução for concluída, o stepper será reiniciado, mas agora o
IAR teve 1 adicionado a ele, portanto, quando obtiver essa instrução da RAM, será
uma instrução diferente que estava localizada no seguinte endereço de RAM.
Machine Translated by Google

O resultado destas três partes é uma grande invenção. É isso que nos permite fazer com
que o computador faça muitas coisas diferentes. Nosso barramento, ALU, RAM e
registradores possibilitam muitas combinações. O conteúdo do IR determinará quais
registros serão enviados para onde e que tipo de aritmética ou lógica será feita sobre
eles. Tudo o que precisamos fazer é colocar na RAM uma série de bytes que representem
uma série de coisas que queremos fazer, uma após a outra.

Essa série de bytes residentes na RAM que a CPU utilizará é chamada de “programa”.

O básico que acontece aqui é que a CPU “busca” uma instrução na RAM e então
“executa” a instrução. Então ele busca o próximo e o executa. Isso acontece repetidamente,
milhões ou bilhões de vezes a cada segundo. Esta é a simplicidade do que um computador
faz.
Alguém coloca um programa na RAM, e esse programa, se projetado de forma
inteligente, faz com que o computador faça algo que as pessoas consideram útil.

O stepper neste computador possui sete etapas. O objetivo da etapa 7 é apenas redefinir
o stepper de volta à etapa 1. Portanto, há seis etapas durante as quais a CPU faz
pequenas coisas. Cada etapa dura um ciclo de clock. As seis etapas executadas
como um todo são chamadas de “Ciclo de Instrução”. São necessárias seis etapas
para que a CPU execute todas as ações necessárias para buscar e executar uma instrução.
Se assumirmos que nosso relógio atinge um gigahertz, então nosso computador será
capaz de executar 166.666.666 instruções a cada segundo.

Aqui está a imagem da CPU com os dois novos registros adicionados a ela. Lá eles estão
na Seção de Controle, conectados ao barramento. O IAR tem um 'set' e um 'enable', o IR
só tem um 'set', assim como o TMP e o MAR porque suas saídas não estão
conectadas ao barramento, então nunca precisamos desligá-las.
Machine Translated by Google

Abaixo está a fiação dentro da Seção de Controle que faz a parte de 'busca' do
ciclo de instrução. Ele usa as três primeiras etapas do stepper e é o mesmo
para todos os tipos de instruções.

As três primeiras etapas do stepper são mostradas aqui e resultam na 'busca'


da próxima 'instrução' da RAM. Em seguida, o restante das etapas
'executa' a 'instrução'. Exatamente o que será feito nas etapas 4, 5 e 6 é determinado por
Machine Translated by Google

o conteúdo da instrução que foi buscada. Então o stepper reinicia, busca a próxima
instrução e a executa.

A parte inferior deste diagrama inclui o Registro de Instrução. Observe que demos
números aos bits individuais do IR, de o à esquerda até 7 à direita. Estaremos nos
referindo aos bits individuais em breve.

Aqui estão os detalhes de como exatamente as etapas 1, 2 e 3 resultam na busca de uma


instrução em nosso pequeno computador:

O passo 1 é o mais complicado porque, na verdade, realizamos duas coisas ao


mesmo tempo. A principal coisa que queremos fazer é levar o endereço do IAR para
MAR. Este é o endereço da próxima instrução que queremos buscar na RAM.
Se você observar o fio que sai da etapa 1 do stepper, poderá ver que dois dos locais
aos quais ele está conectado são o 'habilitado' do IAR e o 'conjunto' do MAR.
Assim, o conteúdo do IAR será colocado no barramento durante 'clk e' e colocado
no MAR durante 'clk s.' Em algum momento durante o ciclo de instrução,
precisamos adicionar 1 ao valor em IAR e, como o IAR já está no barramento,
podemos muito bem fazer isso agora. Se não enviarmos nada para os bits 'op' da
ALU, todos eles serão zero, e como 000 é o código para ADD, a ALU estará fazendo
uma operação ADD em tudo o que estiver em suas duas entradas, e apresentando
a resposta para ACC. Uma entrada vem do barramento, que possui IAR durante
esse período. Se também ligarmos o bit 'bus 1' durante a etapa 1, a outra entrada
para a ALU será um byte com valor binário 1. Se ligarmos o 'set' de ACC durante 'clk
s', iremos capture a soma do IAR mais 1 no ACC. Acontece que este é o endereço
da instrução que desejaremos buscar depois de terminarmos a instrução atual!

A etapa 2 habilita o byte atualmente selecionado na RAM no barramento e o


configura em IR. Esta é a instrução que iremos ‘executar’ nos passos 4, 5 e 6
deste ciclo de instruções. No diagrama, você pode ver que o fio que vem da etapa 2
está conectado ao 'habilitar' da RAM e ao 'conjunto' do IR.

Na etapa 3, precisamos terminar a atualização do IAR. Adicionamos 1 na etapa 1,


mas a resposta ainda está no ACC. Ele precisa ser movido para o IAR antes do início
do próximo ciclo de instrução. Então você pode ver que o fio que sai da etapa 3
está conectado para 'habilitar' do ACC e 'definir' do IAR.

Quando chegamos ao passo 4, a instrução já foi movida do


RAM para IR, e agora as etapas 4, 5 e 6 podem fazer o que for solicitado pelo
Machine Translated by Google

o conteúdo do RI. Quando essa operação for concluída e o stepper for redefinido,
a sequência será reiniciada, mas agora o IAR teve 1 adicionado a ele, então a
instrução no próximo endereço de RAM será buscada e executada.

Essa ideia de colocar uma série de instruções na RAM e fazer com que a CPU
as execute é uma grande invenção.
Machine Translated by Google

INSTRUÇÕES

Agora temos esse novo registrador, chamado Registrador de Instrução, que


contém um byte que dirá à Seção de Controle o que fazer. Os padrões colocados
neste registro têm um significado. Parece outro código e, de fato, é. Este código será
denominado “Código de Instrução”.

Como estamos construindo este computador do zero, podemos inventar nosso próprio
código de instrução. Pegaremos os 256 códigos diferentes que podem ser colocados no
Registro de Instruções e decidiremos o que eles significarão. Então temos que
projetar a fiação dentro da unidade de controle que fará com que essas instruções façam
o que dissemos que fariam.

Você se lembra do código numérico binário? Dissemos que era a coisa mais próxima de
um código de computador “natural” porque se baseava no mesmo método que usamos
para o nosso sistema numérico normal. Depois houve o código ASCII, que acabou
de ser inventado por um monte de gente em uma reunião. Não há nada de natural no
ASCII, foi apenas o que aquelas pessoas decidiram que seria.

Agora temos o Código de Instrução, que também será um código totalmente inventado
– nada de natural nisso. Muitos códigos de instrução diferentes foram inventados para
muitos tipos diferentes de computadores. Não estudaremos nenhum deles aqui, nem
você precisará estudar nenhum deles posteriormente, a menos que pretenda seguir
uma carreira altamente técnica onde isso for necessário. Mas todos os códigos de
instrução são semelhantes, pois são eles que fazem o computador funcionar. O
único Código de Instruções neste livro será aquele que inventamos para o nosso
computador simples. A coisa mais importante na invenção do nosso Código de Instruções
será o quão simples podemos fazer a fiação que fará o código funcionar.

Quantas instruções diferentes poderiam existir? Como o registrador de instrução é


um byte, pode haver até 256 instruções diferentes.
Felizmente, teremos apenas nove tipos de instruções e todas as 256 combinações
se enquadrarão em uma dessas categorias. Eles são muito fáceis de descrever.

Todas as instruções envolvem a movimentação de bytes pelo barramento. As instruções


farão com que os bytes vão para ou da RAM, para ou dos registradores e, às vezes,
Machine Translated by Google

através da ALU. Nos capítulos seguintes, para cada tipo de instrução,


veremos os bits dessa instrução, as portas e a fiação necessária para
fazê-la funcionar e outro código útil que podemos usar para facilitar
a escrita de programas.
Machine Translated by Google

A INSTRUÇÃO DE ARITMÉTICA OU LÓGICA

Este primeiro tipo de instrução é o tipo que usa a ALU como nossa operação
ADD anterior. Como você se lembra, a ALU pode fazer oito coisas e, para algumas
delas, ela usa dois bytes de entrada, para outras, usa apenas um byte de entrada.
E em sete desses casos, possui um byte de saída.

Este tipo de instrução escolherá uma das operações da ALU e dois registradores.
Esta é a instrução mais versátil que o computador pode executar. Na verdade,
tem 128 variações, já que são oito operações e quatro registros, e você
pode escolher duas vezes entre os quatro registros. Isto é oito vezes quatro vezes
quatro, ou 128 maneiras possíveis de usar esta instrução. Portanto, esta não é
apenas uma instrução, mas sim toda uma classe de instruções que usam a
mesma fiação para realizar o trabalho.
Aqui está o código de instrução para a instrução ALU. Se o primeiro bit no
registrador de instruções for 1, então esta é uma instrução ALU. Essa é a
simplicidade disso. Se o primeiro bit estiver ativado, os próximos três bits da instrução
serão enviados à ULA para informar o que fazer, os próximos dois bits escolherão
um dos registradores que será usado e os dois últimos bits escolherão o outro
registrador. que será usado.

Portanto, a Instrução ALU (1), para somar (000) o Registrador 2 (10) e o


Registrador 3 (11), e colocar a resposta no Registrador 3, seria: 1000 1011. Se
Machine Translated by Google

você colocou este código (1000 1011) na RAM no endereço 10, e definiu o IAR para
10, e iniciou o computador, ele iria buscar o 1000 1011 do endereço 10, colocá-lo no
IR, e então a fiação na seção de controle seria faça a adição de R2 e R3.

Se você escolher uma operação de entrada, como SHL, SHR ou NOT, o byte virá
do Reg A, passará pela ALU e a resposta será colocada no Reg B. Você pode
escolher ir de um registro para outro, como R1 a R3, ou optar por voltar de um registro
para o mesmo, como R2 a R2. Ao fazer esta última opção, o conteúdo original do
registro será substituído.

Para duas operações de entrada, Reg A e Reg B serão enviados para a ALU, e a
resposta será enviada para Reg B. Portanto, tudo o que estava no Reg B, que foi uma
das entradas da operação, será substituído pela resposta . Você também pode
especificar o mesmo registro para ambas as entradas. Isto pode ser útil, por exemplo,
se você quiser colocar todos os zeros no Registro 1, apenas XOR R1 com R1. Não
importa o que esteja em R1 para começar, todas as comparações de bits serão
iguais, o que torna a saída de todos os bits zero, que é colocada de volta em R1.

A operação CMP pega duas entradas e as compara para ver se são iguais e, caso
contrário, se a primeira é maior. Mas a operação CMP não armazena seu byte de
saída. Ele não substitui o conteúdo de nenhum byte de entrada.

A fiação na unidade de controle para a instrução ALU é bastante simples, mas há uma
coisa extra que será usada por muitos tipos de instruções que precisamos examinar
primeiro. Isso tem a ver com os registros. Em "Doing Something Useful
Revisited", usamos dois registros. Para utilizá-los, apenas conectamos a porta AND
de cada registro ao passo desejado do stepper.
Isso foi bom, mas na instrução ALU, e em muitas outras, existem bits no registrador de
instruções que especificam qual registrador usar. Portanto, não queremos nos conectar
diretamente a nenhum registrador, precisamos ser capazes de nos conectar a qualquer
um dos registradores, mas deixar que os bits da instrução escolham exatamente qual
deles. Aqui está a fiação da seção de controle que faz isso:
Machine Translated by Google

Olhe primeiro para o lado direito. Quando queremos definir um registro de uso geral,
conectamos o passo adequado a este fio que chamaremos de 'Reg B.' Como você pode
ver, 'elk s' está conectado a todas as quatro portas AND. 'Reg B' também está
conectado a todas as quatro portas AND. Mas cada uma dessas quatro portas AND
tem três entradas. A terceira entrada para cada porta AND vem de um decodificador
2x4. Você se lembra que uma e apenas uma saída de um decodificador está ativada
em um determinado momento, portanto, apenas um registro será realmente selecionado
para ter seu bit 'set' ativado. A entrada para o decodificador vem dos dois últimos
bits do IR, então eles determinam qual registro será definido por este fio denominado
'Reg B.' Se você olhar novamente para o gráfico dos bits do código de instrução da
ALU, verá que os dois últimos bits da instrução são os que determinam qual registro
você deseja usar para o Reg B.

O lado esquerdo da imagem é muito parecido com o lado direito, exceto que há dois de
tudo. Lembre-se de que em uma instrução ALU como ADD, precisamos habilitar dois
registradores, um de cada vez, para as entradas da ALU.
Os dois últimos bits da instrução também são usados para 'Reg B' à esquerda, e você
pode ver que 'elk e', 'Reg B' e um decodificador são usados para habilitar um registro
durante sua etapa adequada. Os bits 4 e 5 do IR são usados para habilitar 'Reg A'
durante sua etapa adequada, usando um decodificador separado e um fio chamado 'Reg A'
As saídas dessas duas estruturas são combinadas em OR antes de ir para o
Machine Translated by Google

bits de habilitação de registro real. Nunca selecionaremos 'Reg A' e 'Reg B' ao mesmo
tempo.

O que acontece quando a instrução buscada começa com al?


Isso significa que esta é uma instrução ALU e precisamos fazer três coisas.
Primeiro queremos mover o 'Reg B' para TMP. Então queremos dizer à ALU qual operação
fazer, colocar 'Reg A' no barramento e definir a saída da ALU em ACC. Então queremos
mover o ACC para 'Reg B.'
O bit o do IR é aquele que determina se esta é uma instrução da ALU.
Quando o Bit o está ativado, ocorrem as coisas que o Bit o está conectado para fazer todas
as etapas de uma instrução ALU.

O próximo diagrama mostra as oito portas e os fios que são adicionados à Seção de
Controle que fazem com que as etapas 4, 5 e 6 de uma instrução ALU façam o que
precisamos que elas façam.

No diagrama abaixo, logo acima e à esquerda do IR, existem três portas AND. As saídas
dessas portas vão para os três fios 'op' na ALU que informam qual operação realizar. Cada
uma dessas três portas AND possui três entradas. Uma entrada de cada porta é conectada
ao bit o do IR. Uma segunda entrada de cada porta é conectada à etapa 5 do stepper. A
entrada restante de cada porta é conectada aos bits 1, 2 e 3 do IR.

Portanto, os três fios que vão para a ALU serão 000 o tempo todo, exceto durante a etapa 5,
quando o bit o do IR for 1. Nesse momento, os fios que vão para a ALU serão iguais
aos bits 1, 2 e 3 do IR.
Machine Translated by Google

O bit IR o continua no diagrama, vira para a direita e é conectado a um lado de mais


três portas AND. Os outros lados destes portões estão conectados aos Passos 4, 5
e 6.

A saída do primeiro portão é ativada durante o passo 4 e você pode vê-lo indo para dois
lugares. À esquerda, habilita 'Reg B' no barramento e, à direita, coloca o barramento em
TMP. Na verdade, esta etapa não é necessária para as operações SHL, SHR e NOT,
mas não prejudica nada e seria bastante complicada de se livrar, então, para
simplificar, deixaremos assim.

A segunda porta é ativada durante a etapa 5 (a mesma etapa em que a ALU recebe
seus pedidos), e indo para a esquerda está um fio que habilita o 'Reg A' no barramento.
A ALU agora tem uma entrada no TMP, a outra entrada no barramento e sua
operação especificada por esses três fios 'op', portanto, à direita está um fio que
define a resposta em ACC.

A terceira porta é ativada durante a etapa 6. O fio que vai para a esquerda habilita
o ACC no barramento, e o fio que vai para a direita coloca o barramento em 'Reg B.'

Há apenas uma situação especial em uma instrução ALU: quando a operação é CMP,
código 111. Para uma operação de comparação, não queremos armazenar nenhum
resultado de volta no 'Reg B.' Portanto, há três entradas AND
Machine Translated by Google

porta conectada aos bits IR 1, 2 e 3, que é então conectada a uma porta NOT e, em
seguida, a uma terceira entrada na porta AND que executa a etapa 6 da instrução
ALU. Portanto, quando a operação for 111, o primeiro AND será ativado, o NOT será
desativado e a saída da porta AND do Passo 6 não será ativada.

Esta instrução ALU agora está concluída. A etapa 7 redefine o stepper, que então
executa suas etapas novamente, buscando a próxima instrução, etc, etc.

Vamos inventar mais uma coisa aqui, que é uma forma abreviada de escrever instruções
da CPU em um pedaço de papel. No Código de Instruções, 1000 1011 significa “Adicionar
R2 a R3”, mas é preciso muita prática para uma pessoa olhar para 1000 1011 e pensar
imediatamente em adição e registros. Também seria necessária muita memorização
para pensar ao contrário, ou seja, se você quisesse fazer o XOR de dois registradores, qual
é o código de instrução para o XOR?
Seria mais fácil escrever algo como ADD R2,R3 ou XOR R1,R1.

Essa ideia de usar uma abreviação tem um nome e é chamada de linguagem de


computador. Assim, além de inventarmos um código de instrução, também inventaremos
uma linguagem de computador que represente o código de instrução. A
instrução ALU resulta nas primeiras oito palavras do nosso novo idioma.

Quando uma pessoa deseja escrever um programa de computador, ela pode escrevê-lo
diretamente no código de instrução ou usar uma linguagem de computador. É claro que,
se você escrever um programa em uma linguagem de computador, ele terá que ser
traduzido no código de instrução real antes de poder ser colocado na RAM e executado.
Machine Translated by Google

AS INSTRUÇÕES DE CARGA E ARMAZENAMENTO

As instruções de carregamento e armazenamento são bastante simples. Eles


movem um byte entre a RAM e um registrador. Eles são muito semelhantes entre si,
então abordaremos os dois em um capítulo.

Entraremos em detalhes dessas instruções em um momento, mas primeiro precisamos


de algo que nos diga quando temos uma instrução Load ou Store no Registro de
Instruções. Com a instrução ALU, tudo o que precisávamos saber era que o bit estava
ativado. O código para qualquer outro tipo de instrução começa com o bit o off,
portanto, se conectarmos uma porta NOT ao bit o, quando essa porta NOT for
ativada, isso nos dirá que temos algum outro tipo de instrução. Neste computador,
existem oito tipos de instruções que não são instruções ALU, portanto, quando o bit o
estiver desligado, usaremos os próximos três bits do IR para nos dizer
exatamente que tipo de instrução temos.

Os três bits que foram para a ALU em uma instrução da ALU também vão para um
decodificador 3x8 aqui na Seção de Controle. Como você se lembra, uma e apenas
uma das saídas de um decodificador está ligada o tempo todo, então teremos portas
AND nas saídas para evitar que qualquer saída vá a algum lugar durante uma
instrução ALU. Mas quando não é uma instrução ALU, a única saída do
decodificador que está ligada passará pela porta AND e, por sua vez, será
conectada a mais algumas portas que fazem a instrução apropriada funcionar.

No diagrama abaixo, você pode ver os bits IR 1, 2 e 3 entrando em um decodificador


que possui oito portas AND em suas saídas. O bit IR o tem uma porta NOT que vai
para o outro lado dessas oito portas AND. Este decodificador é utilizado para o resto
das instruções que nosso computador terá.
Machine Translated by Google

Este capítulo trata das instruções que utilizam as duas primeiras saídas do
decodificador, aquelas que acendem quando o IR inicia com 0000 ou 0001.

A primeira instrução move um byte da RAM para um registrador, isso é chamado


de instrução "Load". A outra faz o mesmo ao contrário, move um byte de um
registrador para a RAM e é chamada de instrução "Store".
Machine Translated by Google

O código de instrução para a instrução Load é 0000 e para a instrução Store é 0001. Os quatro
bits restantes em ambos os casos especificam dois registradores, assim como a instrução
ALU fez, mas neste caso, um registrador será usado para selecionar um dos os locais na RAM, e o
outro registro será carregado ou armazenado nesse local da RAM.

A etapa 4 é a mesma para ambas as instruções. Um dos registros é selecionado pelos bits 4 e 5 do
IR e é habilitado no barramento. O barramento é então colocado em MAR, selecionando assim um
endereço na RAM.

Na etapa cinco, os bits 6 e 7 do IR selecionam outro registro da CPU. Para a instrução Load, a RAM
é habilitada no barramento e o barramento é colocado no registro selecionado. Para a instrução
Store, o registro selecionado é habilitado no barramento e o barramento é colocado na RAM.

Cada uma dessas instruções precisa apenas de duas etapas para ser concluída; a etapa 6 não fará
nada.

Aqui estão duas novas palavras para nossa linguagem de computador:


Machine Translated by Google
Machine Translated by Google

A INSTRUÇÃO DE DADOS

Agora, aqui está uma instrução interessante. Tudo o que ele faz é carregar um byte da
RAM em um registrador como a instrução Load acima. O que é diferente nisso é onde
na RAM ele obterá esse byte.

Na instrução Data, os dados vêm de onde deveria estar a próxima instrução. Então
você pode considerar que esta instrução tem na verdade dois bytes! O primeiro byte é a
instrução e o próximo byte são alguns dados que serão colocados em um registrador.
Esses dados são fáceis de encontrar, pois no momento em que temos a instrução no
IR, o IAR já está atualizado e aponta direto para este byte.

Aqui está o código de instrução para a instrução de dados. Os bits de 0 a 3 são 0010.
Os bits 4 e 5 não são usados. Os bits 6 e 7 selecionam o registro que será carregado
com os dados que estão no segundo byte.

Tudo o que esta instrução precisa fazer é, na etapa 4, enviar IAR para MAR e, na etapa
5, enviar RAM para o registro desejado da CPU. No entanto, há mais uma coisa que
precisa acontecer. Como o segundo byte da instrução são apenas dados que podem
ser qualquer coisa, não queremos executar esse segundo byte como uma instrução.
Precisamos adicionar 1 ao IAR uma segunda vez para que ele pule este byte e aponte
para a próxima instrução. Faremos isso da mesma forma que nos passos 1 e 3. No passo
4, quando enviarmos IAR para MAR, iremos
Machine Translated by Google

aproveitando o fato de que a ALU está calculando o IAR mais alguma coisa ao mesmo tempo,
ligaremos o 'Barramento 1' e definiremos a resposta em ACC.
O passo 5 ainda move os dados para um Registrador, e no passo 6 podemos mover o ACC para
o IAR.

Aqui está outra palavra nova para nossa linguagem de computador:


Machine Translated by Google

A SEGUNDA GRANDE INVENÇÃO

A primeira grande invenção é a ideia de ter uma sequência de instruções na


RAM que são executadas uma a uma pela CPU. Mas nosso clock é muito rápido
e a quantidade de RAM que temos é limitada. O que acontecerá, em menos de
um segundo, quando tivermos executado todas as instruções na RAM?
Felizmente, não teremos que responder a essa pergunta, porque alguém
criou outro tipo de instrução que é tão importante que pode ser qualificada como
a segunda grande invenção necessária para permitir que o computador faça o
que faz. Devido ao arranjo versátil de nossa CPU e sua Seção de Controle,
é extremamente simples fazer isso funcionar, mas sua importância
não deve ser perdida por causa dessa simplicidade.
Esse novo tipo de instrução é chamado de instrução Jump, e tudo o que ela faz é
alterar o conteúdo do IAR, alterando assim a origem da próxima instrução na
RAM e das instruções subsequentes.
O tipo exato de instrução Jump descrito neste capítulo é chamado de
instrução "Jump Register". Simplesmente move o conteúdo do Reg B para o IAR.
Aqui está o código de instrução para isso:

O computador está executando uma série de instruções na RAM, uma após a


outra, e de repente uma dessas instruções altera o conteúdo do
Machine Translated by Google

IAR. O que acontecerá então? A próxima instrução a ser buscada não será a que segue a
última. Será aquele que estiver em qualquer endereço de RAM que foi carregado no IAR. E
continuará a partir desse ponto com o próximo, etc., até executar outra instrução de salto.

A fiação para a instrução Jump Register precisa apenas de uma etapa. Na etapa 4, o registro
selecionado é habilitado no barramento e configurado no IAR, e isso é tudo. Se quiséssemos
acelerar nossa CPU, poderíamos usar a etapa 5 para redefinir o stepper. Mas para
manter nosso diagrama simples, não nos preocuparemos com isso. As etapas 5 e 6 não farão
nada.

Aqui está outra palavra nova para nossa linguagem de computador:


Machine Translated by Google

OUTRA MANEIRA DE SALTAR

Este é outro tipo de instrução Jump. É semelhante à instrução Data porque usa dois bytes. Ele
substitui o IAR pelo byte que está na RAM imediatamente após o byte de instrução,
alterando assim a origem da próxima instrução e das subsequentes na RAM. Aqui está o
código de instruções para isso. Os bits 4, 5, 6 e 7 não são usados nesta instrução:

Este tipo exato de instrução de salto é chamado apenas de "Salto". É útil quando você sabe o
endereço para o qual deseja pular, quando estiver escrevendo o programa. A instrução Jump
Register é mais útil quando o endereço para o qual você deseja saltar é calculado conforme o
programa em execução e pode nem sempre ser o mesmo.

Uma das coisas que você pode fazer com uma instrução Jump é criar um loop de instruções
que são executadas continuamente. Você pode ter uma série de cinquenta instruções na RAM,
e a última instrução "salta" de volta para a primeira.

Assim como a instrução Data, o IAR já aponta para o byte que precisamos.
Ao contrário da Instrução de Dados, não precisamos adicionar 1 ao IAR uma segunda
vez porque iremos substituí-lo de qualquer maneira. Portanto, precisamos apenas de duas etapas.
Na etapa 4, enviamos IAR para MAR. Na etapa 5 movemos o byte de RAM selecionado para
o IAR. A etapa 6 não fará nada.

Aqui está a fiação que faz com que funcione:


Machine Translated by Google

Aqui está outra palavra nova para nossa linguagem de computador:


Machine Translated by Google

A TERCEIRA GRANDE INVENÇÃO

Aqui está a terceira e última invenção que transforma um computador em um computador.

Isto é exatamente como a instrução de salto, mas às vezes salta e às vezes não. É
claro que saltar ou não saltar são apenas duas possibilidades, por isso basta um
pouco para determinar o que acontecerá.
Principalmente o que vamos apresentar neste capítulo é de onde vem essa parte.

Você se lembra da parte 'Carry' que sai e volta para a ALU? Este bit vem do somador ou de
um dos shifters. Se você adicionar dois números que resultem em um valor superior a 255, o
bit de transporte será ativado. Se você deslocar para a esquerda um byte que tenha o bit
esquerdo ativado, ou deslocar para a direita um byte que tenha o bit direito ativado, essas
situações também ativarão o bit de execução da ALU.

Há também um bit que nos diz se as duas entradas da ALU são iguais, outro que nos
diz se a entrada A é maior e mais um bit que nos diz se a saída da ALU é toda zero.

Esses bits são as únicas coisas para as quais ainda não encontramos um lar na CPU. Esses
quatro bits serão chamados de bits "Flag" e serão usados para tomar a decisão de uma
instrução "Jump If" se ela executará a próxima instrução na RAM ou saltará para algum outro
endereço.

O que estamos tentando fazer com que o computador seja capaz de realizar é que ele primeiro
execute uma instrução ALU e, em seguida, tenha uma ou mais instruções "Jump If"
seguindo-a. O "Jump If irá saltar ou não dependendo de algo que aconteceu durante a
instrução da ALU.

É claro que, no momento em que o "Jump If" estiver sendo executado, os resultados da
instrução ALU já terão desaparecido. Se você voltar e observar os detalhes da instrução da
ALU, é somente durante a etapa 5 que todas as entradas adequadas vão para a ALU e a
resposta desejada sai. É neste momento que a resposta é definida no ACC. O tempo é o mesmo
para todos os quatro bits Flag, eles são válidos apenas durante a etapa 5 da instrução ALU.
Portanto, precisamos de uma maneira de salvar o estado dos bits Flag como estavam
durante a etapa 5 da instrução ALU.
Machine Translated by Google

Aqui está o último registro que iremos adicionar à CPU. Isso será chamado de
registrador FLAG, e usaremos apenas quatro bits dele, um para cada um dos
sinalizadores.

Os bits Flag da ALU são conectados à entrada deste registrador, e ele será definido
durante a etapa 5 da instrução ALU, assim como ACC, e permanecerá definido
dessa forma até a próxima vez que uma instrução ALU for executada. Assim, se
você tiver uma instrução ALU seguida por uma instrução “Jump If”, os bits
“Flag” podem ser usados para “decidir” se deve saltar ou não.

Cada ciclo de instrução usa a ALU na etapa 1 para adicionar 1 ao endereço da


próxima instrução, mas apenas a etapa 5 da instrução ALU possui uma conexão que
define os Flags. (Não mostramos esta conexão na fiação da instrução ALU porque
ainda não havíamos introduzido o Flag Reg, mas ele aparecerá no diagrama da
Seção de Controle completo.)

Esta combinação de bits Flag e a instrução Jump IF é a terceira e última grande


invenção que faz os computadores como os conhecemos hoje funcionarem.

Aqui está o código de instrução para uma instrução 'Jump If'. Os segundos quatro
bits da instrução informam à CPU qual flag ou flags devem ser verificados.
Você coloca um '1' no(s) bit(s) de instrução correspondente(s) ao(s) sinalizador(es)
que deseja testar. Se alguma das bandeiras que você testar estiver ativada, o
salto acontecerá. Este arranjo nos dá uma série de maneiras de decidir se devemos
Machine Translated by Google

pular ou não. Há um segundo byte que contém o endereço para o qual saltar, se
o salto for realizado.

Aqui está a fiação na seção de controle que faz a instrução Jump If funcionar.
Machine Translated by Google

A etapa 4 move IAR para MAR para que estejamos preparados para obter o 'Jump to
Address' que usaremos SE saltarmos. Mas como podemos não saltar, também precisamos
calcular o endereço da próxima instrução na RAM. E assim a etapa 4 também ativa o
Barramento 1 e define a resposta em ACC.

Na etapa 5, movemos ACC para IAR para que estejamos prontos para buscar a
próxima instrução SE não pularmos.

O passo 6 é onde a “decisão” é tomada. Moveremos o segundo byte da instrução da RAM


para IAR SE a terceira entrada para aquela porta AND estiver ativada.
Machine Translated by Google

Essa terceira entrada vem de uma porta OR com quatro entradas. Essas quatro entradas
vêm dos quatro bits do sinalizador após serem AND com os últimos quatro bits da
instrução Jump If no IR. Se, por exemplo, houver um '1' no bit 'Equal' da instrução, e o bit
do sinalizador 'Equal' estiver ativado, então o salto ocorrerá.

Aqui estão mais palavras para nossa linguagem de computador. 'J' significa pular, 'C
significa carregar, A' significa que A é maior, 'E' significa que A é igual a B e 'Z' significa
que a resposta é toda zeros. Aqui estão as palavras do idioma que testam uma única
bandeira:

Você também pode testar mais de um bit de sinalização ao mesmo tempo, colocando 1
em mais de um dos quatro bits. Na verdade, como existem quatro bits, existem 16
combinações possíveis, mas aquela com todos os quatro bits desativados não é útil
porque nunca irá saltar. Para completar, aqui estão o resto das possibilidades:
Machine Translated by Google
Machine Translated by Google

A INSTRUÇÃO DE BANDEIRAS CLARAS

Há um detalhe irritante que precisamos ter aqui. Ao fazer adição ou mudança, você
tem a possibilidade de ativar o sinalizador de transporte pela operação. Isso é necessário,
usamos para a instrução Jump If como no capítulo anterior.

O Carry Flag também é usado como entrada para as operações de adição e mudança.
O objetivo disso é que você possa adicionar números maiores que 255 e mudar bits de um
registro para outro.

O problema que surge é que se você estiver apenas adicionando dois números de
byte único, você não se importará com nenhum Carry anterior, mas o Carry Flag ainda
poderá ser definido a partir de uma operação anterior. Nesse caso, você pode adicionar
2+2 e obter 5!

Computadores maiores têm várias maneiras de fazer isso, mas para nós, teremos apenas
uma instrução Clear Flags que você precisa usar antes de qualquer adição ou mudança
onde um carry inesperado seria um problema.

Aqui está o código de instrução para esta instrução. Os bits 4, 5, 6 e 7 não são usados.

A fiação para isso é muito simples e um pouco complicada. Não habilitaremos nada
no barramento, portanto ele e a entrada 'A' da ALU serão todos zeros. Ligaremos o
'Barramento 1' para que a entrada 'B' seja 0000 0001. Não enviaremos uma
operação para a ALU, portanto ela estará no modo ADD. A ULA, portanto, estará somando
0 e 1, e pode haver uma entrada de transporte. A resposta então será
Machine Translated by Google

ou 0000 0001 ou 0000 0010. Mas não haverá saída de transporte, a resposta não
é zero e B é maior que A, então 'igual' e 'A maior' estarão desativados. Nós 'definimos'
o Flag Reg neste momento enquanto todos os quatro bits do Flag estão desligados.

Aqui está outra palavra para nossa língua.


Machine Translated by Google

TA DAA!

Agora conectamos a seção de controle de nossa CPU. Como resultado, podemos


colocar uma série de instruções na RAM, e o Clock, o Stepper, o Registrador
de Instruções e a fiação irão buscar e executar essas instruções. Aqui está
toda a seção de controle:
Machine Translated by Google

Sim, isso parece muito complicado, mas já analisamos cada parte disso. A única
coisa que tivemos que adicionar foram algumas portas OR porque a maioria dos
'habilita' e 'conjuntos' precisam de múltiplas conexões. Na verdade isso tem muito
Machine Translated by Google

menos peças que a RAM, mas isso era muito mais repetitivo. A maior parte da
bagunça aqui é apenas levar os fios de um lugar para outro.

O byte colocado no Registro de Instrução faz com que ocorra uma determinada
atividade. Cada padrão possível causa uma atividade diferente. Portanto, temos
um código onde cada um dos 256 códigos possíveis representa uma atividade
específica diferente.
Conforme mencionado, isso é chamado de Código de Instrução. Outro nome
para isso é “linguagem de máquina”, porque é a única linguagem (código)
que a máquina (computador) “entende”. Você "diz" à máquina o que fazer,
fornecendo-lhe uma lista de ordens que deseja que ela execute. Mas você tem que
falar a única língua que ele “entende”. Se você alimentá-lo com os padrões
corretos de ativação e desativação do tamanho de bytes, poderá fazê-lo fazer algo que será útil.

Aqui estão todos os códigos de instrução e nossa linguagem abreviada reunidos


em um só lugar.

Acredite ou não, tudo o que você já viu um computador fazer é simplesmente o


resultado de uma CPU executando uma longa série de instruções como as acima.
Machine Translated by Google

MAIS ALGUMAS PALAVRAS SOBRE ARITMÉTICA

Não queremos gastar muito tempo neste assunto, mas a única coisa que vimos
até agora que se parece com aritmética é o somador, por isso veremos exemplos
simples de aritmética um pouco mais complexa. Não para ensiná-lo a agir como um
computador, mas apenas para provar que funciona.

Aqui está como você faz a subtração. Isso é feito com o somador e as portas
NOT. Se você quiser subtrair R1 de R0, primeiro NÃO R1 volta para si
mesmo. Então você adiciona 1 a R1 e adiciona R0 a R1.

Isso mostra um exemplo de subtração de 21 de 37:

O último passo é somar 37 + 235, cuja resposta deveria ser 272. Mas um único
registrador não pode conter um número maior que 255. Portanto, o somador
Machine Translated by Google

ativa seu bit Carry e os oito bits restantes da resposta são 0001 0000, que é 16, a
resposta correta para 37 menos 21.

Por que NOTting e ADDing resultam em subtração? Por que você tem que adicionar
1 depois de NÃO? Por que você ignora a parte de transporte? Não tentaremos
responder a nenhuma dessas perguntas neste livro. Esses são os detalhes que
impedem poucos engenheiros de terem uma boa noite de sono. Essas pessoas
corajosas estudam esses problemas e projetam maneiras para que as pessoas
comuns não tenham que entendê-los.

Aqui está como você faz a multiplicação. Quando fazemos multiplicação com lápis e
papel no sistema decimal, você tem que lembrar da tabuada, você sabe, 3 vezes 8 é
igual a 24, 6 vezes 9 é igual a 54, etc.

Em binário, a multiplicação é muito mais fácil do que em decimal. 1 vezes 1 é igual


a 1, e para qualquer outra combinação, a resposta é o! Simplesmente não poderia
ser muito mais simples do que isso! Aqui está um exemplo de multiplicação de 5 vezes
5 com lápis e papel em binário.

Se você observar o que está acontecendo aqui, se o dígito direito do número inferior
for 1, você colocará o número superior na resposta. Então, para cada dígito à
esquerda, desloque o número superior para a esquerda e, se o dígito inferior
for 1, adicione o número superior deslocado à resposta. Quando você passar pelos
oito bits do número inferior, estará pronto.
Machine Translated by Google

Portanto, a multiplicação é realizada com o somador e os deslocadores. É simples


assim. Você pode escrever um programa simples como este:

R0 contém o número inferior, R1 contém o número superior e R2 contém a resposta.


R3 é usado para sair do loop depois de percorrê-lo oito vezes.

Veja o que acontece com os Registradores enquanto este programa percorre seu loop
nas três primeiras vezes.
Machine Translated by Google

O importante que aconteceu aqui é que R1 foi adicionado a R2 duas vezes. Aconteceu na
primeira vez, quando R1 continha 0000 0101, e na terceira vez, depois de R1 ter sido
deslocado duas vezes para a esquerda e, portanto, conter 0001 0100. R2 agora
contém 00011001 binário, que é 16+8+1, ou 25 decimal, que é a resposta correta para 5
vezes 5. O loop se repetirá mais 5 vezes até que o bit em R3 seja deslocado para o
sinalizador de transporte, mas o total não aumentará porque não há mais em R0.

Este programa será repetido oito vezes. Começamos com 0000 0001 em R3.
Perto do final do programa, R3 é deslocado para a esquerda.

Nas primeiras sete vezes não haverá carry, então o programa chegará ao 'JMP 53' e voltará
até a terceira instrução do programa. Na oitava vez que R3 é deslocado para a esquerda, o
bit que está ativado é deslocado de R3 para o sinalizador Carry. Portanto, o 'JC 68' irá saltar
sobre o 'JMP 53' e seguir com as instruções que vierem depois.

O byte em R0 é deslocado para a direita para testar quais bits estão ativados. O byte em
R1 é deslocado para a esquerda para multiplicá-lo por dois. Quando havia um pouco em R0,
você adiciona R1 a R2. E isso é tudo.

Uma coisa que não abordamos neste exemplo é o que acontece se a resposta da
multiplicação for maior que 255. Se um programa de multiplicação multiplicar dois
números de um byte, ele deverá ser capaz de lidar com um número de dois bytes.
Machine Translated by Google

responder. Isso cuidaria de quaisquer dois números com os quais você pudesse começar.
Isso seria feito com o sinalizador carry e mais algumas instruções Jump If. Não
torturaremos o leitor com os detalhes.

Ler um programa como o acima é uma habilidade totalmente diferente do que ler os
diagramas e gráficos que vimos até agora no livro. Espero que você tenha conseguido
segui-lo, mas não se espera que ninguém se torne um especialista em programas de
leitura por causa deste livro.

A divisão também pode ser feita pelo nosso computador. Existem várias maneiras de fazer
isso e não examinaremos nenhuma delas detalhadamente. Imagine o seguinte
método simples. Digamos que você queira dividir quinze por três. Se você subtrair
repetidamente três de quinze e contar o número de subtrações que pode realizar antes
que os quinze acabem, essa contagem será a resposta. Como estas cinco etapas:
(1)15-3=12, (2)12-3=9, (3)9-3=6, (4)6-3-3, (5)3-3=0. Isso é facilmente transformado em
um programa.

Os computadores também possuem maneiras de lidar com números negativos e números


com casas decimais. Os detalhes são muito tediosos e estudá-los não melhoraria nossa
compreensão de como funcionam os computadores. Ainda se resume a nada mais do
que portas NAND. Nosso computador simples poderia fazer todas essas coisas com
programas.
Machine Translated by Google

O MUNDO EXTERIOR

O que descrevemos até agora é o computador inteiro. Possui duas partes, a RAM e a CPU.
Isso é tudo que existe. Estas operações simples são as coisas mais complicadas que um
computador pode fazer. A capacidade de executar instruções, modificar bytes com
a ALU, a capacidade de pular de uma parte do programa para outra e, o mais importante, a
capacidade de pular ou não com base no resultado de um cálculo. Isto é o que um computador
é capaz de fazer. Estas são coisas simples, mas como funciona tão rapidamente, pode realizar
um grande número dessas operações que podem resultar em algo que parece impressionante.

Essas duas partes fazem dele um computador, mas se tudo o que o computador pudesse fazer
fosse executar um programa e reorganizar os bytes na RAM, ninguém jamais saberia o que ele
está fazendo. Portanto, há mais uma coisa que o computador precisa para ser útil: uma
forma de se comunicar com o mundo exterior.

Lidar com qualquer coisa fora do computador é chamado de 'Entrada/Saída' ou 'E/S',


abreviadamente. Saída significa dados saindo do computador; Entrada significa dados que
entram no computador. Algumas coisas são apenas de entrada, como um teclado,
algumas coisas são apenas de saída, como uma tela, algumas coisas fazem entrada e saída,
como um disco.

Tudo o que precisamos para E/S são alguns fios e uma nova instrução.

Para os fios, tudo o que vamos fazer é estender o barramento da CPU para fora do computador
e adicionar mais quatro fios para acompanhá-lo. Esta combinação de 12 fios será chamada
de barramento de E/S. Tudo o que está conectado ao computador está conectado a
esse barramento de E/S.

Os dispositivos conectados ao barramento de E/S são chamados de 'periféricos',


porque não estão dentro do computador, mas fora do computador, em sua periferia (a área ao
seu redor).

Mais de uma coisa pode ser conectada ao barramento de E/S, mas o computador
controla o processo e apenas uma dessas coisas está ativa por vez.

Cada coisa conectada ao barramento de E/S deve ter seu próprio endereço de E/S exclusivo.
Isto não é o mesmo que os endereços dos bytes na RAM, é apenas um 'número' que o
periférico reconhecerá quando colocado no barramento.
Machine Translated by Google

Aqui está a aparência do barramento de E/S na CPU, no canto inferior direito do


desenho.

No diagrama abaixo estão os fios do barramento de E/S. O barramento da CPU é


o mesmo pacote de oito fios que vai para qualquer outro lugar. O fio 'Entrada/Saída'
determina em qual direção os dados se moverão no barramento da CPU, para dentro
ou para fora. O fio 'Dados/Endereço' nos diz se estaremos transferindo um byte de
dados ou um endereço de E/S que seleciona um dos muitos dispositivos que podem
ser conectados ao barramento de E/S. 'I/O Clk e' e 'I/O Clk s' são usados para
habilitar e definir registros para que os bytes possam ser movidos para frente e para trás.

Aqui está a fiação da seção de controle para a nova instrução que controla o
barramento de E/S. Isso mostra de onde vêm os quatro novos fios do barramento de E/S.
Eles estão no canto inferior direito do desenho. Eles também foram mostrados no
diagrama da seção de controle completo, alguns capítulos atrás. Desculpe
se isso foi confuso, mas ter aquele diagrama no livro uma vez foi o suficiente.
Machine Translated by Google

Os bits 4 e 5 do IR são colocados no barramento de E/S o tempo todo. Para que a


operação de E/S aconteça, apenas uma etapa é necessária. Para Saída, Reg B está
habilitado e I/O Clk s é ligado e desligado durante a etapa 4. As etapas 5 e 6 não fazem nada.
Para Entrada, I/O Clk e está habilitado e Reg B é definido durante a etapa 5. As etapas 4 e 6
não fazem nada.

Aqui está o código de instrução para a instrução de E/S:


Machine Translated by Google

Esta instrução pode ser usada de quatro maneiras diferentes dependendo dos bits 4 e 5
do IR e, portanto, há quatro palavras novas para nossa linguagem.

Cada dispositivo de E/S possui características próprias e, portanto, precisa de peças


e fiação exclusivas para conectá-lo ao barramento de E/S. O conjunto de peças que
conecta o dispositivo ao barramento é chamado de “adaptador de dispositivo”. Cada tipo
de adaptador possui um nome específico, como 'adaptador de teclado' ou
'adaptador de disco'.

O adaptador não faz nada a menos que seu endereço apareça no barramento.
Quando isso acontecer, o adaptador responderá aos comandos que o computador
enviar a ele.

Com uma instrução 'OUT Addr', o computador liga o fio de endereço e coloca o
endereço do dispositivo com o qual deseja conversar no barramento da CPU. O
periférico reconhece seu endereço e ganha vida. Todos os outros periféricos possuem
algum outro endereço, portanto não responderão.
Machine Translated by Google

Não vamos descrever todas as portas do sistema de E/S. A esta altura, você
deve acreditar que bytes de informação podem ser transferidos através de um
barramento com alguns fios de controle. A mensagem deste capítulo é apenas
a simplicidade do sistema de E/S. A CPU e a RAM são o computador. Todo
o resto, discos, impressoras, teclados, o mouse, a tela, as coisas que emitem
som, as coisas que se conectam à internet, todas essas coisas são
periféricos, e tudo o que são capazes de fazer é aceitar bytes de dados do
computador ou enviar bytes de dados para o computador. Os adaptadores
para diferentes dispositivos têm capacidades diferentes, números
diferentes de registros e requisitos diferentes no que diz respeito ao que o
programa em execução na CPU deve fazer para operar o dispositivo corretamente.
Mas eles não fazem nada mais sofisticado do que isso. O computador controla o
processo com alguns comandos de E/S simples que são executados pela CPU.
Machine Translated by Google

O TECLADO

Um teclado é um dos periféricos mais simples conectados ao barramento de E/S. É um


dispositivo apenas de entrada e apresenta apenas um byte de cada vez para a CPU.

O teclado possui oito fios internos, seu próprio barramento conforme mostrado à
direita. Ao pressionar uma tecla, ele simplesmente conecta a eletricidade aos fios
necessários para criar o código ASCII correspondente à tecla que foi pressionada.
Aquela caixinha que diz 'Control' também é notificada quando uma tecla é pressionada
e define o código ASCII no Keycode Register.

Após pressionar uma tecla, haverá um código ASCII aguardando no Keycode Register.
Veja como a CPU coloca esse código em um de seus registradores.

A porta AND nº 1 possui oito entradas. Eles estão conectados ao barramento da CPU,
quatro deles através de portas NOT. Assim, esta porta AND será ativada sempre que o
barramento contiver 0000 1111. Este é o endereço de E/S deste adaptador de teclado.

A porta AND #2 é ativada somente durante o tempo de 'clk s' de uma instrução
OUT Addr. Ele opera a entrada 'definida' de um bit de memória. Se o ônibus contém
Machine Translated by Google

0000 1111 neste momento, a entrada 'i' estará ativada e o bit de memória será ativado. Quando
este bit de memória está ativado, significa que o adaptador de teclado está ativo.

A porta AND #3 é ativada durante o tempo 'elk e' de uma instrução IN Data. Se o bit de
memória estiver ativado, a porta AND #4 será ativada e o Keycode Register será habilitado
no barramento, que será configurado no Reg B na CPU.

Cada adaptador conectado ao barramento de E/S precisa ter o tipo de circuito que vemos
nas portas 1 e 2 e o bit de memória acima. Cada adaptador terá uma combinação diferente que
ativa o portão nº 1; é isso que permite à CPU selecionar cada adaptador individualmente.

Aqui está um pequeno programa que move o pressionamento de tecla atual para o Reg 3
na CPU.

Essa pequena caixa 'Control' limpa o Keycode Register depois de ter sido enviado para a CPU.

O programa em execução na CPU verificará o adaptador do teclado regularmente e, se


o byte recebido for zero, nenhuma tecla foi pressionada. Se o byte tiver um ou mais bits
ativados, o programa fará tudo o que foi projetado para fazer com um pressionamento de
tecla naquele momento.

Novamente, não passaremos por todas as portas do adaptador de teclado.


Todos os adaptadores de dispositivos possuem os mesmos tipos de circuitos para poder
responder quando são endereçados e enviar ou receber bytes de informações conforme
necessário. Mas não é mais complicado do que isso. Isso é tudo o que os dispositivos
e adaptadores de E/S fazem.
Machine Translated by Google

A TELA DE EXIBIÇÃO

As telas de televisão e de computador funcionam da mesma maneira, a


principal diferença entre elas é apenas o que exibem. Na verdade, isso não é
tecnologia de informática, porque você não precisa de uma tela para ter um
computador, mas a maioria dos computadores tem uma tela, e o computador gasta
muito tempo fazendo a tela parecer alguma coisa, então precisamos saber um
pouco sobre como funciona.

A televisão parece fornecer imagens em movimento com som. As imagens e o


som são feitos separadamente e, neste capítulo, estamos preocupados apenas
em como a imagem funciona.

A primeira coisa a saber é que embora a imagem pareça estar em movimento, na


verdade é uma série de imagens estáticas apresentadas tão rapidamente que o
olho não percebe. Você provavelmente já sabia disso, mas aqui está o próximo
passo. Você já viu um filme. É uma série de fotos. Para assistir a um filme, você
coloca o filme em um projetor, que ilumina uma imagem, depois move o filme para
a próxima imagem, ilumina-a, etc. Geralmente roda a 24 fotos por segundo, o
que é rápido o suficiente para dar a ilusão de uma imagem em constante movimento.

A televisão anda um pouco mais rápido, cerca de 30 imagens por segundo,


mas há outra diferença, muito maior, entre o cinema e a televisão. Com o
filme, cada imagem estática é mostrada de uma só vez. Cada imagem está completa,
quando você direciona a luz através dela, todas as partes da imagem aparecem na
tela simultaneamente. A televisão não é capaz de fazer isso. Não tem uma
imagem inteira para colocar na tela de uma só vez.

Tudo o que uma televisão pode fazer num determinado instante é acender um
único ponto na tela. Ele acende um ponto, depois outro ponto, depois outro, muito
rapidamente, até que todos os pontos de uma imagem tenham sido acesos. O
valor total de pontos dessa tela forma uma imagem estática, portanto, ela deve
acender todos os pontos em um trigésimo de segundo e, em seguida, fazer tudo
de novo com a próxima imagem, etc., até colocar 30 imagens no valor de pontos
na tela em um segundo. Portanto, a TV está muito ocupada iluminando pontos
individuais, 30 vezes o número de pontos na tela, a cada segundo.
Machine Translated by Google

Normalmente, o ponto superior esquerdo acende primeiro, depois o ponto à direita e assim
por diante, da parte superior da tela até o canto superior direito. Em seguida, ele começa
com a segunda linha de pontos, atravessando a tela novamente, a terceira linha, etc., até
digitalizar a tela inteira. O brilho de cada ponto é alto ou baixo para que cada parte da tela
seja iluminada com o brilho adequado para fazer com que a tela se pareça com a
imagem pretendida.

A qualquer momento, a televisão lida apenas com um único ponto solitário na tela. Assim,
com a televisão, existem duas ilusões – a ilusão de movimento proveniente de uma série
de imagens estáticas, bem como a ilusão de imagens estáticas completas que são, na
verdade, desenhadas um ponto de cada vez.
Esta segunda ilusão é auxiliada pelo material da tela, cada ponto só é iluminado por uma
pequena fração de segundo e começa a desaparecer imediatamente. Felizmente,
o que quer que seja feito da tela que brilha, continua a brilhar até certo ponto entre o
momento em que o ponto é aceso e 1/30 de segundo depois, quando o mesmo ponto é
aceso novamente.

À primeira vista, você vê apenas uma imagem em movimento, mas há muitas coisas
acontecendo para que pareça assim.

Em um computador, um único ponto na tela é chamado de 'elemento de imagem' ou,


abreviadamente, 'pixel'.

As telas dos computadores funcionam exatamente como as televisões. Eles também


precisam examinar a tela inteira 30 vezes por segundo para iluminar cada pixel individual e,
assim, fazer aparecer uma imagem. Mesmo que o conteúdo da tela não mude, algo no
computador precisa digitalizar aquela imagem imutável na tela 30 vezes por segundo.
Sem digitalização, sem imagem - é assim que funciona.

Não vamos entrar nos mesmos detalhes aqui que fizemos com a CPU e a RAM, são essas
duas que fazem dele um computador, mas se quisermos saber como nosso computador é
capaz de colocar algo na tela que podemos ler, precisamos ter uma ideia básica de como
funciona.

Neste capítulo veremos o tipo mais simples de tela, aquele que é preto e branco e cujos
pixels só podem estar totalmente ligados ou totalmente desligados.
Este tipo de tela pode exibir caracteres e tipos de imagens feitas de desenhos de linhas.
Mais adiante neste livro veremos algumas mudanças simples que permitem que uma
tela exiba coisas como fotografias coloridas.
Machine Translated by Google

As partes principais são três. Primeiro há o computador, vimos como funciona. Ele
possui um barramento de E/S que pode mover bytes de e para coisas fora do
computador. Em segundo lugar está a tela. A tela é apenas uma grande grade de
pixels, cada um dos quais pode ser selecionado, um de cada vez, e enquanto
selecionado, pode ser ativado ou não. O terceiro item é o ‘adaptador de vídeo’.
O adaptador de vídeo está conectado ao barramento de E/S de um lado e à tela do
outro lado.

O coração de um adaptador de vídeo é um pouco de RAM. O adaptador de vídeo


precisa de sua própria RAM para "lembrar" quais pixels devem estar ativados e
quais pixels devem estar desativados. No tipo de tela que descreveremos aqui, é
necessário que haja um bit de RAM para cada pixel da tela.

Para fazer a tela varrer cada pixel 30 vezes por segundo, o adaptador de vídeo
precisa de seu próprio relógio que funciona a uma velocidade 30 vezes maior que o
número de pixels na tela. A cada tique do clock, um pixel é selecionado e é ativado
ou não pelo bit correspondente da RAM.

Como exemplo, vamos usar um tipo antigo de tela. É uma tela em preto e branco que
exibe 320 pixels na tela e 200 pixels abaixo. Isso resulta em 64.000 pixels individuais
na tela. Cada pixel na tela possui um endereço único que consiste em dois números,
sendo o primeiro a posição esquerda-direita ou horizontal, e o outro a posição de
cima para baixo ou vertical.
O endereço do pixel superior esquerdo é 0,0 e o pixel inferior direito é 319.199

64.000 pixels vezes 30 imagens por segundo significa que o relógio deste
adaptador de vídeo precisa funcionar 1.920.000 vezes por segundo. E como há oito
bits em um byte, precisaremos de 8.000 bytes de RAM de exibição para informar a
cada um dos 64.000 pixels da tela se deve estar ligado ou desligado.

O adaptador de vídeo possui um registro que define a posição horizontal do pixel


atual. O adaptador de vídeo adiciona 1 a esse registro a cada tique do relógio. Começa
em zero e quando o número chega a 319, a próxima etapa o redefine de volta a zero.
Então vai de zero a 319 repetidamente.
Existe também um registro que define a posição vertical do pixel atual.
Cada vez que o registro horizontal é zerado, o adaptador de vídeo adiciona 1 ao
registro vertical. Quando o registro vertical atingir 199, a próxima etapa será zerá-lo.
Assim, à medida que o registro horizontal vai de zero a 319.200 vezes, o registro vertical
vai de zero a 199 uma vez.
Machine Translated by Google

O pixel da tela atualmente selecionado é controlado por esses registros, de modo


que, à medida que o registro horizontal vai de o a 319, o pixel atual atravessa a
tela uma vez. Em seguida, o registro vertical é adicionado a ele e o pixel atual
desce para o primeiro pixel na próxima linha.

Assim, o relógio e os registros horizontal e vertical selecionam cada pixel da tela, um


de cada vez, indo da esquerda para a direita em uma linha, depois selecionando
cada pixel na próxima linha abaixo, depois na próxima, etc. a tela foi
selecionada uma vez. Então começa tudo de novo.

Ao mesmo tempo, há outro registro que contém um endereço de RAM de


exibição. Esse registro também é percorrido, embora precisemos apenas de um
novo byte para cada oito pixels. Os bits de cada byte, um de cada vez, são enviados
à tela em oito pixels consecutivos para ativá-los ou desativá-los. Após cada oito
pixels, 1 é adicionado ao registro de endereço da RAM. No momento em que todos
os pixels foram percorridos, toda a RAM também foi percorrida e uma imagem inteira
foi desenhada. Quando os registros horizontais e verticais atingirem seus máximos
e forem redefinidos para zero, o endereço da RAM também será redefinido para
zero.

O adaptador de vídeo passa a maior parte do tempo pintando a tela. A única outra
coisa que ele precisa fazer é aceitar comandos do barramento de E/S que
alterarão o conteúdo da RAM do adaptador de vídeo. Quando o programa
em execução na CPU precisar alterar o que está na tela, ele usará o comando I/O
OUT para selecionar o adaptador de vídeo e, em seguida, enviará o endereço
RAM do adaptador de vídeo e, em seguida, um byte de dados para armazenar
nesse endereço. Então, à medida que o adaptador continua a pintar a tela, os
novos dados aparecerão na tela no local apropriado.
Machine Translated by Google

A RAM do adaptador de vídeo é construída de forma diferente da RAM do nosso


computador. Ele mantém as funções de entrada e saída separadas. As entradas de todos os
locais de armazenamento são conectadas ao barramento de entrada e as saídas de
todos os locais de armazenamento são conectadas ao barramento de saída, mas o barramento
de entrada e o barramento de saída são mantidos separados. Depois, há dois registradores
de endereços de memória separados, um para entrada e outro para saída. O MAR de entrada
possui uma grade que seleciona apenas qual byte será 'definido', e o MAR de saída possui uma
grade separada que seleciona apenas qual byte será 'habilitado'.

Com esta configuração, a tela e a RAM do display podem ser varridas continuamente usando
apenas a saída MAR e o bit de habilitação. Quando o barramento de E/S é usado para escrever
na RAM do display, ele usa apenas a entrada MAR e o bit definido.

É assim que o adaptador de vídeo cria uma imagem na tela. Devido à forma como funciona,
existe uma relação interessante entre quais bits na RAM do display correspondem a quais
pixels na tela. À medida que varre os primeiros oito pixels da linha superior, ele usa os bits
individuais do byte o de sua RAM para ativar ou desativar os pixels. À medida que varre os
segundos oito pixels, ele usa os bits individuais do byte 1 de sua RAM, etc. São necessários 40
bytes de RAM para desenhar a primeira linha e, portanto, os últimos oito pixels, numerados
de 312 a 319, vêm de Byte 39 da RAM. A segunda linha usa o byte 40 para desenhar seus
primeiros 8 pixels, etc.

Se você quiser escrever letras e números na tela, como você faz isso? Se você colocar o código
ASCII para 'A' em um byte na RAM do display, você obterá apenas oito pixels seguidos onde um
está desligado, depois um está ligado, depois cinco estão desligados e o último está ligado.
Não é assim que um 'A' deveria ser.

Existe uma solução para isso e envolve...


Machine Translated by Google

OUTRO CÓDIGO

Quando você deseja imprimir ou exibir linguagem escrita, você precisa traduzir o código
ASCII em algo que possa ser lido por uma pessoa viva. Temos um código, 0100 0101,
que aparece na tabela de códigos ASCII ao lado da letra ‘E’.
Mas como o computador transforma 0100 0101 em um ‘E’ legível?

Temos uma tela de exibição, mas a tela é apenas uma grade de pixels, não há 'E'
legíveis por humanos em nada que descrevemos até agora. Para obter um 'E' na tela,
deve haver algo que crie aquela forma que reconhecemos como uma letra do alfabeto.

Portanto, precisamos de outro código. Este código é realmente sobre pequenas


imagens feitas de pontos. Para cada personagem que queremos desenhar na tela,
precisamos de uma pequena imagem desse personagem. Se você pegar uma grade
de 8 pixels de largura e 8 pixels de altura, poderá decidir quais pixels devem ser colocados
para fazer uma pequena imagem que se pareça com o personagem que você deseja
desenhar na tela, como esta:

Se você ativar e desativar essa imagem, poderá armazená-la em oito bytes. Se houver
100 caracteres diferentes que você deseja exibir na tela, você precisará de 100 pequenas
imagens diferentes como esta e serão necessários 800 bytes de RAM para armazená-
los. Nosso pequeno computador tem apenas 256 bytes de RAM, então este seria um
bom momento para imaginar aquela versão maior que descrevemos anteriormente.

Esses 800 bytes são um tipo de código conhecido como “fonte”.


Machine Translated by Google

Se você quiser fazer um caractere aparecer em um determinado lugar da tela, você


precisa escolher a pequena imagem correta na fonte e, em seguida, usar as
instruções de E/S para copiar os oito bytes da imagem para os bytes apropriados no
display. RAM do adaptador.

Se as imagens em nossa fonte estiverem organizadas na mesma ordem que a tabela


de códigos ASCII, podemos usar o valor numérico de um código ASCII para
encontrar a imagem correspondente dentro da fonte. O código ASCII para 'E' é 0100 0101.
Se você aplicar o código numérico binário ao mesmo padrão de uns e zeros, obterá o
número decimal 69. 'E' então é o 69º código em ASCII, e a imagem de um 'E' será a
69ª imagem dentro do Fonte. Como há oito bytes em cada imagem, você multiplica 69
por 8, e isso indica que a imagem para 'E' serão os oito bytes começando no
endereço 552.

Agora precisamos saber para onde copiar esses bytes na RAM do display.
Digamos que queremos exibir um 'E' no canto superior esquerdo da tela.
Onde estão os bits que ativam os pixels nos quais estamos interessados? Bem, a
primeira linha é fácil, são os primeiros oito bits da RAM do display, Endereço o.
Portanto, usamos uma série de instruções OUT para copiar o endereço RAM 552
para exibir o endereço RAM o. Agora, onde está a segunda linha na RAM do
display? A exibição pinta todos os 320 bits da linha superior antes de descer
para a segunda linha. Isso significa que ele usa 40 bytes em cada linha, então a
linha superior usa os bytes 0-39. Isso significa que o segundo byte da imagem 'E'
no endereço RAM 553 precisa ser escrito no endereço 40 na RAM do display.
Da mesma forma, do terceiro ao oitavo bytes são escritos nos bytes 80, 120, 160,
200, 240 e 280. Depois de fazer tudo isso, você verá um 'E' completo na tela. Se
você quisesse escrever um 'X' na tela ao lado do 'E', você localizaria os oito bytes na
fonte para 'X' e os copiaria nos bytes 1, 41, 81, 121, 161 da RAM de exibição, 201,
241 e 281. Se você precisar de 27 'E's em sua tela, basta copiar aquele 'E' em sua
fonte para 27 locais diferentes na RAM do display.
Machine Translated by Google

Claro, parece muito trabalhoso apenas fazer uma única letra aparecer na tela. O
programa que faz isso precisaria de um loop de instruções que calculasse os primeiros
endereços 'de' e 'para' e, em seguida, emitisse as instruções OUT apropriadas para
copiar o primeiro byte para a RAM de exibição. Então o loop se repetiria, atualizando
ambos os endereços a cada vez, até que todos os oito bytes tivessem sido copiados
para os locais apropriados. Não vamos escrever este programa, mas ele
poderia facilmente ser um programa de 50 instruções que teria que ser repetido oito
vezes antes de ser concluído. Isso significa que podem ser necessários 400 ciclos de
instrução apenas para colocar um caractere na tela! Se você desenhasse 1.000
caracteres na tela, isso poderia levar 400.000 ciclos de instrução. Por outro lado, isso
ainda representa apenas um quarto de um por cento do que este computador pode
fazer em um segundo.

Isso só mostra por que os computadores precisam ser tão rápidos. As coisas
individuais que eles fazem são tão pequenas que são necessários um grande número
de etapas para realizar qualquer coisa.
Machine Translated by Google

A PALAVRA FINAL SOBRE CÓDIGOS

Vimos vários códigos usados em nosso computador. Cada um foi projetado para um
propósito específico. Mensagens codificadas individuais são colocadas em bytes,
movidas e usadas para realizar tarefas.

Os bytes não “sabem” qual código foi usado para escolher o padrão que eles contêm. Não
há nada no próprio byte que diga qual código ele deveria ser.

Certas partes do computador são construídas com vários códigos em mente. Na ALU,
o somador e o comparador são construídos para tratar bytes como se contivessem
valores codificados com o código numérico binário. O mesmo acontece com o registrador
de endereço de memória e o registrador de endereço de instrução.

O Registro de Instrução é construído para tratar seu conteúdo como se contivesse


valores codificados com o Código de Instrução.

Os bits de RAM do adaptador de vídeo são apenas ativados ou desativados para pixels individuais.
Imagens e fontes são sequências de bytes que resultarão em algo que pode ser
reconhecido por uma pessoa quando for organizado e os brilhos forem definidos pela fiação
de um adaptador de vídeo e tela.

A tabela de códigos ASCII não aparece em nenhum lugar do computador porque


não há maneira de representar uma letra do alfabeto, exceto usando um código.

Os únicos locais onde o ASCII é convertido entre caracteres e o código do caractere


são nos periféricos. Ao pressionar 'E' no teclado, você obtém o código ASCII para um
'E'. Quando você envia o código ASCII de um ‘E’ para uma impressora, ela imprime a
letra ‘E’. As pessoas que constroem esses periféricos têm uma tabela de códigos ASCII à
sua frente e, quando constroem um teclado, o interruptor abaixo do quarto botão da
segunda linha, que tem a letra 'E' impressa, é conectado ao fios de barramento adequados
para produzir o código que aparece próximo à letra 'E' na tabela de códigos ASCII.

Um 'E' é a quinta letra de um alfabeto usada pelas pessoas para representar sons e
palavras no processo de escrita da língua falada. Os únicos 'E's no computador são os
do teclado e os que aparecem na tela. Todos os 'E's que estão em bytes são apenas o
código que aparece ao lado
Machine Translated by Google

o 'E' em uma tabela de códigos ASCII. Eles não são 'E's, não há como colocar um 'E' num
computador. Mesmo que você coloque a imagem de um 'E' em um computador, na
verdade não é um 'E' até que seja exibido na tela. É quando uma pessoa pode olhar para
ele e dizer “Isso é um E”.

Bytes são burros. Eles apenas contêm padrões de ativação e desativação. Se um


byte contiver 0100 0101 e você o enviar para a impressora, ela imprimirá a letra 'E'.
Se você enviar para o Registrador de Instrução, o computador executará uma instrução
Jump. Se você enviá-lo para o Memory Address Register, ele selecionará o byte número
69 da RAM. Se você enviá-lo para um lado do Somador, ele adicionará 69 ao que estiver
do outro lado do Somador. Se você enviá-lo para a tela, ele ativará três pixels e desativará
cinco pixels.

Cada uma dessas peças do computador é projetada com um código em mente, mas uma
vez construída, a mente desaparece e até mesmo o código desaparece. Ele apenas faz o
que foi projetado para fazer.

Não há limite para os códigos que podem ser inventados e usados em um computador.
Os programadores inventam novos códigos o tempo todo. Assim como a caixa
registradora do restaurante fast food mencionado anteriormente, em algum lugar dessa
máquina há um bit que significa 'inclui batatas fritas'.
Machine Translated by Google

O DISCO

A maioria dos computadores possui um disco. Este é simplesmente outro periférico


conectado ao barramento de E/S. A missão do disco é muito simples; pode fazer duas
coisas. Você pode enviar bytes, que serão armazenados, ou pode solicitar que ele envie
de volta alguns bytes, que foram armazenados anteriormente.

Há dois motivos pelos quais a maioria dos computadores possui um disco. Primeiro, eles
têm a capacidade de armazenar um grande número de bytes, muitas vezes maior
que a RAM do computador. A CPU só pode executar programas que estão na RAM, só pode
manipular bytes que estão na RAM. Mas nunca há RAM suficiente para armazenar
todas as coisas que você deseja fazer com seu computador.
E assim um disco irá armazenar tudo, e quando você quiser fazer uma coisa, os bytes no
disco para aquela coisa serão copiados para a RAM e usados. Então, quando você quiser
fazer algo diferente, os bytes da nova atividade serão copiados do disco para a mesma área
da RAM que foi usada para a primeira atividade.

A segunda razão pela qual os computadores possuem discos é que os bytes armazenados
no disco não desaparecem quando você desliga a energia. A RAM perde suas
configurações quando você desliga o computador, quando você liga novamente, todos os
bytes são 0000 0000, mas o disco retém tudo o que foi escrito nele.

Um bit de computador foi definido até agora como um local onde há ou não eletricidade.
Mas antes disso, definimo-lo como um local que pode estar em um de dois estados diferentes.
Em um disco, os bits elétricos são transformados em locais na superfície do disco que
foram magnetizados de uma forma ou de outra. Como os ímãs têm pólos norte e sul, o
ponto no disco pode ser magnetizado de norte a sul ou de sul a norte. Uma direção
representaria um zero e a outra direção, um um. Uma vez que um ponto é
magnetizado, ele permanece assim, a menos que o mesmo ponto seja magnetizado no
sentido contrário.
Desligar a energia não afeta os pontos magnetizados.

Um disco, como o próprio nome indica, é uma coisa redonda, que gira rapidamente. É
revestido com um material que pode ser facilmente magnetizado. Você se lembra do
telégrafo? Na extremidade receptora há um pedaço de metal com um fio enrolado.
Esse pedaço de metal se transforma em um ímã quando a eletricidade passa pelo fio. O
disco tem uma versão minúscula chamada “cabeça” montada em um braço. O braço
mantém a cabeça muito próxima da superfície do
Machine Translated by Google

disco giratório, e o braço pode balançar para frente e para trás, de modo que a
cabeça possa alcançar qualquer ponto da superfície do disco. Se você colocar
eletricidade na cabeça, ela poderá magnetizar a superfície do disco. Além disso,
funciona ao contrário; quando a cabeça passa sobre uma área magnetizada, faz
aparecer eletricidade nos fios enrolados na cabeça. Assim, o cabeçote pode
escrever no disco ou ler o que foi escrito anteriormente no disco. Os bits dos bytes
são escritos um após o outro na superfície do disco.

A superfície do disco é dividida em uma série de anéis, chamados trilhas, muito


próximos uns dos outros. A cabeça pode mover-se pela superfície e parar em
qualquer um dos trilhos. Cada trilha circular é geralmente dividida em pequenos
pedaços chamados setores. Como um disco tem dois lados, geralmente ambos os
lados são revestidos com material magnético e há uma cabeça em cada lado.

Na RAM, cada byte possui seu próprio endereço. Em um disco, também existe uma
forma de localizar bytes, mas é muito diferente. Você deve especificar qual cabeçalho,
qual trilha e qual setor em que um bloco de bytes está localizado. Esse é o tipo de
“endereço” que os dados de um disco possuem, como “Cabeçalho 0, Faixa 57, Setor 15”.
E nesse endereço não há apenas um byte, mas um bloco de bytes, normalmente vários
milhares. Para os exemplos do nosso livro, como nossa RAM é muito pequena,
falaremos sobre um disco que armazena blocos de 100 bytes.
Machine Translated by Google

Quando um disco é lido ou gravado, não há como acessar um byte individual no


bloco de bytes. O bloco inteiro deve ser transferido para a RAM, trabalhado
na RAM e, em seguida, todo o bloco deve ser gravado de volta no disco.

O disco gira rapidamente, mais rápido que o ventilador da sua mesa; muitos
discos populares giram 7.200 vezes por minuto, o que equivale a 120 vezes por
segundo. Isso é muito rápido, mas comparado à CPU, ainda é bem lento. Durante o
tempo em que o disco gira uma vez, o relógio marcará mais de oito milhões de vezes
e nossa CPU executará bem mais de um milhão de instruções.

O disco, como todo periférico, está conectado ao seu próprio adaptador, que por
sua vez está conectado ao barramento de E/S. O adaptador de disco faz
algumas coisas. Aceita comandos para selecionar um cabeçote, selecionar
uma trilha e selecionar um setor. Ele aceita comandos para ler ou gravar no
bloco de bytes no cabeçalho, trilha e setor atualmente selecionados.
Provavelmente também haverá um comando onde a CPU poderá verificar a posição
atual do braço e do disco.

O comando para selecionar um cabeçote pode ser concluído imediatamente, mas


quando recebe um comando para selecionar uma trilha, ele tem que mover o
cabeçote para essa trilha, o que leva muito tempo em termos de ciclos de
instrução. Quando recebe um comando para selecionar um setor, ele tem que
esperar que esse setor gire até onde está a cabeça, o que também leva muito
tempo em termos de ciclos de instrução. Quando a CPU determinar que o
cabeçote chegou à trilha e ao setor desejados, os comandos de E/S para leitura ou
gravação poderão ser executados e um byte por vez será transferido pelo
barramento de E/S. Um programa que lê ou escreve um bloco de bytes deve
continuar o processo até que todo o bloco de bytes esteja completo. Com nosso
sistema de E/S simples, os bytes individuais se movem entre o disco e um registro
da CPU. O programa em execução precisa mover esses bytes de ou para
a RAM, geralmente em locais consecutivos.

Isso é tudo o que um disco faz. Você provavelmente já usou um computador que
tinha um disco e não precisava saber nada sobre cabeçotes, trilhas e setores. E isso
é bom, porque é muito chato ter que lidar com um disco com esse nível de detalhe.
Veremos como um disco normalmente é usado posteriormente neste livro.
Machine Translated by Google

Outra observação linguística: existem várias palavras que significam praticamente a


mesma coisa, mas por alguma razão certas palavras combinam com certas tecnologias.

Se você quiser enviar uma carta para alguém, primeiro você a escreve em um pedaço de
papel e, quando o destinatário recebe a carta, ele a lê.

Na época dos gravadores, você começava com uma fita virgem. Então você gravaria
alguma música na fita. Quando você quisesse ouvir a música novamente, você tocava a fita.

Quando se trata de discos de computador, colocar algo no disco é chamado de gravação.


Tirar algo do disco é chamado de leitura.

Colocar algo na RAM é chamado de gravação ou armazenamento. Tirar algo da RAM é


chamado de leitura ou recuperação.

Colocar algo em um registro da CPU geralmente é chamado de carregamento.

Colocar música em um disco às vezes é chamado de gravação, às vezes de gravação.


Ouvir um disco ainda é geralmente chamado de reprodução, mas se você estiver copiando-
o para o seu computador, isso é chamado de cópia.

Escrever, gravar, armazenar, carregar e gravar significam praticamente a mesma coisa.


Ler, recuperar, reproduzir e extrair também são muito semelhantes.
Eles significam as mesmas coisas, é apenas uma diferença de palavras.
Machine Translated by Google

DESCULPE- ME , SENHORA

Há outra coisa que a maioria dos computadores possui como parte de seu sistema
de entrada/saída. Um computador não precisa de um desses para ser chamado de
computador, portanto não passaremos por todos os portões necessários para construí-lo. Mas é
algo muito comum, então descreveremos como funciona.

Você sabe, se a mamãe está na cozinha mexendo uma panela de sopa, e o pequeno Joey
chega correndo e diz: "Quero um copo de leite", a mamãe larga a colher, vai até o armário, pega
um copo, vai para a geladeira, despeje o leite, entregue para Joey, e então ela voltará ao
fogão, pegará a colher e continuará mexendo a sopa. A agitação da sopa foi interrompida
pela obtenção de um copo de leite e, em seguida, a agitação da sopa foi retomada.

Essa coisa que a maioria dos computadores possui é chamada de “Interrupção” e funciona de
maneira muito parecida com o que aconteceu com mamãe e Joey.

Uma interrupção começa com mais um fio adicionado ao barramento de E/S. Este fio é usado
por certos adaptadores de dispositivos para informar à CPU que é um bom momento para a CPU
realizar uma operação de E/S, como logo após alguém pressionar uma tecla no teclado.
Quando um adaptador de dispositivo ativa o bit de interrupção, na próxima vez que o
stepper voltar à etapa 1, o próximo ciclo de instrução não fará a busca e execução usual,
mas sim fará o seguinte:

O resultado desta sequência é que o IAR e os Flags atuais são salvos em


Endereços de RAM o e 1, e eles são substituídos pelo conteúdo da RAM
Machine Translated by Google

endereços de bytes 2 e 3. Em seguida, a CPU retorna à sua operação normal


de busca e execução. Mas o IAR foi substituído! Portanto, a próxima instrução
será obtida de qualquer endereço que esteja no byte 2 da RAM.

Em outras palavras, o que a CPU estava fazendo é salvo e a CPU é enviada para
fazer outra coisa. Se ao final desta nova atividade o programa colocar os bytes de
RAM o e l de volta no IAR e nos Flags, a CPU continuará exatamente de onde
parou, antes de ser interrompida.

Este sistema é muito útil para lidar com operações de E/S. Sem
interrupções, o programa em execução na CPU teria que verificar regularmente
todos os dispositivos no barramento de E/S. Com interrupções, o programa pode
simplesmente fazer tudo o que foi projetado para fazer, e o programa que lida com
coisas como entrada do teclado será chamado automaticamente conforme
necessário pelo sistema de interrupção.

Não incluímos isso em nossa CPU porque isso tornaria nosso diagrama de
fiação da Seção de Controle muito grande. Seria necessário adicionar o seguinte:
mais duas etapas ao stepper, fiação para executar as 8 etapas acima no lugar do
ciclo de instrução normal, caminhos para o registrador Flags chegar e sair do
barramento, um método de envio de um binário o , 1, 2 ou 3 para MAR, e uma
instrução que restaura os bytes de RAM o e 1 para o registro IAR e Flags.

E esse é um sistema de interrupção. No que diz respeito à linguagem, os


projetistas de computadores pegaram um verbo existente, 'interromper', e o
usaram de três maneiras: é um verbo em "o teclado interrompeu o
programa", é um adjetivo em "Esta é a interrupção". sistema" e é um
substantivo em "a CPU executou uma interrupção".
Machine Translated by Google

ISSO É TUDO GENTE

Sim, este é o fim da nossa descrição de um computador. Isso é tudo que existe.
Tudo o que você vê um computador fazer é uma longa concatenação dessas
operações muito simples, as operações ADDing, NOTting, Shifting, AND, OR,
XORing de bytes, armazenamento, carregamento, salto e E/S, através da execução
do código de instrução de BATER. Isto é o que faz de um computador um
computador. Esta é a soma total da inteligência de um computador. Esse é todo o
pensamento que um computador é capaz. É uma máquina que faz exatamente o
que foi projetada para fazer e nada mais. Como um martelo, é uma ferramenta criada
pelo homem para realizar tarefas definidas pelo homem. Ele executa sua tarefa
exatamente como foi projetado. Também como um martelo, se for lançado
indiscriminadamente pode fazer algo imprevisível e destrutivo.

A variedade de coisas que o computador pode fazer é limitada apenas pela


imaginação e inteligência das pessoas que criam os programas para eles serem
executados. As pessoas que constroem os computadores continuam a torná-los
mais rápidos, menores, mais baratos e mais confiáveis.

Quando pensamos em um computador, provavelmente pensamos naquela caixa que


fica sobre uma mesa e contém teclado, mouse, tela e impressora. Mas os
computadores são usados em muitos lugares. Existe um computador em seu carro
que controla o motor. Há um computador no seu celular. Há um computador na
maioria das caixas de televisão a cabo ou satélite. O que todos eles têm em comum é
que todos possuem CPU e RAM. As diferenças estão todas nos periféricos. Um
telefone celular possui um pequeno teclado e tela, um microfone e um alto-falante,
além de um rádio bidirecional para periféricos. Seu carro possui vários sensores e
controles no motor e mostradores no painel para periféricos. A caixa
registradora de um restaurante fast food possui um teclado engraçado, uma pequena
tela e uma pequena impressora para recibos.
Existem computadores em alguns semáforos que mudam as luzes com base na hora
do dia e na quantidade de tráfego que atravessa os sensores embutidos na estrada.
Mas a CPU e a RAM fazem dele um computador, os periféricos podem ser muito
diferentes.

No restante do livro, examinaremos diversos assuntos relacionados à compreensão


de como os computadores são usados, algumas palavras interessantes relacionadas
aos computadores, algumas de suas fragilidades e algumas outras pontas soltas.
Machine Translated by Google

HARDWARE E SOFTWARE

Você já ouviu falar de hardware. Essa palavra já existe há muito tempo.


Existem lojas de ferragens há um século ou mais. Acho que uma loja de
ferragens originalmente vendia coisas duras, como panelas e frigideiras, chaves
de fenda, pás, martelos, pregos, arados, etc. Talvez 'ferragens' significasse coisas
feitas de metal. Hoje, algumas lojas de ferragens não vendem mais panelas e
frigideiras, mas vendem uma grande variedade de coisas duras, como parafusos e
cortadores de grama, também madeira e muitas coisas macias, como carpete, papel
de parede, tinta, etc. não chamado de software.

A palavra “software” foi inventada em algum momento nos primórdios da


indústria de computadores para diferenciar o próprio computador do estado dos bits
dentro dele. Software significa a forma como os bits são ativados ou
desativados em um computador, em oposição ao próprio computador. Lembre-
se de que os bits podem estar ativados ou desativados. O bit tem uma localização
no espaço, é feito de alguma coisa, existe no espaço, pode ser visto. A parte é
hardware. Se a broca está ligada ou desligada é importante, mas não é uma peça
separada que você aparafusa no computador, é a coisa no computador que é mutável,
a coisa que pode ser moldada, é “suave” no sentido de que pode mudar, mas você
não pode pegá-lo sozinho. Essa coisa é chamada de software.

Pense em uma fita de vídeo em branco. Em seguida, grave um filme nele.


Qual é a diferença entre a fita de vídeo em branco e a mesma fita de vídeo com
um filme? Parece igual, pesa igual, não dá para ver nenhuma diferença na
superfície da fita. Essa superfície é revestida com partículas muito finas que podem
ser magnetizadas. Na fita virgem, toda a superfície da fita é magnetizada em direções
aleatórias. Depois de gravar o filme na fita, alguns pequenos lugares da fita são
magnetizados em uma direção e outros pequenos lugares são magnetizados na
outra direção. Nada é adicionado ou retirado da fita, é apenas a forma como as
partículas magnéticas são magnetizadas. Quando você coloca a fita em um
videocassete, ele reproduz um filme. A fita é hardware, o padrão das direções de
magnetização na fita é software.

Em um computador, existem muitos bits. Como vimos, muitos bits precisam ser
configurados de determinadas maneiras para que o computador faça algo útil. Os
bits do computador estão sempre lá. Se você quiser o computador
Machine Translated by Google

para fazer uma determinada coisa, você ativa ou desativa esses bits de acordo
com o padrão que fará o computador fazer o que você deseja. Esse padrão é
chamado de software. Não é uma coisa física, é apenas o padrão no qual os bits
são definidos.

Portanto, a diferença entre hardware e software não é como metal versus


borracha. Tanto o metal quanto a borracha são hardware no que diz
respeito à definição de computador. Hardware é algo que você pode pegar,
ver e manusear. Software é a forma como o hardware é configurado. Quando você
compra um software, ele é gravado em alguma coisa, geralmente algum tipo de
disco. O disco é hardware, o padrão específico gravado nesse disco é software.
Outro disco pode parecer igual, mas ter software completamente diferente escrito nele.

Outra maneira de ver a diferença entre hardware e software é como é fácil enviá-
lo à distância. Se você tem um vaso que deseja enviar para sua tia Millie no
aniversário dela, você deve embalar o vaso em uma caixa e mandar um caminhão
levá-lo da sua casa até a casa dela. Mas se você quiser dar a ela uma música
de presente, você pode ir até a loja, comprar um disco para ela e enviá-lo pelo
correio, mas você também pode comprar um vale-presente para ela na Internet,
enviar-lhe um e-mail e pedir que ela baixe a música. Nesse caso, a música chegará
até a casa dela sem a necessidade de um caminhão ir até lá. A música
será transportada exclusivamente pelo padrão de eletricidade que chega até sua
casa pela conexão com a Internet.

Outra maneira de ver a diferença entre hardware e software é como é fácil fazer
uma cópia do item. Se você tem um cortador de grama e deseja um segundo
cortador de grama, não existe uma máquina que copie o cortador de grama. Você
poderia fotografar o cortador de grama, mas teria apenas uma fotografia plana de
um cortador de grama. Você não poderia cortar a grama com a foto. Para
conseguir um segundo cortador de grama de verdade, você teria que voltar à
fábrica de cortadores de grama e construir outro com ferro, plástico, corda
e tudo o mais com que os cortadores de grama são feitos. Isso é hardware.

O software pode ser copiado facilmente por máquina. Tudo que você precisa é de
algo que possa ler o disco ou o que quer que esteja gravado, e algo mais para
gravá-lo em um novo disco. O novo será igual ao original, fará todas as mesmas
coisas. Se o original for o seu filme favorito, a cópia também será o seu filme
favorito. Se o original for um programa que preparará seus documentos fiscais, a
cópia também o será.
Machine Translated by Google

Software não é uma coisa física, é apenas como as coisas físicas são configuradas.

De longe, a definição mais comum de “software” é referir-se a um pacote de


código de instrução de computador. Acho que a forma como recebeu esse nome é
que, depois de construir um dispositivo tão versátil quanto um computador, há
muitas coisas diferentes que ele pode fazer. Mas quando não há instruções nele,
ele não pode fazer nada. Portanto, o software é uma parte absolutamente
necessária de um computador que executa alguma tarefa. É uma parte vital da
máquina total, mas não é como qualquer outra parte da máquina. Você não pode pesá-
lo, medi-lo ou pegá-lo com um alicate. Portanto, faz parte do 'ware', mas não é
hardware. A única coisa que resta para chamá-lo é 'software'.
Machine Translated by Google

PROGRAMAS

Conforme mencionado anteriormente, uma série de instruções na RAM é chamada de programa.

Os programas vêm em vários tamanhos. Geralmente, um programa é um software que contém


tudo o que é necessário para realizar uma tarefa específica. Um sistema seria algo
maior, composto por vários programas. Um programa pode ser composto de várias partes
menores conhecidas como “rotinas”. As rotinas, por sua vez, podem ser compostas de sub-
rotinas.

Não existem definições rígidas e rápidas que diferenciem entre sistema, programa, rotina e
sub-rotina. Programa é o termo geral para todos eles, a única diferença é o tamanho e a
forma como são utilizados.

Há outra distinção entre dois tipos de programas que não está relacionada ao seu
tamanho. A maioria dos computadores domésticos e empresariais possui vários programas
instalados. A maioria desses programas é usada para fazer algo que o proprietário
deseja fazer. Eles são chamados de programas aplicativos porque são escritos para
aplicar o computador a um problema que precisa ser resolvido. Existe um programa na maioria
dos computadores que não é um aplicativo. Sua função é cuidar do próprio computador e
auxiliar os programas aplicativos. Este programa que não é um aplicativo é chamado de
Sistema Operacional.
Machine Translated by Google

O SISTEMA OPERACIONAL

Um "Sistema Operacional", ou "SO", abreviadamente, é um grande programa que possui


muitas partes e vários objetivos.

Sua primeira tarefa é colocar o computador em funcionamento quando você o liga


pela primeira vez.

Outra de suas funções é iniciar e encerrar programas aplicativos e dar tempo para
que cada um seja executado. É o 'chefe' de todos os outros programas
daquele computador. Quando mais de um programa está na RAM, é o sistema
operacional que alterna entre eles. Ele permite que um programa seja executado
por uma pequena fração de segundo, depois outro programa e depois outro programa.
Se houver dez programas na RAM, e cada um deles for executado por um centésimo
de segundo por vez, cada programa será capaz de executar milhões de
instruções nesse período, várias vezes por segundo. Parece que todos os dez
programas estavam sendo executados simultaneamente porque cada um fazia
alguma coisa, mais rápido do que a vista alcançava.

Um sistema operacional também fornece serviços para programas aplicativos. Quando


um programa aplicativo precisa ler ou gravar no disco ou desenhar letras na tela,
ele não precisa executar todas as instruções complicadas de E/S necessárias
para realizar a tarefa. O sistema operacional possui uma série de pequenas rotinas
que mantém na RAM o tempo todo para tais fins.

Tudo o que um aplicativo precisa fazer para usar uma dessas rotinas é carregar
algumas informações nos registradores e, em seguida, ir para o endereço da
rotina adequada do sistema operacional. Aqui está um exemplo de como isso pode ser
feito. Digamos que você queira desenhar um personagem na tela. Primeiro, coloque
o código ASCII do caracter desejado em R0. Em seguida, coloque os números das
linhas e colunas onde você deseja que apareça na tela em R1 e R2. E aqui está a
parte complicada: você coloca o endereço da próxima instrução do seu programa
aplicativo em R3. Agora é só pular para a rotina do SO. A rotina cuidará de todos os
detalhes do desenho do personagem na tela, e então sua última instrução será JMPR
R3. Assim, essas rotinas podem ser 'chamadas' de qualquer aplicação e, quando
concluída, a rotina voltará para a próxima instrução da aplicação que a chamou.
Machine Translated by Google

Existem vários motivos para que o sistema operacional execute todas as funções de
E/S. Uma delas é que fica mais fácil escrever programas aplicativos, o programador
nem precisa saber como os periféricos realmente funcionam. Outra razão é que seria
desperdiçado muita RAM se cada aplicação tivesse sua própria cópia de todas as
rotinas de E/S. Uma das razões mais importantes é que o sistema operacional pode
verificar se o programa deve ter permissão para fazer o que está pedindo. Isso faz
parte da outra função do sistema operacional: ser o chefe.

O coração do sistema operacional é basicamente um conjunto de instruções


que faz as seguintes perguntas: Preciso inserir alguma coisa? Preciso produzir
alguma coisa? Preciso deixar algum programa rodar? Então começa de novo. Se a
resposta a todas essas perguntas for negativa, a CPU simplesmente
executa as instruções desse loop repetidamente, milhões de vezes por segundo.
Quando há algo para fazer, ele salta para o início do programa que cuida disso e,
quando isso é feito, volta para esse loop onde o sistema operacional 'espera' por
outra coisa para fazer.

Aqui está um diagrama de nossa versão maior de RAM, mostrando quais partes da
RAM podem ser ocupadas por um sistema operacional e vários outros programas.
Machine Translated by Google

Dentro da RAM de cada programa, está todo o código de instrução que faz o programa
funcionar. Cada programa pode ser dividido em seu próprio loop principal e em muitas
rotinas que são usadas para as diversas tarefas que ele precisa realizar. Conforme
mencionado, o SO também possui rotinas que podem ser chamadas por outros programas.

Cada programa também utiliza parte do seu “espaço de endereço” para os dados
nos quais está trabalhando. A calculadora, por exemplo, precisa ter alguns bytes onde
armazena os números que o usuário digita nela. Paciência precisa de alguns bytes que
especifiquem quais cartas estão em quais posições. O processador de texto precisa de
alguma RAM para todos os códigos ASCII que compõem o documento em que você está
trabalhando. O sistema operacional também precisa de bytes onde possa armazenar fontes, acompanhar
Machine Translated by Google

onde os programas aplicativos foram carregados, recebe os dados que lê do disco e


para muitos outros fins.

E é isso que acontece dentro de um computador comum. Existem muitos programas


e áreas de dados diferentes na RAM. O sistema operacional salta para um programa,
o programa salta para uma rotina, a rotina salta para uma sub-rotina. Cada
programa trabalha com seus dados ou calcula algo ou realiza uma operação de E/S.
À medida que cada um termina, ele volta para o lugar de onde veio. A CPU
executa uma instrução de um programa por vez e, se forem escritas de forma
inteligente, cada programa realizará seu trabalho peça por peça, sem interferir
no restante.

Se nosso computador tivesse incluído um 'sistema de interrupção' como


descrevemos alguns capítulos atrás, toda vez que alguém pressionasse uma tecla no
teclado ou movesse o mouse, haveria uma interrupção que chamaria uma parte do
sistema operacional que determina qual I/ O dispositivo causou a interrupção, e
depois chama a rotina adequada para cuidar do que quer que fosse. Quando
isso fosse feito, a CPU continuaria com a próxima instrução de qualquer programa
que estivesse em execução quando a interrupção ocorresse.

Tudo isto pode parecer muito complexo, com tantos milhões e milhares de
milhões de instruções a serem executadas num piscar de olhos. Existem
formas de organizar programas e boas práticas de programação que podem
torná-lo muito mais compreensível. Um estudo destes simplificaria o software da
mesma maneira que espero que este livro tenha simplificado o hardware. Mas
isso seria assunto para outro livro inteiro.
Machine Translated by Google

LÍNGUAS

Escrever programas é muito difícil quando você está apenas escrevendo uns e
zeros, mas esse é o único código que a CPU 'entende'.

O que é uma linguagem? Uma língua falada, como o inglês, é uma forma de
representar objetos, ações e ideias com sons. Uma linguagem escrita é uma forma
de representar os sons de uma língua falada com símbolos no papel.
Parece outro código e um código que representa um código. Nós simplesmente não
podemos fugir dessas coisas!

Você se lembra daquela abreviação que usamos quando estávamos olhando o


código de instrução da CPU e a fiação na Seção de Controle? Bem, na verdade isso
é algo mais do que apenas uma ferramenta útil que foi inventada para este livro. É
uma linguagem de computador. Aqui estão algumas linhas disso:

Uma linguagem de computador é uma forma de representar o código de instrução. Seu


objetivo é facilitar a escrita de programas de computador.

Para usar esta linguagem, você escreve o programa desejado com caracteres ASCII e
salva-o em um arquivo. Então você carrega um programa especial chamado 'compilador'
na RAM e pula para sua primeira instrução. O compilador lerá o arquivo ASCII, traduzirá
cada linha no Código de Instrução que ele representa e gravará todos os
bytes do Código de Instrução em um segundo arquivo.
O segundo arquivo pode então ser carregado na RAM e, quando a CPU passar para a
primeira instrução, o programa que você escreveu em ASCII fará o que você pretendia.

É claro que, quando os computadores foram inventados, todos os programas


tinham de ser escritos diretamente em uns e zeros. Então alguém se cansou do tédio de
programar dessa forma e decidiu escrever o primeiro compilador. O nunca
Machine Translated by Google

depois, os programas foram escritos nesta linguagem mais fácil e depois traduzidos em
Código de Instrução pelo compilador. Com o compilador original, você poderia até
escrever um compilador melhor.

Portanto, para que exista uma linguagem de computador, você precisa de duas coisas:
um conjunto de palavras que compõem a linguagem (outro código) e um
compilador que compile a linguagem escrita em código de instrução de computador.

A linguagem que vimos neste livro contém apenas cerca de 20 palavras.


Cada palavra se correlaciona diretamente com uma das instruções que este
computador é capaz. Cada linha que você escreve resulta em uma instrução
de computador. Quando você escreve um programa de 87 linhas nesta linguagem,
o arquivo de código de instrução que o compilador gera terá 87 instruções.

Então alguém inventou uma linguagem de “nível superior”, onde uma linha da
linguagem poderia resultar em múltiplas instruções de computador. Por exemplo, nosso
computador não possui uma instrução que faça subtração. Mas o compilador
poderia ser projetado para reconhecer uma nova palavra na linguagem como 'SUB
RA, RB' e então gerar quantas instruções de máquina fossem necessárias para fazer
a subtração acontecer. Se você conseguir descobrir como fazer algo sofisticado com
47 instruções, poderá ter uma palavra em seu idioma que signifique essa coisa sofisticada.

Então alguém inventou uma linguagem de nível ainda mais alto, onde as palavras que
compõem a linguagem nem sequer se parecem com as instruções reais da CPU.
O compilador tem muito mais trabalho a fazer, mas ainda gera código de instrução que
faz o que as palavras dessa linguagem significam. Algumas linhas de uma linguagem de
nível superior podem ser assim:

Saldo = 2.000 Taxa


de juros = 0,034
Imprimir "Olá Joe, seus juros este ano são: $"
Imprimir Saldo X Taxa de Juros

O compilador dessa linguagem leria esse programa de quatro linhas e geraria um


arquivo que poderia facilmente conter centenas de bytes de código de instrução.
Quando esse código de instrução fosse carregado na RAM e executado, ele imprimiria:
Machine Translated by Google

Olá Joe, seu interesse este ano é: $ 68

Escrever software em linguagens de nível superior pode resultar na realização de muito


mais em menos tempo, e o programador não precisa mais saber exatamente como o
computador realmente funciona.

Existem muitas linguagens de computador. Algumas linguagens são projetadas para


realizar trabalhos científicos, algumas são projetadas para fins comerciais, outras são
para fins mais gerais. Linguagens de nível inferior ainda são as melhores para
determinados fins.
Machine Translated by Google

O SISTEMA DE ARQUIVOS

Como vimos anteriormente, o modo como um disco realmente funciona é bastante estranho para a maioria
das pessoas que usam um computador.

Para facilitar as coisas, alguém inventou uma ideia chamada “arquivo”. Supõe-se que um arquivo seja
semelhante ao tipo de arquivo em papel que as pessoas usam em escritórios. Um arquivo de papel é uma
folha de papelão dobrada ao meio e colocada em um arquivo.
Esta pasta possui uma guia onde você pode escrever algum tipo de nome para a pasta e, em seguida,
colocar um ou mais pedaços de papel nela.

Um arquivo de computador é uma sequência de bytes que pode ter qualquer comprimento, desde um byte até
todos os bytes disponíveis no disco. Um arquivo também tem um nome. Um disco pode conter muitos
arquivos, cada um com seu próprio nome.

Claro, esses arquivos são apenas uma ideia. Para fazer um sistema de arquivos funcionar, o sistema
operacional fornece vários softwares que fazem o disco parecer um arquivo em vez de ter cabeçalhos,
trilhas, setores e blocos de bytes.

Este sistema de arquivos oferece aos programas aplicativos uma maneira fácil de usar o disco.
Os aplicativos podem solicitar ao sistema operacional que crie, leia, grave ou apague algo chamado arquivo.
Tudo o que o aplicativo precisa saber é o nome do arquivo. Você abre, solicita bytes, envia bytes, aumenta ou
diminui, fecha o arquivo.

O sistema operacional usa parte do disco para manter uma lista de nomes de arquivos, juntamente com o
comprimento de cada arquivo e o endereço do disco (cabeçalho, trilha, setor) do primeiro setor dos
dados. Se o arquivo for menor que um setor de disco, isso é tudo que você precisa, mas se o arquivo for maior
que um setor, também haverá uma lista que contém quantos endereços de tipo de disco forem
necessários para armazenar o arquivo.

O programa aplicativo diz para criar um arquivo com o nome “carta para Jane”.
Em seguida, o usuário digita a carta para Jane e a salva. O programa informa ao sistema operacional onde a
letra está na RAM e quanto tempo ela tem, e o sistema operacional a grava no disco no setor ou setores
apropriados e atualiza o comprimento do arquivo e quaisquer listas necessárias de endereços de tipo de
disco.

Para usar o sistema de arquivos, haverá algum tipo de regras que o programa aplicativo precisará seguir.
Se você quiser gravar alguns bytes no disco, precisará informar ao sistema operacional o nome do arquivo,
o endereço RAM do
Machine Translated by Google

bytes que você deseja gravar e quantos bytes gravar. Normalmente, você colocaria todas essas
informações em uma série de bytes em algum lugar da RAM e, em seguida, colocaria o endereço
de RAM do primeiro byte dessas informações em um dos registradores e, em seguida, executaria
uma instrução Jump que salta para uma rotina dentro do Sistema operacional que grava
arquivos no disco. Todos os detalhes são atendidos por essa rotina, que faz parte do SO.

Se você pedir ao sistema operacional para examinar seu disco, ele mostrará uma lista de todos
os nomes de arquivos e, geralmente, seus tamanhos e a data e hora em que foram gravados
pela última vez.

Você pode armazenar todo tipo de coisas em arquivos. Os arquivos geralmente têm nomes
compostos de duas partes separadas por um ponto como "xxxx.yyy". A parte antes do ponto final é
algum tipo de nome como “carta para Jane”, e a parte depois do ponto é algum tipo de nome como
“doc”, que é a abreviação de “documento”. A parte antes do ponto final informa algo sobre o que
está no arquivo. A parte após o ponto informa que tipo de dados está contido neste arquivo, ou seja,
qual código ele utiliza.

O tipo do arquivo informa a você e ao sistema operacional qual código os dados do arquivo usam.
Em um sistema operacional popular, “.txt” significa texto, o que significa que o arquivo contém
ASCII. Um “.bmp” significa BitMaP, que é uma imagem. Um ".exe" significa executável, o que
significa que é um programa e, portanto, contém código de instrução.

Se você perguntar ao sistema operacional quais programas estão disponíveis para execução, ele
mostrará uma lista dos arquivos que terminam com “.exe”. Se você solicitar uma lista de fotos
que pode ver, será exibida uma lista de arquivos que terminam com ".bmp".

Existem muitos tipos de arquivos possíveis, qualquer programa pode inventar seu próprio tipo
e usar qualquer código ou combinação de códigos.
Machine Translated by Google

ERROS

O computador é uma máquina bastante complexa que faz uma série de coisas
simples, uma após a outra, muito rapidamente. Que tipo de coisas poderiam dar errado
aqui?

Nos primórdios da computação, quando a construção de cada porta do


computador era relativamente cara, às vezes havia componentes que tinham
peças móveis para fazer conexões elétricas. Duas peças de metal tiveram que se
tocar para que a eletricidade chegasse onde os construtores queriam. Às vezes, quando
a máquina parava de funcionar corretamente, o cara do conserto olhava para dentro
para descobrir o que havia de errado e descobria que uma aranha havia rastejado
dentro da máquina e ficou presa entre dois desses pedaços de metal que
deveriam se toquem. Então, quando um pedaço de metal se moveu para tocar o
outro, a aranha estava no caminho e eles não se tocaram. Assim, a eletricidade não
chegaria onde precisava e a máquina não funcionaria mais corretamente. O cara do
conserto removeria o bug, limparia os contatos e reportaria “Houve um bug no
computador”. E ele literalmente quis dizer um bug.

Com o tempo, sempre que um computador parecia estar funcionando


incorretamente, as pessoas diziam que o computador tinha um bug. Existem duas
classes principais de bugs de computador: hardware e software.

Na verdade, um bug de hardware significa que o computador está quebrado. Isso pode
ser tão sério quanto você liga o computador e ele pega fogo, pois há um byte na
RAM onde um bit está sempre desligado.

Agora, um bit na RAM que se recusa a mudar pode ser um problema ou não.
Se o byte onde esse bit está localizado nunca for usado, o computador funcionará
perfeitamente. Se esse byte fizer parte de um local onde um nome está armazenado,
o nome poderá ser alterado de “Joe” para “Jod”. Se esse byte contiver algumas
instruções de programa, você poderá alterar uma instrução XOR para uma instrução
JMP. Então, quando o programa chegar a essa instrução, ele não fará o XOR como
deveria, mas sim pulará para outro lugar e começará a executar o que quer que
esteja no novo local, como se fosse uma série de instruções. O conteúdo desses
bytes determinará o que acontecerá a seguir, mas é quase certo que será tão
errado quanto um trem saindo dos trilhos.
Machine Translated by Google

Se uma porta estiver quebrada no stepper, por exemplo, de modo que a etapa 4 nunca seja
ativada, então o computador não será capaz de operar. Ainda seria possível buscar
instruções nas etapas 1, 2 e 3, mas todas as instruções seriam executadas
incorretamente. Certamente o programa faria uma bagunça depois de 'executar' apenas
algumas instruções.

Os bugs de software podem assumir muitas formas, mas, em última análise, são erros do
programador. Provavelmente existem muito mais maneiras de escrever um
programa incorretamente do que corretamente. Alguns erros apenas criam algum tipo
de resultado incorreto e outros erros fazem com que o computador “trave”.

Uma das minhas histórias estúpidas favoritas de programadores é esta: alguém comprou
um carro a crédito. Ele recebeu um livro de cupons junto com o empréstimo, um cupom
para ser enviado a cada pagamento. Mas quando fez o primeiro pagamento,
acidentalmente usou o último cupom do livro em vez do primeiro. Algumas semanas depois,
ele recebeu uma carta gerada por computador da empresa de empréstimo dizendo:
“Obrigado por pagar seu empréstimo integralmente. Da próxima vez que precisar de
um empréstimo, use-nos novamente”. Obviamente, o programa apenas verificou o
número do cupom e se fosse igual ao cupom de maior número do livro, saltou para a rotina
de empréstimo integralizado. Deveria ter pelo menos verificado o saldo restante do
empréstimo antes de decidir que este foi liquidado. Este é um erro sutil e pode não ser
detectado pela empresa de empréstimo até que ela audite seus livros meses depois. O
computador fez exatamente o que lhe foi ordenado e, na maioria das vezes, foi adequado,
mas o programa não foi escrito para antecipar todas as situações que às vezes ocorrem
no mundo real.

Um dos piores bugs de software é ficar preso em um loop. O programa executa uma
série de instruções e, em seguida, volta ao início da série e a executa continuamente. É
claro que loops são usados o tempo todo na programação, mas são usados para fazer
algo que possui um número finito de etapas semelhantes. Pode repetir até que 50 bytes
tenham sido movidos para algum lugar ou continuar verificando se o usuário pressiona
uma tecla no teclado.
Mas o computador sairá do loop em algum momento e continuará para a próxima tarefa.
Mas se houver algum tipo de erro de programação em que haja um loop sem saída, o
computador parecerá completamente travado. Isso às vezes é chamado de 'travado'; todo
o computador pode precisar ser desligado e reiniciado para sair do loop e voltar à operação
útil.
Machine Translated by Google

Existem todos os tipos de erros que fazem com que a CPU tente executar algo
diferente do código de instrução. Digamos que seu programa resida nos
endereços 10 a 150 e que você tenha alguns dados ASCII, como nomes e números
de telefone, nos endereços 151 a 210. Se o programa for escrito incorretamente de
modo que, sob certas condições, ele pule para o endereço 180, ele apenas
continuará buscando e executando os bytes começando no endereço 180. Se
180-189 foi preenchido com o ASCII para "Jane Smith", o "programa" agora estará
executando lixo completo, uma série de bytes que não foram projetados para
serem instruções Código. Ele pode entrar em loop, voltar para algum lugar do
programa ou emitir o comando para apagar a unidade de disco.
E estará fazendo lixo na alta velocidade habitual. Se você olhasse os padrões
nos bytes, você poderia ver o que faria, mas poderia ser qualquer coisa. Se o
nome no endereço 180 fosse “Bill Jones”, faria algo completamente diferente.
Como não foi projetado para ser útil, provavelmente continuará bagunçando ainda
mais o que está na memória até que o computador precise ser desligado para parar.

Outro tipo de erro pode ocorrer se um programa escrever acidentalmente “John


Smith” no local onde a fonte foi armazenada. Nesse caso, cada letra "E" desenhada
na tela ficaria assim:

O computador executa centenas de milhões de instruções a cada segundo, e basta


uma instrução errada para fazer tudo parar bruscamente. Portanto, o assunto
de programar computadores de uma maneira completamente “livre de bugs” é
algo que chama muita atenção. Quase toda a programação é feita com
linguagens, e os compiladores dessas linguagens são projetados para
gerar Códigos de Instrução que evitam os tipos de erros mais graves, e para
avisar o programador caso certas boas práticas de programação sejam violadas.
Ainda assim, os compiladores podem ter erros e nunca serão capazes de detectar
um erro como o acima no empréstimo de carro.

Como você pode ver, o computador e seu software são coisas bastante frágeis.
Cada porta deve funcionar sempre e cada instrução executada deve estar correta.
Quando você considera todas as coisas que podem dar errado, a alta porcentagem
de coisas que normalmente dão certo é bastante impressionante.
Machine Translated by Google

DOENÇAS DE COMPUTADOR ?

Outro lugar onde as características humanas são atribuídas aos computadores é algo
chamado vírus de computador. Isso implica que os computadores podem contrair uma
doença e adoecer. Eles vão começar a tossir e espirrar? Eles vão pegar um resfriado
ou catapora? O que exatamente é um vírus de computador?

Um vírus de computador é um programa escrito por alguém que quer fazer algo
ruim para você e seu computador. É um programa que causará algum tipo de dano ao seu
computador quando for executado. A motivação das pessoas que escrevem programas
virais varia desde o simples desafio técnico de ver se alguém é capaz de o fazer, até
ao desejo de derrubar a economia do mundo inteiro. Em qualquer caso, as pessoas
que fazem tais coisas não têm em mente os seus melhores interesses.

Como um computador ‘pega’ um vírus? Um programa antivírus deve ser colocado em


sua RAM e seu computador deve acessar o programa antivírus e executá-lo.
Ao ser executado, ele localiza um arquivo que já está no seu disco rígido, que contém um
programa que é executado regularmente pelo seu computador, como alguma parte do
sistema operacional. Depois que o programa de vírus localiza esse arquivo, ele copia o
programa de vírus para o final desse arquivo e insere uma instrução de salto no início do
arquivo que causa um salto para onde o programa de vírus está. Agora seu computador
está com vírus.

Quando um computador com vírus está em execução, ele faz todas as coisas que
deveria fazer, mas sempre que executa o programa que contém o vírus, a instrução de
salto inserida faz com que o programa de vírus seja executado.
Agora, o vírus geralmente fará algo simples, como verificar uma data
predeterminada e, se não corresponder, o programa de vírus retornará ao início do
arquivo onde o programa do sistema operacional ainda existe.

Assim, seu computador parecerá totalmente normal, havendo apenas algumas instruções
extras sendo executadas durante suas operações normais. O vírus é considerado
inativo neste momento. Mas quando essa data chegar e o vírus “decidir” fazer o que quer
que esteja no resto do seu programa, pode ser qualquer coisa.
Quando o programa antivírus está em execução, ele pode causar qualquer dano que a
pessoa que o escreveu possa imaginar. Ele pode apagar arquivos do seu disco ou enviá-los
Machine Translated by Google

em outro lugar pela internet. Um vírus engraçado fazia, de vez em quando, as letras
na tela parecerem se soltar e cair em uma pilha na parte inferior da tela.

Aqui está um exemplo de como pegar um vírus. Digamos que você tenha um amigo
que encontra um filme engraçado na Internet. Isso o faz rir e ele acha que você também
vai gostar, então envia o arquivo do filme por e-mail para você. Você recebe o
arquivo do filme e o reproduz, e você se diverte.

Há duas coisas diferentes que poderiam ter ocorrido aqui. Se o seu amigo lhe enviou
um arquivo chamado "funny.mov" e o seu sistema operacional inclui um programa
que reproduz arquivos '.mov', o sistema operacional carregará esse programa na
RAM e esse programa lerá as imagens no "funny. mov" e exibi-los na tela. Tudo bem,
o programa executado era algo que já estava no seu computador. O arquivo
“funny.mov” apenas forneceu uma série de imagens que foram exibidas na tela.

Mas se o seu amigo lhe enviou um arquivo chamado “funny.exe”, quando você pedir ao
sistema operacional para reproduzir o filme, ele carregará “funny.exe” na RAM e
pulará para a primeira instrução. Agora você tem um programa em execução no seu
computador que veio de outro lugar. Se for um programa antivírus, provavelmente
reproduzirá o filme para você, para que você não suspeite de nada, mas poderá fazer
qualquer outra coisa que desejar com os arquivos do seu disco enquanto você assiste
ao filme. Ele provavelmente se instalará sozinho e ficará inativo por dias ou
semanas, e você nem saberá que seu computador está “infectado”. Mas, mais
cedo ou mais tarde, ele ganhará vida e causará todos os danos para os quais foi projetado.

Esse tipo de programa malicioso é chamado de vírus porque seu funcionamento é


semelhante ao modo como os vírus reais infectam seres vivos. Um vírus real é
algo menor que um animal unicelular. Não se qualifica como vivo porque o vírus
por si só não consegue se reproduzir. Eles se reproduzem, entretanto, invadindo uma
célula de algo que está vivo. Uma vez na célula, o vírus utiliza os mecanismos dessa
célula para fazer cópias de si mesmo, que podem então infectar outras células.

O vírus de computador também não consegue se reproduzir ou fazer qualquer outra


coisa por si só. Ele precisa entrar em um computador e, de alguma forma, ser
executado uma vez por aquela CPU. Quando é executado pela primeira vez, ele se
insere em algum lugar do sistema operacional para que depois seja executado regularmente.
Essas instruções causarão qualquer dano que forem projetadas para causar ao
Machine Translated by Google

computador em que estão sendo executados e geralmente também


fazem algo projetado para espalhar o vírus para outros computadores.
Machine Translated by Google

FIRMWARE

Claro, a RAM é uma parte essencial de qualquer computador. A capacidade de


gravar bytes na RAM e lê-los novamente é parte integrante do funcionamento da
máquina.

Mas em alguns computadores, existem seções da RAM que só são gravadas quando
o computador é inicializado e, posteriormente, essas seções permanecem
inalteradas enquanto o computador funciona. Isso pode ser verdade em qualquer
computador que execute sempre o mesmo programa. Talvez metade da RAM seja
usada para conter o programa e a outra metade da RAM seja usada para conter os
dados nos quais o programa está trabalhando. A metade do programa deve ser
carregada em algum momento, mas depois disso a CPU só precisa ler os bytes do
programa para buscá-los e executá-los.

Quando você tem esse tipo de situação, você pode construir metade da RAM do seu
computador da maneira normal e, com a outra metade, você pula as portas NAND e
apenas conecta cada bit diretamente a um ligado ou desligado no padrão do
seu programa .

Claro, você não pode escrever na RAM pré-conectada, mas pode ler perfeitamente.
Esse tipo de RAM recebeu o nome de Read Only Memory, ou ROM, para abreviar.
Você o usa da mesma forma que usa a RAM, mas apenas lê a partir dele.

Existem duas vantagens na ROM. Nos primeiros dias dos computadores, quando a
RAM era muito cara, a ROM era muito mais barata que a RAM.

A outra vantagem é que você não precisa mais carregar o programa na RAM ao
ligar o computador pela primeira vez. Já está na ROM, pronto para ser executado
pela CPU.

O ponto aqui é uma palavra nova. Como o software foi chamado de 'soft' porque pode
ser alterado, quando se trata de ROM, você ainda tem um padrão nos bits, mas eles
não são mais tão suaves. Você não pode escrever em uma ROM, não pode alterar
os bits. E então esse tipo de memória passou a ser conhecido como ‘firmware’. É um
software permanentemente gravado no hardware.

Mas esse não é o fim da história. A ROM descrita acima teve que ser construída dessa
forma na fábrica. Com o passar dos anos, essa ideia foi aprimorada e tornada
Machine Translated by Google

mais fácil de usar.

O próximo avanço foi quando alguém teve a brilhante ideia de fazer uma ROM onde cada bit fosse
ativado na fábrica, mas havia uma maneira de gravá-la com muita energia que poderia queimar conexões
individuais, alterando bits individuais para desligados. . Assim esta ROM poderia ser programada após
sair da fábrica. Isso foi chamado de 'ROM programável' ou 'PROM', abreviadamente.

Então alguém descobriu como fazer um PROM que consertaria todas aquelas conexões quebradas
se fosse exposto à luz ultravioleta por meia hora. Isso foi chamado de 'PROM apagável' ou 'EPROM',
para abreviar.

Então alguém descobriu como construir uma EPROM que pudesse ser apagada usando energia extra em
um fio especial embutido na EPROM. Isso foi chamado de 'PROM apagável eletricamente' ou 'EEPROM',
para abreviar. Um tipo específico de EEPROM tem o nome de 'memória Flash'.

Portanto, há RAM, ROM, PROM, EPROM, EEPROM e Flash. Todos esses são tipos de memória de
computador. O que eles têm em comum é que todos permitem acesso aleatório. Todos eles funcionam
da mesma maneira quando se trata de endereçar bytes e ler os dados que estão neles. A grande
diferença é que a RAM perde suas configurações quando a energia é desligada. Quando a energia é
ligada novamente, a RAM está cheia de zeros. O resto deles ainda tem seus dados depois de desligar
e ligar novamente.

Você pode perguntar então: "Por que os computadores não usam EEPROM como RAM?
Então o programa permaneceria na RAM quando o computador estivesse desligado." A resposta é
que leva muito mais tempo para escrever na EEPROM do que na RAM. Isso tornaria o computador
tremendamente lento. Se alguém descobrir como fazer uma EEPROM que seja tão rápida e tão barato
e usa a mesma ou menos energia que a RAM, tenho certeza que será feito.

Aliás, a palavra ROM também passou a ser usada para significar qualquer tipo de armazenamento
permanentemente configurado, como um disco pré-gravado, como em 'CD ROM', mas sua
definição original só se aplicava a algo que funcionava exatamente como BATER.
Machine Translated by Google

BOTAS

O que as botas têm a ver com computadores? Bem, existe uma frase antiga que
diz "suporte-se com suas próprias botas". É uma espécie de piada, refere-se
literalmente às tiras que são costuradas em muitas botas e que servem para
ajudar a calçar as botas. A piada é que se você estiver usando um par de botas
assim e quiser se levantar do chão, em vez de pegar uma escada ou subir uma
corda, você pode sair do chão simplesmente puxando com força suficiente as
tiras das botas. É claro que isso só funcionaria em um desenho animado, mas
a frase passou a significar fazer algo quando não há uma maneira aparente de fazê-
lo, ou fazer algo sem as ferramentas que normalmente seriam usadas, ou
realizar algo sozinho, sem a ajuda de ninguém. outro.

Em um computador, existe um problema semelhante à necessidade de decolar


e não ter ferramentas disponíveis para realizá-lo. Quando um computador está em
operação, a memória está cheia de programas que estão fazendo alguma coisa,
e quando o operador do computador insere um comando para iniciar outro
programa, o sistema operacional localiza o programa no disco, carrega-o na
memória e pula para o primeira instrução do programa. Agora esse
programa está em execução.

Mas quando você liga um computador pela primeira vez, como colocar o sistema
operacional na memória? É necessário um programa em execução na memória para
instruir a unidade de disco a enviar algum código de instrução, e o programa
precisa gravar esse código na memória em um local apropriado e, em seguida, pular
para sua primeira instrução para executar o novo programa. Mas quando você
liga o computador, cada byte na memória é zero. Não há nenhuma instrução na
memória. Esta é uma situação impossível, você precisa de um programa na memória
para colocar um programa na memória, mas não há nada lá. Portanto, para que
o computador funcione, em primeiro lugar, ele precisa fazer algo impossível. Ele tem
que se levantar por conta própria!

Há muito tempo, nos primórdios dos computadores, as máquinas possuíam


interruptores e botões no painel frontal que permitiam ao operador inserir bytes de
dados diretamente nos registros e, a partir daí, na RAM. Você pode inserir
manualmente um programa curto dessa maneira e iniciá-lo em execução. Este
programa, chamado de "bootstrap loader", seria o menor programa possível que você
Machine Translated by Google

poderia escrever que instruiria o computador a ler bytes de um periférico,


armazená-los na RAM e então pular para a primeira instrução. Quando o carregador
bootstrap é executado, ele carrega um programa muito maior na memória, como o
início de um sistema operacional, e então o computador se torna utilizável.

Hoje em dia existem formas muito mais fáceis de carregar o primeiro programa no
computador, na verdade isso acontece automaticamente imediatamente após o
computador ser ligado. Mas esse processo ainda acontece, e o primeiro passo é
chamado de “inicialização” ou “inicialização” e significa apenas colocar o primeiro
programa na memória e começar a executá-lo.

A solução mais comum para este problema tem três partes. Primeiro, o IAR é projetado
para que, quando a energia for ligada pela primeira vez, em vez de todos os seus bits
serem zero, o último bit será zero, mas o restante dos bits será um. Assim, para o
nosso pequeno computador, a primeira instrução a ser buscada estará no endereço
mi mo. Em segundo lugar, algo como os últimos 32 bytes da RAM (235-256) serão
ROM, conectados com um programa simples que acessa a unidade de disco,
seleciona head o, track o, sector o, lê esse setor na RAM e então salta para o primeiro
byte dele. A terceira parte, então, é melhor que exista um programa escrito naquele
primeiro setor do disco. A propósito, esse setor é chamado de ‘registro de inicialização’.

Esta palavra 'boot' tornou-se um verbo na conversa sobre informática. Significa


carregar um programa na RAM onde não há programas. Às vezes, as pessoas usam
isso para significar carregar qualquer programa na RAM, mas seu significado
original se aplica apenas ao carregamento do primeiro programa em uma RAM vazia.
Machine Translated by Google

DIGITAIS VS. ANALÓGICO

Você sem dúvida já ouviu esses termos cogitados. Parece que tudo o que está
associado aos computadores é digital e todo o resto não o é. Mas isso não está
suficientemente próximo da verdade.

O que eles querem dizer é bastante simples, mas de onde vieram e como
acabaram em seu uso atual não é tão simples.

A palavra 'digital' vem de dígito, que significa dedos das mãos e dos pés em alguma
língua antiga, e como os dedos das mãos e dos pés têm sido usados para contar,
digital significa ter a ver com números. Hoje, os símbolos individuais que usamos
para escrever números (o, 1, 2, 3, etc.) são chamados de dígitos. No
computador, representamos números com bits e bytes. Uma das qualidades dos bits
e bytes é a sua natureza inequívoca. Um bit está ativado ou desativado; não há área
cinzenta no meio. Um byte está sempre em um dos seus 256 estados; não há
estado entre dois números como 123 e 124. O fato de esses estados mudarem em
etapas é a que nos referimos quando dizemos digital.

A palavra 'analógico' vem do mesmo lugar que 'analogia' e 'análogo', portanto, tem
a ver com a semelhança entre duas coisas. No mundo real, a maioria das coisas
muda gradual e continuamente, não em etapas. Uma voz pode ser um grito ou um
sussurro ou qualquer coisa entre os dois. Quando um telefone converte uma voz em
um equivalente elétrico para que ela possa viajar através de um fio até outro
telefone, essa eletricidade também pode variar entre estar totalmente ligada e
totalmente desligada. Som e eletricidade são duas coisas muito diferentes, mas
a essência da voz foi duplicada com a eletricidade.
Como são semelhantes nesse aspecto, podemos dizer que o padrão elétrico é um
“análogo” da voz. Embora o significado de “analógico” venha deste fator de
“semelhança”, quando você faz um análogo, geralmente está fazendo um análogo
de algo que é continuamente variável. Essa ideia de algo continuamente variável
passou a ser a definição de analógico quando você compara digital e analógico.
Algo que é analógico pode estar em qualquer lugar dentro de algum intervalo,
não há etapas.

Digital significa mudança por etapas e analógico significa mudança de maneira


suave e contínua. Outra forma de dizer isso é que digital significa que os
elementos que compõem um todo vêm de um número finito de escolhas,
enquanto analógico significa que uma coisa é feita de partes que podem ser selecionadas.
Machine Translated by Google

de um número ilimitado de opções. Alguns exemplos não computacionais podem


ajudar a esclarecer isso.

Se você tiver uma plataforma a um metro acima do chão, poderá construir escadas
para as pessoas subirem ou uma rampa. Na rampa é possível subir em qualquer
nível entre o piso e a plataforma; nas escadas, você só tem tantas opções quantos
degraus. A rampa é analógica, as escadas são digitais.

Digamos que você queira construir uma passarela em seu jardim. Você tem a
opção de fazer a passarela de concreto ou tijolos. Se os tijolos tiverem sete centímetros
de largura, você poderá fazer uma passarela de tijolos com 30 ou 33 polegadas
de largura, mas não 31 ou 32. Se você fizer a calçada de concreto, poderá
despejá-la na largura que desejar. . Os tijolos são digitais, o concreto é analógico.

Se você tem um livro antigo e uma pintura a óleo antiga e deseja fazer uma cópia
de cada um, será muito mais fácil fazer uma cópia do livro.
Mesmo que as páginas do livro estejam amareladas, os cantos com orelhas e haja
manchas de sujeira e buracos de minhoca dentro, contanto que você consiga ler
todas as letras do livro, você pode redigitar o texto inteiro, exatamente como o
autor pretendia. Com a pintura a óleo, as cores originais podem ter desbotado e ficar
obscurecidas pela sujeira. O posicionamento exato de cada cerda em cada pincelada,
a espessura da tinta em cada ponto, a maneira como as cores adjacentes se misturam,
poderiam ser copiados com grande detalhe, mas inevitavelmente haveria algumas
pequenas diferenças. Cada letra do livro vem de uma lista de um número específico
de possibilidades; as variações das cores das tintas e suas posições na tela são
ilimitadas. O livro é digital, a pintura é analógica.

Então aí está a diferença entre analógico e digital. O mundo ao nosso redor é


principalmente analógico. A maioria das tecnologias antigas eram analógicas,
como telefone, fonógrafo, rádio, televisão, gravadores e videocassetes.
Curiosamente, porém, um dos dispositivos mais antigos, o telégrafo, era digital.
Agora que a tecnologia digital se tornou altamente desenvolvida e barata, os
dispositivos analógicos estão sendo substituídos um por um por versões digitais que
realizam as mesmas coisas.

O som é uma coisa analógica. Um telefone antigo é uma máquina analógica que
converte o som analógico em um padrão elétrico análogo ao som, que então viaja
através de um fio até outro telefone. Um novo telefone digital pega o som analógico
e o converte em um código digital. Então
Machine Translated by Google

o código digital viaja para outro telefone digital, onde o código digital é
convertido novamente em som analógico.
Por que alguém se daria ao trabalho de inventar um telefone digital quando o
telefone analógico funcionava perfeitamente? A resposta, claro, é que embora
o telefone analógico funcionasse, não era perfeito. Quando um padrão elétrico
analógico percorre longas distâncias, muitas coisas podem acontecer com ele
ao longo do caminho. Ele fica cada vez menor à medida que viaja, por
isso precisa ser amplificado, o que introduz ruído, e quando se aproxima de
outro equipamento elétrico, parte do padrão do outro equipamento
pode se misturar à conversa. Quanto mais longe o som vai, mais ruído e
distorção são introduzidos. Cada mudança no analógico da sua voz torna-se
parte do som que sai do outro lado.

Insira a tecnologia digital para o resgate. Quando você envia um código digital
por longas distâncias, os bits individuais ficam sujeitos aos mesmos
tipos de distorção e ruído, e mudam ligeiramente. No entanto, não importa se um
bit está apenas 97% ativado em vez de 100%. A entrada de uma porta só
precisa “saber” se o bit está ligado ou desligado, ela precisa “decidir” apenas
entre essas duas opções. Enquanto um bit ainda estiver na metade do caminho,
a porta em que ele entra agirá exatamente da mesma maneira como se o bit
estivesse totalmente ligado. Portanto, o padrão digital no final é tão bom quanto
no início, e quando é convertido novamente para analógico, não há nenhum
ruído ou distorção, parece que a pessoa está ao lado.
Existem vantagens e desvantagens em cada método, mas, em geral, os
benefícios da tecnologia digital superam em muito as suas deficiências.
Provavelmente a maior vantagem do digital tem a ver com a realização de
cópias. Quando você faz uma cópia de algo como um disco de vinil, você pode
gravá-lo em um gravador, ou acho que você pode até conseguir todo
o equipamento para gravar um novo disco de vinil. Mas haverá algum grau
de diferença entre o original e a cópia. Em primeiro lugar, todas as
máquinas têm limitações de precisão. Uma cópia de qualquer objeto físico
pode ser muito próxima do original, mas nunca exatamente exata. Em
segundo lugar, se houver arranhões ou partículas de poeira no original,
a cópia terá duplicatas desses defeitos. Terceiro, o atrito entre o disco e
a agulha desgasta uma pequena quantidade de vinil toda vez que você o toca.
Se você usar um gravador, sempre haverá um baixo nível de 'chiado' adicionado ao
Machine Translated by Google

som. Se você fizer uma cópia de uma cópia, e uma cópia daquela, etc., as
alterações ficarão cada vez maiores a cada estágio.

Quando se trata de algo que é digital, desde que cada bit que estava no original
também esteja na cópia, sempre obtemos uma cópia exata. Você pode fazer uma
cópia da cópia, e uma cópia daquela, etc., e cada uma delas será exatamente igual ao
original. Digital é definitivamente a melhor opção se você deseja fazer um número
ilimitado de cópias e preservar algo para sempre.

O computador e os periféricos que construímos são totalmente digitais até agora. E


se tudo o que quiséssemos fazer com eles fossem coisas digitais, como aritmética e
linguagem escrita, poderíamos deixar assim. Porém, se quisermos que nosso
computador toque música e trabalhe com fotografias coloridas, há mais uma coisa que
precisamos observar.
Machine Translated by Google

EU MENTI - MAIS ou menos

Existe uma peça de hardware em um computador que não é totalmente feita de portas
NAND. Isso não é realmente necessário para transformar um computador em computador,
mas a maioria dos computadores possui alguns deles. Eles são usados para mudar de
algo analógico para algo digital, ou de digital para analógico.

Os olhos e ouvidos humanos respondem a coisas analógicas. As coisas que ouvimos


podem ser altas ou suaves, as coisas que vemos podem ser claras ou escuras e
ter uma infinidade de cores.

A tela do computador que descrevemos acima tinha 320 x 200 ou 64.000 pixels. Mas
cada pixel tinha apenas um bit para dizer o que fazer, se estava ligado ou desligado. Isso
é adequado para exibir linguagem escrita na tela ou pode ser usado para fazer desenhos
de linhas, qualquer coisa que tenha apenas dois níveis de brilho. Mas todos nós
já vimos fotografias em telas de computador.

Em primeiro lugar, é necessário que haja uma forma de colocar cores diferentes na tela.
Se você pegar uma lupa e olhar para uma tela colorida de computador ou televisão,
verá que a tela é, na verdade, composta de pequenos pontos de três cores diferentes: azul,
vermelho e verde. Cada pixel possui três partes, uma para cada cor. Quando o adaptador
de vídeo examina a tela, ele seleciona todas as três cores de cada pixel ao mesmo
tempo.

Para um computador ter uma tela colorida, ele precisa ter três bits para cada pixel,
então teria que ter três vezes mais RAM para poder controlar as três cores de cada pixel
individualmente. Com três bits, cada cor poderia estar totalmente ligada ou desligada
e cada pixel teria, portanto, oito estados possíveis: preto, verde, vermelho, azul, verde
e vermelho (amarelo), verde e azul (ciano), azul e vermelho (magenta). ) e verde, azul
e vermelho (branco).

Mas isso ainda não é suficiente para exibir uma fotografia. Para fazer isso, precisamos
ser capazes de controlar o brilho de cada cor em toda a faixa entre totalmente ligado e
totalmente desligado. Para fazer isso, precisamos de um novo tipo de peça que
descreveremos em breve, e precisamos de mais bits na RAM do display. Em vez de um
bit para cada cor em cada pixel, poderíamos ter um byte inteiro para cada cor em cada
pixel. São três bytes por pixel, totalizando 192.000 bytes de RAM apenas para esta
pequena tela.
Machine Translated by Google

Com esses bytes, usando o código numérico binário, você poderia especificar 256
níveis de brilho para cada cor em cada pixel. Isso equivaleria a 16.777.216 estados
(ou cores) diferentes para cada pixel. Isso é variedade suficiente para exibir uma
fotografia razoavelmente bonita.

Para fazer isso funcionar – um número que especifica 256 níveis diferentes de brilho
– você precisa de algo chamado “conversor digital para analógico” ou “DAC”,
para abreviar. Um DAC possui oito entradas digitais e uma saída analógica.
A maneira como funciona é que ele está conectado para tratar a entrada como um
número binário e a saída tem 256 níveis entre desligado e ligado. A saída tem
256 gradações entre ligado e desligado e vai para o nível especificado pelo número de
entrada. Se a entrada for 128, a saída estará na metade. Para um 64, a saída será
de um quarto. Para 0, a saída estará totalmente desligada.

Para fazer essa tela colorida funcionar, o adaptador de vídeo precisa acessar três bytes
por vez, conectá-los a três DACs e conectar as saídas dos DACs às três cores do pixel
atual que está sendo pintado. É assim que funciona uma tela colorida.

Quando definimos “analógico” no último capítulo, dissemos que era algo que era
continuamente variável, de totalmente desligado a totalmente ligado. Mas o nosso
DAC realmente só tem 256 níveis diferentes na sua saída “analógica”. Está muito mais
próximo de ser analógico do que um pouco, mas ainda tem etapas. O que o computador
está fazendo é aproximar uma coisa analógica em passos pequenos o suficiente
para enganar o público-alvo. Quando se trata dos olhos, 256 níveis diferentes de
brilho são suficientes.

Se algo exigir passos menores para enganar o público-alvo, você pode fazer um DAC
com 16 bits no lado digital. Assim você pode apresentar o
Machine Translated by Google

entrada digital com um número de o a 65535. O lado analógico ainda só pode variar de totalmente
desligado a totalmente ligado, mas o tamanho das etapas será muito menor, já que agora
existem 65536 delas.

Quando se trata do ouvido, ele pode ouvir diferenças muito pequenas e, portanto, é necessário um
DAC de 16 bits para obter um som de alta qualidade.

Todos os sons, da música à fala e aos estrondos de trovões, são vibrações do ar. Eles variam
na rapidez com que o ar vibra e exatamente como ele vibra.
O ouvido humano pode ouvir vibrações de cerca de 20 Hz nos graves até 20.000 Hz (20
kHz) nos agudos, portanto esta é a faixa de vibrações com a qual os computadores foram
projetados para lidar. Para que qualquer máquina eletrônica emita sons, existe um dispositivo
chamado alto-falante. Tudo o que um alto-falante faz é mover-se para frente e para trás no ar,
fazendo-o vibrar. Se fizer o ar vibrar exatamente da mesma maneira que o original que foi gravado,
soará exatamente como o original.

Para armazenar som em um computador, a posição do alto-falante é dividida em 65.536


posições possíveis. Então um segundo é dividido em 44.100 partes. Em cada uma dessas partes
de segundo, a posição desejada do alto-falante é armazenada como um número de dois bytes.
Esta informação é suficiente para reproduzir som com altíssima qualidade.

Para reproduzir música estéreo de alta qualidade, um computador precisaria de um


“periférico de som”. Isso teria dois DACs de 16 bits com suas saídas analógicas conectadas
aos alto-falantes. Ele também teria seu próprio clock de 44.100 Hz. A cada tick, ele obteria os
próximos dois números de dois bytes e os conectaria ao lado digital dos DACs.

No que diz respeito à velocidade, seriam 176.400 bytes por segundo. Certamente isso é rápido, mas
lembre-se de que o relógio do nosso computador bate um bilhão de vezes por segundo. Isso
significa que o computador pode enviar quatro bytes para o periférico de som e executar
cerca de 4.000 instruções em alguma outra tarefa antes de precisar enviar as próximas quatro.

Para fazer o contrário, existe um “Conversor Analógico para Digital” ou “ADC”,


abreviadamente. Isso é usado para converter o som de um microfone em uma série de bytes ou
para uma câmera converter uma imagem em uma série de bytes.
A entrada tem um fio que pode estar em qualquer lugar, desde totalmente desligado até totalmente
ligado. O ADC transforma suas saídas em um número de 0 a 255 para um sinal de 8 bits.
Machine Translated by Google

ADC ou de 0 a 65.535 para um ADC de 16 bits. Este número representa o


quanto a entrada está ativada ou desativada. Metade é 128 ou 32.768, um quarto é
64 ou 16.384, etc. Este processo é exatamente o inverso do que um DAC faz.

DACs e ADCs não são feitos de portas NAND, eles possuem peças eletrônicas
como os rádios. Como eles fazem o que fazem não é um assunto adequado para
este livro. Então talvez eu tenha mentido quando disse que tudo em um
computador é feito de portas NAND? Bem, na verdade não, porque DACs e ADCs
são usados apenas em certos tipos de periféricos, não no próprio computador.
Machine Translated by Google

DIVULGAÇÃO COMPLETA

Construímos um computador muito pequeno aqui. Trata-se do menor computador que poderia
ser inventado e que faz todo o necessário para ser digno do nome de computador. Não creio
que alguém tenha construído um computador tão pequeno desde 1952, e ninguém jamais
construiu esse computador exato no mundo real.

Se um verdadeiro designer de computadores algum dia lesse este livro, tenho certeza de que
estaria arrancando os cabelos com todas as oportunidades que foram perdidas aqui para fazer
uma máquina melhor. Mas, novamente, o objetivo tem sido ilustrar os princípios da
computação da forma mais simples possível.

Este é um computador de oito bits. Isso significa que os registradores no processador têm oito
bits, o barramento tem oito bits e, nesta máquina, até o registrador de endereço de memória
tem oito bits.

Na maioria dos computadores que são realmente construídos, enquanto os bytes individuais
na RAM permanecem em 8 bits, todo o resto é expandido para 16 bits, 32 bits ou 64 bits ou uma
combinação destes em diferentes partes da máquina.

Nossa RAM tem apenas 256 bytes, o que é ridiculamente pequeno, mas isso é tudo que você
pode ter com um registrador de endereço de memória de oito bits. Se você usar 16 bits,
poderá ter 65.536 bytes de RAM (isso é 64kb), se usar 24 bits poderá ter 16mb, se usar 32 bits
poderá ter 4 gigabytes de RAM.

Os computadores reais têm coisas que este não tem, mas não são capazes de fazer coisas que
este computador não pode fazer.

Em nosso computador, se você quiser deslocar um byte três bits para a esquerda, você colocaria
três instruções de deslocamento para a esquerda em seu programa. Na maioria dos
computadores reais, eles possuem shifters que deslocam qualquer número de bits em uma
instrução. Mas o resultado é o mesmo, seu byte acaba parecendo o mesmo em ambos os casos,
o computador real apenas faz o trabalho mais rápido.

Em nosso computador, o somador pode somar dois números de oito bits. Se você quiser
adicionar números de 16 bits, precisará empregar algum software para fazer isso. Na maioria
dos computadores, o somador pode adicionar números de 16 ou 32 bits em uma instrução.
Novamente, os resultados são os mesmos, um é apenas mais rápido que o outro.
Machine Translated by Google

O stepper em nosso computador é uma simplificação de algo que a maioria dos


computadores possui, chamado de “máquina de estado”. Máquinas de estado fornecem
etapas, mas iniciam a próxima instrução o mais rápido possível, fazem o que for
necessário para um sistema de interrupção, podem criar instruções mais complexas, etc.
Como tudo que precisávamos eram seis etapas consecutivas, construímos uma coisa mais
simples e apenas fizemos o termo 'stepper'.

Então sim, nosso computador é simples, pequeno e relativamente lento, mas pode fazer tudo
que máquinas mais complicadas podem fazer. As coisas que tornam uma máquina
maior ainda maior são projetadas para realizar o trabalho mais rapidamente, fazê-lo em
menos ciclos de clock, realizar a mesma tarefa com menos instruções, operar em vários
bytes ao mesmo tempo. Mas a natureza daquilo que as máquinas fazem é exatamente a
mesma. Cada tarefa que eles podem realizar se resume a deslocamento, AND, OR, XOR,
ADDing e NOTing bytes. Não há outros tipos sofisticados de operações que tenham
sido deixados de fora deste livro.

Em uma máquina maior, você pode fazer adição, subtração, multiplicação e divisão em
uma única instrução. Isso ocorre porque eles têm um grande número de portas organizadas
em coisas como um “multiplicador de hardware”. Não há razão para mostrar os detalhes de
como você constrói um desses, é um trabalho muito complicado para as poucas
pessoas que precisam construir um. É compreensível e, em última análise,
tudo se resume a portas NAND, assim como todo o resto. Mas vimos como fazer todas as
operações matemáticas existentes com apenas um somador, um shifter, portas NOT e
algum software. O multiplicador de hardware chega mais rápido, mas os resultados são
exatamente os mesmos.

Máquinas maiores têm mais registradores, cada registrador é composto por múltiplos bytes,
possui somadores que podem somar três números ao mesmo tempo, mas ainda assim as
instruções se resumem às mesmas operações simples. Sua compreensão sobre computadores
não é pequena porque olhamos para um computador pequeno.
Machine Translated by Google

FILOSOFIA

Por que temos um capítulo chamado “Filosofia” em um livro sobre computadores?


A única coisa neste livro que chega perto de ser uma questão filosófica é o título: "Mas
como saber?" Tentaremos responder a esta questão um pouco mais adiante.

Este livro é sobre os computadores que temos hoje. Mas e quanto ao futuro? À medida
que os computadores e o software continuam a avançar, quando chegará o dia em
que haverá robôs computadorizados ambulantes que se parecem e agem como pessoas?
Chegará o dia em que teremos de decidir se daremos ou não a estes robôs os
mesmos direitos legais que as pessoas?
Os computadores acabarão por dominar o mundo e substituir completamente
as pessoas?

Para responder a esse tipo de pergunta, as pessoas costumam se referir a uma


questão importante que tem se destacado no campo da filosofia há muitos anos.

A questão é se o homem é composto apenas pelo corpo estrutural que podemos ver e
dissecar, ou se existe um componente espiritual integral em cada ser humano que
explica as qualidades de consciência, amor, honra, felicidade, dor, etc.

Essa questão está muito além do escopo deste livro e permanece respondida
de forma pouco convincente, apesar de muitos livros discutirem cada ponto de vista.
Há pessoas nas ciências que dizem que estamos no caminho certo para construir
computadores conscientes, e isso vai acontecer. Há pessoas na área de humanidades
que dizem que é impossível porque não se pode fabricar um espírito. Cada lado não
conseguiu influenciar o outro.

Se definirmos o cérebro como aquele pedaço engraçado de carne cinzenta encerrado pelo
crânio, e definirmos a mente como tudo o que é responsável pela consciência,
memória, criatividade, pensamento e tudo o mais que percebemos acontecendo em
nossas cabeças, então poderemos reafirmar a grande questão filosófica como:
"O cérebro e a mente são a mesma coisa?"

Então, quando se trata da questão de construir um robô humano convincente, haveria


duas possibilidades.
Machine Translated by Google

Se o cérebro e a mente fossem a mesma coisa, talvez você não fosse capaz de
construir uma pessoa sintética hoje, mas com o passar do tempo,
eventualmente você poderia compreender cada estrutura e função do cérebro e
construir algo de igual complexidade que geraria verdadeira consciência, e que
realmente deveria agir como qualquer outra pessoa.

Se o cérebro e a mente não são a mesma coisa, então construir um amigo


robô sempre consistirá em simular a humanidade, e não em construir algo de igual
qualidade e valor.

Reafirmar a questão não torna a sua resposta mais fácil, mas esta ideia de separar
o que sabemos sobre as mentes do que sabemos sobre os cérebros pode ser
útil. No início dissemos que iríamos mostrar como funcionam os
computadores para que pudéssemos ver o que eles eram capazes de fazer e
também o que não eram capazes de fazer. Vamos pegar o que sabemos sobre
cérebros e o que sabemos sobre mentes e comparar cada um individualmente
com nosso novo conhecimento sobre computadores. Ao fazê-lo, podemos
procurar diferenças e semelhanças e talvez possamos responder a algumas
questões menos controversas.

Os computadores fazem certas coisas com grande facilidade, como somar colunas
de números. Um computador pode fazer milhões de adições em um único
segundo. A mente mal consegue lembrar dois números ao mesmo tempo,
muito menos somá-los sem lápis e papel.

A mente parece ter a capacidade de observar e considerar quantidades


relativamente grandes de dados ao mesmo tempo. Quando penso no meu gato
favorito, posso reviver a experiência de ver sua aparência, ouvir os sons de seu
ronronar e miar, sentir a maciez de seu pelo e seu peso quando pego.
Estas são algumas das maneiras pelas quais conheço meu animal de estimação.

O que significaria para o nosso computador pensar em um gato? Poderia ter


imagens do gato e sons do gato codificados em arquivos em um disco giratório ou
na RAM. Isso é pensar? Se você executasse os bytes desses arquivos um por
um na ALU, isso seria pensar? Se você colocasse a imagem na tela, isso
seria pensar? Se você tocasse os sons nos alto-falantes, isso seria pensar?
Machine Translated by Google

Os sons e imagens codificados no computador são apenas padrões de bytes onde


estão. Eles não se parecem com nada nem soam com nada, a menos que sejam enviados
para os periféricos para os quais foram projetados. E se eles forem enviados para a tela e
os alto-falantes, o computador não os verá nem os ouvirá. Claro, seu computador
poderia ter uma câmera apontada para a tela e um microfone ouvindo os sons, mas o
computador ainda não veria uma imagem ou ouviria um som, apenas coletaria mais
sequências de bytes muito semelhantes aos enviado para a tela e os alto-falantes em
primeiro lugar.

Poderia haver programas que executassem operações matemáticas nos arquivos


de imagens para descobrir padrões e armazenar os resultados desses cálculos em
outros arquivos. Pode haver arquivos que relacionam um arquivo de imagem a outros
arquivos de imagem semelhantes, e imagens a sons, etc., criando mais arquivos.

Mas não importa quanta programação seja aplicada aos arquivos de imagem, há algo
que a mente pode fazer e que o computador simplesmente não tem facilidade para
fazer.

A mente pode considerar a totalidade de alguma coisa ao mesmo tempo. Você pode
pensar no gato inteiro de uma só vez. É como a diferença entre o filme e a tela da TV.
O filme tem imagens inteiras, a tela da TV só tem um pixel por vez. Você poderia
dizer que sua mente funciona tão rapidamente que você não percebe os detalhes, ela se
integra a um todo, assim como os pixels se integram a uma imagem inteira. Mas o que
significa a integração? E quando está integrado, o que é e onde está? E o que olha
para o todo integrado?

Acabamos de ver tudo o que há em um computador. O computador move um byte por


vez no barramento. A coisa mais sofisticada que ele faz é adicionar dois bytes em um.
Todo o resto que ele “faz” nada mais é do que o simples armazenamento de bytes. Um
byte armazenado não faz nada além de manter sua própria configuração
atual. Um computador simplesmente não possui nenhum recurso que integre os
elementos de uma imagem em qualquer outra coisa, nenhum lugar para armazenar essa
outra coisa e nada com que possa observá-la.

Não estou dizendo que não possa ser construído algo que execute essas funções,
estou apenas dizendo que os computadores como os conhecemos hoje não incluem
atualmente nenhum dispositivo desse tipo.
Machine Translated by Google

Aqui está outra questão. Se um cérebro funciona como um computador, então ele
precisa de um programa para a CPU funcionar. De onde viria esse programa?

Embora o cérebro tenha trilhões de células, todo o corpo humano começa com um
óvulo fertilizado. Portanto, qualquer programa que o cérebro possua teria que estar
presente nesta única célula, presumivelmente no DNA.

Os cientistas já decodificaram toda a sequência do DNA dos humanos. O DNA é


interessante porque é uma longa sequência de apenas quatro tipos de coisas. É digital!
Muitos pedaços desse barbante são usados para fazer reações químicas para produzir
proteínas, etc., mas a maior parte dele é chamada de “DNA lixo” porque ninguém
sabe qual é o seu propósito. Mas mesmo se considerarmos que todo o DNA é dedicado
ao software de computador, então poderia haver cerca de um bilhão de instruções
neste programa. Agora, isso é muito software, mas o computador doméstico médio
provavelmente tem essa quantidade de software carregado em seu disco rígido, e isso
não seria suficiente para executar um ser humano.

Alguns disseram que o próprio computador humano programa. Como programador,


simplesmente não consigo imaginar como isso funcionaria. Embora seja verdade
que um programa pode acumular dados e modificar a forma como funciona com
base nos dados coletados, isso não é a mesma coisa que escrever um novo
programa. Se alguém escrever este programa que possa escrever qualquer novo
programa necessário, haverá um grande número de programadores de computador
desempregados para sempre.

Depois, há os tipos de erros que os computadores cometem versus os tipos de erros


que as pessoas cometem. Se um computador ficar preso em um loop, ele parece ter
parado completamente. Você já viu uma pessoa andando na rua parar de trabalhar de
repente? Todas as funções simplesmente cessam. A pessoa simplesmente cairia até
que de alguma forma seu computador fosse reiniciado. As pessoas desabam de vez
em quando, mas geralmente é porque alguma outra parte quebrou, como um ataque
cardíaco, e você pode ver a pessoa reconhecer a dor quando ela a derruba.
Mas se o computador humano ficasse preso em um loop, haveria uma perda
instantânea de consciência e o corpo ficaria completamente inerte, sem qualquer esforço.
Nunca vi isso, mas se o cérebro funcionasse como um computador, seria de
esperar ver isso com bastante regularidade.
Machine Translated by Google

Depois, há a questão da velocidade. Como vimos, um simples computador pode fazer mil
milhões de coisas num segundo. Quando se trata do cérebro, ele possui nervos que
apresentam alguma semelhança com os fios dos computadores. Os nervos também
podem transportar eletricidade de um lugar para outro. Em um computador, os fios saem
dos portões e vão para outros portões. No cérebro, os nervos estão conectados
por “sinapses”. Essas sinapses são espaços entre os nervos onde a eletricidade em um
nervo cria uma reação química, que faz com que o nervo seguinte crie sua própria
eletricidade. Essas reações químicas são dolorosamente lentas.

Ninguém demonstrou que estes nervos estão ligados de forma semelhante aos fios
de um computador, mas a sua falta de velocidade torna muito improvável que isso
fizesse muito bem, mesmo que as ligações fossem semelhantes. Depois que a
eletricidade viaja rapidamente pela célula nervosa, ela chega à sinapse, onde a reação
química leva cerca de um quinhentosésimos de segundo para ser concluída. Isso significa
que nosso computador simples construído com portas NAND poderia fazer dois milhões
de coisas ao mesmo tempo que apenas uma coisa poderia ser feita por um computador
construído com nervos e sinapses.

Outra área onde a diferença entre a mente e os computadores é bastante óbvia é a do


reconhecimento de rostos. A mente é muito boa nisso. Se você entrar em uma festa com
cinquenta pessoas presentes, saberá em questão de segundos se está entre um grupo de
amigos ou de estranhos. Muitas pesquisas foram feitas sobre como as pessoas realizam
esse feito e muitas informações interessantes foram descobertas.

Há também muita especulação e muitas teorias fascinantes sobre os princípios e


mecanismos subjacentes. Mas as estruturas e funções completas e exatas não foram
descobertas.

Se você fornecer a um computador um arquivo de imagem de uma pessoa e, em seguida,


fornecer o mesmo arquivo novamente, ele poderá comparar os dois arquivos byte por
byte e ver que cada byte em um arquivo é exatamente igual ao byte correspondente no
outro arquivo. Mas se você der ao computador duas fotos da mesma pessoa que foram
tiradas em momentos diferentes, ou de ângulos diferentes, ou com iluminação
diferente, ou em idades diferentes, então os bytes dos dois arquivos não corresponderão byte por byte.
Para o computador determinar que esses dois arquivos representam a mesma
pessoa é uma tarefa enorme. Ele precisa executar programas muito complexos que
executam funções matemáticas avançadas nos arquivos para encontrar padrões neles e então
Machine Translated by Google

descubra como esses padrões podem parecer de diferentes ângulos, depois compare essas
coisas com todos os outros rostos que já armazenou em seu disco, escolha a correspondência
mais próxima e, em seguida, determine se está perto o suficiente para ser a pessoa ou apenas
alguém que parece semelhante.

A questão é que os computadores têm um método de lidar com imagens baseado nos princípios
em que os computadores funcionam. Usar esses princípios por si só ainda não produziu
computadores ou software que possam reconhecer um rosto com a velocidade e a
precisão de qualquer pessoa comum.

O reconhecimento de voz por computadores é outra tecnologia que já percorreu um longo


caminho, mas ainda tem muito mais para rivalizar com o que a mente faz facilmente.

Portanto, ao comparar um computador a um cérebro, não parece muito provável que


funcionem segundo os mesmos princípios. O cérebro é muito lento, não há lugar para colocar
o software para executá-lo e não vemos os tipos de problemas que esperaríamos com erros
de software de computador.

Ao comparar um computador com a mente, o computador é muito melhor em matemática, mas


a mente é melhor em lidar com rostos e vozes, e pode contemplar a totalidade de alguma
entidade que já tenha experimentado anteriormente.

Os livros e filmes de ficção científica estão cheios de máquinas que leem mentes ou
implantam ideias nelas, naves espaciais com computadores falantes embutidos e robôs e
andróides realistas. Essas máquinas têm capacidades variadas e alguns dos enredos tratam
da luta do robô com a consciência, a auto-realização, as emoções, etc. Essas máquinas
parecem parecer menos que completas porque são apenas máquinas e desejam
desesperadamente se tornarem totalmente humanas. É uma espécie de versão adulta
do clássico infantil “Pinóquio”, a história de uma marionete que quer se tornar um menino de
verdade.

Mas seria possível construir tais máquinas com uma versão amplamente expandida da
tecnologia que utilizámos para construir o nosso computador simples?

O otimismo é uma coisa ótima e não deve ser reprimido, mas um problema não será suscetível
de solução se você estiver usando uma metodologia ou tecnologia que não esteja à altura
desse problema. No campo da medicina, algumas doenças foram erradicadas pelos
antibióticos, outras podem ser prevenidas através de inoculações, mas outras ainda
atormentam a humanidade, apesar dos melhores cuidados e de décadas de investigação.
E nem vamos nos aprofundar em assuntos como política.
Machine Translated by Google

Talvez seja necessário mais tempo, mas também é preciso considerar a possibilidade
de esses problemas serem insolúveis ou de a pesquisa estar procurando a resposta nos lugares
errados.

Por exemplo, muitas visões do futuro incluíram pessoas viajando em carros voadores. Na
verdade, vários tipos de carros voadores foram construídos.
Mas são caros, ineficientes, barulhentos e muito perigosos. Eles trabalham com os mesmos
princípios básicos dos helicópteros. Se dois carros voadores sofrerem algum tipo de acidente
menor, todos morrerão quando os dois carros colidirem com a Terra. Portanto, a tecnologia de
aviação atual simplesmente não resultará num carro voador satisfatório.
A menos e até que alguém invente um dispositivo antigravidade barato e confiável, não haverá
um mercado de massa para carros voadores e o tráfego nas estradas não será aliviado.

Se você quiser construir uma máquina que funcione exatamente como uma pessoa,
certamente a melhor maneira de fazer isso seria descobrir como a pessoa funciona e então
construir uma máquina que funcione segundo os mesmos princípios, tenha peças que
façam as mesmas coisas, e está conectado da mesma maneira que uma pessoa.

Quando Thomas Edison inventou o fonógrafo, ele estava lidando com o tema do som. O
som é uma vibração do ar. Então ele inventou um aparelho que captava as vibrações
do ar e as transformava em uma ranhura vibratória na superfície de um cilindro de cera. O som
poderia então ser recriado transferindo as vibrações da ranhura de volta para o ar. A questão é
que, para recriar o som, ele descobriu como o som funcionava e então fez uma máquina que
funcionava segundo o mesmo princípio. O som é uma vibração, o sulco de um fonógrafo é
uma vibração.

Muitas pesquisas foram feitas sobre o que motiva as pessoas. Muitas pesquisas foram feitas
sobre como fazer os computadores fazerem as coisas que as pessoas fazem. Muitas coisas
foram descobertas e muitas coisas foram inventadas. Não quero minimizar nenhum trabalho
realizado ou resultados alcançados nestas áreas.

Mas há muitas coisas que ainda não foram descobertas ou inventadas.

Muitos cérebros mortos foram dissecados e suas partes estudadas e classificadas. O cérebro
contém células nervosas que transportam eletricidade de um lugar para outro. Esta é uma
semelhança entre cérebros e computadores. Mas a investigação sobre o funcionamento real
dos cérebros humanos vivos é necessariamente
Machine Translated by Google

limitado. A maioria das observações foi feita durante cirurgias necessárias por acidente ou doença.
Muitas observações foram feitas sobre mudanças de comportamento após uma lesão ou doença ter
desativado certas partes do cérebro. A partir desta pesquisa, foi possível associar determinadas
funções a determinadas áreas do cérebro.

Mas ninguém descobriu um barramento, um relógio, nenhum registro, uma ALU ou RAM.
O mecanismo exato da memória no cérebro permanece um mistério. Foi demonstrado que os nervos
desenvolvem novas conexões ao longo do tempo, e supõe-se que este seja o mecanismo de
aprendizagem, mas ninguém foi capaz de dizer que este nervo específico faz esta função exata, como
podemos fazer com os fios individuais em um computador.

Tudo o que entra em um computador é transformado em um código ou outro.


O teclado gera um byte de ASCII por pressionamento de tecla, um microfone gera 44.100 números
binários por segundo, uma câmera colorida gera três números binários por pixel, 30 vezes por segundo e
assim por diante. Ninguém isolou o uso de códigos como ASCII, números binários, fontes ou um código
de instrução no cérebro. Eles podem estar lá, mas não estão isolados. Ninguém rastreou um
pensamento ou localizou uma memória da mesma forma que poderíamos acompanhar o
funcionamento de um programa em um computador.

É amplamente assumido que o cérebro funciona de uma forma muito mais dispersa do que um único
computador, que existem milhares ou milhares de milhões de elementos informáticos que cooperam e
partilham o trabalho. Mas tais elementos ainda não foram localizados. No mundo da computação, esta
ideia é chamada de “processamento paralelo” e foram construídos computadores com
dezenas ou centenas de CPUs. Mas estes computadores ainda não resultaram num substituto
humano.

Pense em tudo isso como um quebra-cabeça. A maneira como as pessoas trabalham é um lado do quebra-cabeça.

Fazer com que os computadores façam coisas que as pessoas fazem é o outro lado do quebra-cabeça.
Peças do quebra-cabeça estão sendo montadas em ambos os lados. O problema é que, à medida que
se registam progressos em ambos os lados, parece cada vez mais que se trata de dois puzzles
diferentes, que não se encaixam no meio. Eles não estão convergindo em uma única imagem.

Os pesquisadores estão muito conscientes desses desenvolvimentos. Mas quando se trata de cultura
pop, as pessoas ouvem falar constantemente de novas invenções e veem o futuro retratado em filmes
de ficção científica, e a conclusão lógica parece ser que a investigação continuará a resolver os
problemas um por um, até que em
Machine Translated by Google

10, 20 ou 30 anos teremos nossos amigos eletromecânicos. No século passado conquistamos


a eletricidade, os voos, as viagens espaciais, a química, a energia nuclear, etc. Então,
porque não o cérebro e/ou a mente? A pesquisa, porém, ainda está no estágio em que
cada vez que uma nova resposta é encontrada, ela cria mais de uma nova pergunta.

Portanto, parece que, seja qual for a forma como olhamos, nem o cérebro nem a mente
funcionam com base nos mesmos princípios que os computadores, tal como os
conhecemos. Digo “como os conhecemos” porque algum outro tipo de computador
poderá ser inventado no futuro. Mas todos os computadores que temos hoje se
enquadram na definição de “computadores digitais com programas armazenados”, e
todos os princípios sobre os quais eles operam foram apresentados neste livro.

Ainda assim, nada disto “prova” que um ser humano sintético nunca poderia ser
construído, significa apenas que os princípios informáticos apresentados neste livro não
são suficientes para o trabalho. Algum tipo de dispositivo completamente diferente
que opere com base em um conjunto de princípios completamente diferente pode ser
capaz de fazer isso. Mas não podemos comentar sobre tal dispositivo até que alguém o invente.

Voltando a uma pergunta mais simples, você se lembra de Joe e da garrafa térmica? Ele
pensou que a garrafa térmica tinha algum tipo de sensor de temperatura, e um aquecedor e
refrigerador dentro. Mas mesmo que tivesse todo esse maquinário, ainda não “saberia” o
que fazer, seria apenas um dispositivo mecânico que ligava o aquecedor ou o
refrigerador dependendo da temperatura da bebida colocada nele.

Uma tesoura é um dispositivo que desempenha uma função quando feito para tal.
Você coloca um dedo e um polegar nos buracos e aperta. As lâminas do outro lado
da tesoura se movem juntas e cortam algum papel ou tecido ou o que quer que você
tenha colocado em seu caminho. A tesoura “sabe” recortar formas de papel ou fazer
um vestido de pano? Claro que não, eles apenas fazem o que lhes mandam.

Da mesma forma, as portas NAND não “sabem” o que estão fazendo, apenas reagem à
eletricidade ou à falta dela colocada em suas entradas. Se um portão não sabe nada,
então não importa quantos deles você conecta, se um deles sabe absolutamente zero, um
milhão deles também saberá zero.

Usamos muitas palavras que dão características humanas aos nossos computadores.
Dizemos que ele “sabe” coisas. Dizemos que “lembra” coisas. Dizemos que isso
Machine Translated by Google

“vê” e “compreende”. Mesmo algo tão simples como um adaptador de dispositivo


“escuta” seu endereço aparecer no barramento de E/S, ou uma instrução de
salto “decide” o que fazer. Não há nada de errado com isso, desde que saibamos a
verdade sobre o assunto.

Agora que sabemos o que há em um computador e como ele funciona, acho


bastante óbvio que a resposta à pergunta “Mas como ele sabe?” é simplesmente
"Ele não sabe de nada!"
Machine Translated by Google

Índice
Machine Translated by Google

Você também pode gostar