hello-world-machine
← → no teclado; um degrau por tela
antes de tudo · como ler os símbolos desta página
Cada expressão desta página vem com a leitura em voz alta logo abaixo. Esta folha diz o que cada tipo de sinal é.
número(o)
nome em letras retas, com parênteses: uma regra com nome, aplicada ao que está entre parênteses. lê-se: número de o.
v, t
letra inclinada minúscula: uma quantidade que varia. lê-se: vê, tê.
st
índice embaixo: em qual instante, ou em qual posição. lê-se: ésse no instante tê.
28
número pequeno em cima: quantas vezes multiplicar o número por ele mesmo. lê-se: dois elevado a oito.
(79 + 1) mod 256
mod: o resto da divisão por. lê-se: setenta e nove mais um, módulo duzentos e cinquenta e seis.
sinais → significados
seta entre dois conjuntos: uma regra que leva cada coisa da esquerda numa coisa da direita. lê-se: leva sinais em significados.
4F
número em hexadecimal: um número escrito com os algarismos de 0 a 9 e as letras de A a F, que valem de 10 a 15. lê-se: quatro-efe, que vale setenta e nove.
Nenhum sinal aparece antes de estar nesta folha. Em cada degrau, as palavras novas vêm explicadas antes de aparecerem. Onde o símbolo é mais curto que a frase, a frase vence.
0 · antes de qualquer máquina
Dizer Olá, Mundo! em voz alta é um código. Escrever é outro. Piscar uma lanterna é um terceiro.
antes, as palavras deste degrau
sinal
código
Código aqui não é segredo: é um combinado sobre o que cada sinal quer dizer. Muda o meio, fica a mensagem. A lanterna já obriga a escolher: dois tipos de piscada, e nada mais.
ver na placa → ola-mundo, ciclo 1: o primeiro passo: a máquina acorda e vai buscar o que tem de fazer
a matemática daqui · correspondência um a um
código: sinais → significados
lê-se: código leva cada sinal num significado só, e dá para voltar.
In this book, the word code usually means a system for transferring information among people, between people and computers, or within computers themselves.Neste livro, a palavra código geralmente significa um sistema para transferir informação entre pessoas, entre pessoas e computadores, ou dentro dos próprios computadores.cap. 1 — Best Friends
½ · tecla → número
Apertar a tecla O fecha uma chave. A máquina olha uma gaveta especial, a de número 8200, e encontra 79. A tecla virou número.
antes, as palavras deste degrau
chave
gaveta
A máquina olha a gaveta o tempo todo e quase sempre encontra zero: ninguém apertou. O livro chama isso de consultar o teclado. Quando encontra 79, copia para a tela e zera a gaveta, pronta para a próxima tecla.
ver na placa → eco, ciclo 22: a gaveta 8200 entrega o 79 à máquina; dez passos depois ele está na tela
a matemática daqui · uma regra do tempo nos números: 0 enquanto solta, o código enquanto apertada
tecla(t) = 79 enquanto o O está apertado, e 0 depois
lê-se: tecla de tê é igual a setenta e nove enquanto o O está apertado, e zero depois.
The accumulator would then contain a code indicating what key has been pressed.O acumulador passaria então a conter um código indicando qual tecla foi apertada.cap. 25 — Peripherals
It's tempting to assume that this code is the ASCII code for the key. But it's neither practical nor desirable to design hardware that figures out the ASCII code.É tentador supor que esse código é o código ASCII da tecla. Mas não é prático nem desejável projetar hardware que descubra o código ASCII.cap. 25 — Peripherals
One approach is for the program to check the keyboard very frequently. This approach is called polling.Uma abordagem é o programa consultar o teclado com muita frequência. Isso se chama polling.cap. 25 — Peripherals
1 · letra → número
O O vale 79. O l, 108. A vírgula vale 44 e o espaço, 32. A frase vira uma fila de onze números.
antes, as palavras deste degrau
tabela
a tabela: o mesmo combinado em toda máquina do planeta
| letra | O | l | á | , | ␣ | M | u | n | d | o | ! |
|---|---|---|---|---|---|---|---|---|---|---|---|
| número | 79 | 108 | 225 | 44 | 32 | 77 | 117 | 110 | 100 | 111 | 33 |
Não há nada de O no 79. É uma posição numa tabela que o mundo inteiro combinou usar. Por isso o mesmo O é 79 em qualquer máquina.
ver na placa → ola-mundo, ciclo 8: o número 79, escrito 4F, que é a letra O, chega à máquina
a matemática daqui · correspondência um a um entre letras e números
número(O) = 79
lê-se: número de O é igual a setenta e nove.
The biggest advantage of UTF-8 is that it's backward compatible with ASCII. This means that a file consisting solely of 7-bit ASCII codes stored as bytes is automatically a UTF-8 file.A maior vantagem do UTF-8 é ser compatível com o ASCII: um arquivo só de códigos ASCII de 7 bits, guardados como bytes, já é automaticamente um arquivo UTF-8.cap. 13 — From ASCII to Unicode
2 · número → bits
79 vira 01001111. Oito casas, cada uma só 0 ou 1. Com oito casas cabem 256 coisas diferentes.
antes, as palavras deste degrau
casa
bit
byte
É a mesma ideia de 79 = 70 + 9, só que cada casa vale o dobro da vizinha, não dez vezes. 256 é o número de combinações, não um tamanho.
ver na placa → ola-mundo, ciclo 9: os oito pontos da fileira de dados, acesos e apagados: 0 1 0 0 1 1 1 1
a matemática daqui · notação posicional na base dois
79 = 64 + 8 + 4 + 2 + 1
lê-se: setenta e nove é igual a sessenta e quatro, mais oito, mais quatro, mais dois, mais um.
28 = 256
lê-se: dois elevado a oito é igual a duzentos e cinquenta e seis: o tamanho do conjunto das listas de oito zeros ou uns.
As an 8-bit quantity, a byte can take on values from 00000000 through 11111111, which can represent decimal numbers from 0 through 255, or one of 28, or 256, different things.Como quantidade de 8 bits, um byte vai de 00000000 a 11111111, o que representa os números de 0 a 255, ou uma entre 2⁸, isto é, 256, coisas diferentes.cap. 11 — Bit by Bit by Bit · cap. 12 — Bytes and Hexadecimal
2½ · o degrau que o personagem trouxe
225 é maior que 127, e o combinado original só tinha 128 letras, sem acento. O á custa dois bytes.
começar com 110 e 10 é a marca de "vem em dupla"; o 0 na frente do o diz "vem sozinho"
| letra | bytes | em bits |
|---|---|---|
| O | 1 | 01001111 |
| l | 1 | 01101100 |
| á | 2 | 11000011 10100001 |
Onze letras, doze bytes. Byte não é letra: uma letra pode custar um, dois, três ou quatro. Quem conta bytes para contar letras erra, e a web inteira já errou isso.
ver na placa → ola-mundo, ciclo 19: na tela desta máquina o á cabe num byte só, E1; os dois bytes são do arquivo
a matemática daqui · código de comprimento variável, sem palavra que seja começo de outra
bytes(o) = 1, bytes(á) = 2
lê-se: bytes de o é igual a um; bytes de á é igual a dois.
Thus, in UTF-8 the two bytes C2h and A3h represent the British £ sign. It seems a shame to require 2 bytes to encode what is essentially just 1 byte of information, but it's necessary for the rest of UTF-8 to work.Assim, em UTF-8 os dois bytes C2 e A3 representam o sinal de libra. Parece pena gastar 2 bytes para codificar o que é essencialmente 1 byte de informação, mas é necessário para o resto do UTF-8 funcionar.cap. 13, com o £ (U+00A3) como exemplo; o á (U+00E1) está na mesma faixa
3 · bit → corrente
O 1 é corrente passando; o 0 é corrente parada. Oito relés enfileirados seguram o O; noventa e seis seguram a frase.
antes, as palavras deste degrau
corrente
relé
limiar
O número não está no relé. O relé só sabe passar ou não passar; somos nós que combinamos que passar vale 1. Oito relés, oito casas: o O inteiro cabe numa fileira. Como relés viram portas e contas é a história da outra página, a escada.
ver na placa → ola-mundo, ciclo 9: cada ponto aceso na fileira é um fio com corrente passando
a matemática daqui · limiar: um intervalo inteiro de tensões vira um símbolo só
bit(v) = 1 se v ≥ 2 volts, e 0 se v ≤ 0,8 volt
lê-se: bit de vê é igual a um se vê é maior ou igual a dois volts, e igual a zero se vê é menor ou igual a zero vírgula oito volt.
These two relays wired in series are known as an AND gate because it is performing a Boolean AND operation.Esses dois relés ligados em série são conhecidos como porta AND, porque executam a operação booleana E.eletroímã → relé (Petzold cap. 7) · relé → porta lógica (cap. 8), com o instrumento “dois relés viram uma porta”
4 · corrente → conta e lembrança
Portas ligadas de um jeito somam dois bytes. Ligadas de outro, seguram um bit depois que a entrada some.
antes, as palavras deste degrau
porta lógica
estado
Somar 1 ao O dá P, a letra seguinte: a tabela foi feita para isso funcionar. Agora o número pode ser operado e pode esperar. Lembrar é o que permite o próximo degrau.
ver na placa → ola-mundo, ciclo 11: uma peça guarda onde a máquina está e outra soma 1: lembrar e contar
a matemática daqui · aritmética módulo 256, e estado que depende do anterior
(79 + 1) mod 256 = 80
lê-se: setenta e nove mais um, módulo duzentos e cinquenta e seis, é igual a oitenta.
st+1 = f(st, xt)
lê-se: o estado no instante tê mais um é f de: o estado no instante tê, e a entrada no instante tê.
A half adder is an XOR gate and an AND gateUm meio-somador é uma porta XOR e uma porta AND.porta → somador (cap. 14) · porta → flip-flop (caps. 17 e 19) · flip-flop de borda → contador e registrador (cap. 20) · somador → ULA (cap. 21)
5 · byte → endereço
Memória é uma fileira de gavetas, cada uma com um número na porta. O O fica na gaveta 0109; o l, na 010A.
antes, as palavras deste degrau
memória
endereço
Agora há dois números por letra: o que ela vale e onde ela está. A ordem das letras virou ordem de endereços. Ler a frase é percorrer gavetas vizinhas.
ver na placa → ola-mundo, ciclo 9: a máquina aponta a gaveta 8000 e guarda nela o 4F
a matemática daqui · a memória é uma regra que leva cada endereço num byte
mem(0109) = 4F
lê-se: mem de zero, um, zero, nove é igual a quatro-efe, que vale setenta e nove.
That's called writing to memory, and the value of Data In is said to be stored in memory at the address 010.Isso se chama escrever na memória, e diz-se que o valor da entrada fica guardado na memória no endereço 010.cap. 19 — An Assemblage of Memory
6 · número → ordem
Na mesma memória, ao lado das letras, moram outros bytes. CD não é letra: é a ordem “chame”. C9 é “volte”.
antes, as palavras deste degrau
ordem
programa
contador de programa
Nada no byte diz se ele é letra ou ordem. O que decide é para onde o contador de programa aponta, e esse contador também é um número guardado na máquina. A máquina se governa com a mesma matéria que governa.
ver na placa → ola-mundo, ciclo 7: o contador de programa aponta a gaveta 0004 e o byte 36 é lido como ordem: guarde a letra
a matemática daqui · a máquina é uma regra de passo: do estado de agora para o próximo
próximo = passo(contador, A, mem)
lê-se: o próximo estado é passo de: o contador de programa, o número guardado em A, e a memória.
The first 3 bytes are the LXI instruction, the next 2 are the MVI instruction, the next 3 are the CALL instruction, and the next is the RET instruction. The last 7 bytes are the ASCII characters for the five letters of “Hello,” the exclamation point, and the dollar sign.Os 3 primeiros bytes são a instrução LXI, os 2 seguintes a MVI, os 3 seguintes a CALL, e o próximo a RET. Os últimos 7 bytes são os caracteres ASCII das cinco letras de “Hello”, o ponto de exclamação e o cifrão.cap. 27 — Coding · cap. 23 — CPU Control Signals
A value called the program counter. This is the 16-bit value that accesses instructions. It starts at 0000h and sequentially increases until a HLT instruction.Um valor chamado contador de programa. É o valor de 16 bits que acessa as instruções. Começa em 0000 e cresce em sequência até uma instrução HLT.cap. 27 — Coding · cap. 23 — CPU Control Signals
7 · palavras → ordens
Ninguém decora que “chame” é CD. Escreve-se CALL 5 num texto, e o montador troca cada palavra pelo byte certo.
antes, as palavras deste degrau
montador
sistema operacional
montador: uma linha, uma ordem
| o que a pessoa escreve | o que vira | o que faz |
|---|---|---|
| LXI DE,Text | 11 09 01 | aponte para a frase |
| MVI C,9 | 0E 09 | peça o serviço 9: mostrar texto |
| CALL 5 | CD 05 00 | chame o sistema |
| RET | C9 | volte |
| DB 'Hello!$' | 48 65 6C 6C 6F 21 24 | a frase, byte a byte |
É aqui que a delegação começa: a pessoa escreve a intenção, a máquina executa. O sistema operacional já sabe fazer serviços, como mostrar texto, para que cada programa não precise saber.
ver na placa → ola-mundo, ciclo 7: na listagem ao lado, MVI M, 'O' virou 36 4F; a máquina só vê os bytes
a matemática daqui · tradução que preserva significado
roda(montar(texto)) = significado(texto)
lê-se: rodar o que foi montado do texto dá o mesmo que o significado do texto.
An assembler such as ASM.COM reads an assembly-language program (often called a source-code file) and writes out to a file containing machine code—an executable file.Um montador como o ASM.COM lê um programa em linguagem de montagem (o chamado arquivo-fonte) e escreve um arquivo com código de máquina: um executável.cap. 27 — Coding
8 · execução → tela
A tela também é memória: cada três bytes são um ponto colorido. Mostrar o o é escrever números nas gavetas certas desse bloco.
antes, as palavras deste degrau
pixel
Sessenta vezes por segundo a tela lê o bloco e acende. Olá, Mundo! volta a ser coisa que a gente lê, feita de números. Como o 79 vira o desenho do O é a próxima pergunta, ainda sem resposta nesta página.
ver na placa → ola-mundo, ciclo 59: a última letra entra na tela e a frase inteira está lá, feita de números
a matemática daqui · regra que leva cada ponto da grade numa cor
cor(3, 4) = 16 23 3F
lê-se: cor de três e quatro é igual a um-seis, dois-três, três-efe: vermelho, verde e azul.
The contents of the display are stored in a special block of memory, and the individual pixels of the display are refreshed sequentially, starting left to right with the row at the top, and continuing down the display.O conteúdo da tela fica guardado num bloco especial de memória, e os pixels são atualizados em sequência, da esquerda para a direita a partir da linha de cima, descendo pela tela.cap. 25 — Peripherals · cap. 12 (pixel = três bytes)
For a 1920 × 1080 display, each of the 2 million pixels requires 3 bytes for the red, green, and blue components, for a total of 6 million bytes, or 6 megabytes.Numa tela de 1920 × 1080, cada um dos 2 milhões de pixels precisa de 3 bytes, para o vermelho, o verde e o azul: 6 milhões de bytes, ou 6 megabytes.cap. 25 — Peripherals · cap. 12 (pixel = três bytes)
fecho
A matemática se refere ao mundo por aquilo que se conserva. Cada camada é uma promessa: “pode esquecer o resto, isto eu garanto”.
0 código
conserva a mensagem; esquece o meio.
½ tecla → número
conserva o código da letra; esquece a chave, o dedo.
1 letra → número
conserva qual letra é; esquece forma e som.
2 número → bits
conserva o número exato; esquece a base dez.
2½ o á
conserva a letra e as 128 antigas; esquece “um byte, uma letra”.
3 bit → corrente
conserva 0 e 1; esquece a física.
4 conta e lembrança
conserva a aritmética; esquece os relés.
5 endereço
conserva a ordem das letras; esquece o tempo.
6 número → ordem
conserva a matéria comum; esquece “o que fazer” e “sobre o quê”.
7 palavras → ordens
conserva o significado; esquece as palavras.
8 ordem → luz
conserva a forma reconhecível; esquece o número.
A escada inteira é a cadeia dessas promessas, e a execução é o que sobra quando todas foram cumpridas.