binário é algo que não é necessário saber ao fazer programação moderna de alto nível. O 6502 pode fazer muitas operações (adicionar, subtrair, mover coisas na memória) para as quais você não precisará entender como o binário funciona. No entanto, há operações que gostaríamos de fazer, tais como multiplicação e divisão, que não são coisas que o 6502 pode fazer nativamente. Precisamos criar essas funções nós mesmos. Isto exigirá alguma compreensão das complexidades do cálculo binário., Até porque internamente, o 6502 representará tudo sob a forma de binário. Vimos isso quando discutimos como o processador vai tentar “traduzir” tudo para padrões binários. No mínimo, estar familiarizado com a leitura de números binários e com termos como bit, byte e nibble será útil para entender geralmente como o 6502 opera. Felizmente, embora para nós, binário é intuitivo e divertido.
A partir de agora, a única maneira prática de armazenar dados em eletrônica é em uma forma de lógica de dois estados. Algo pode ser “ligado” ou “desligado”, “verdadeiro”ou ” Falso”., Em um computador um dígito binário singular, a maneira mais básica de armazenar informações é chamada de um bit. Um bit pode ser um 1
ou um 0
. Os dados em um computador são armazenados em grupos de bits. Em muitos casos, como o 6502, a forma preferida é em um grupo de oito (algo como 0001 0101
). Isto chama-se byte. Nós também podemos ter um grupo menor de quatro bits chamado de nibble (lol).
para representar adequadamente os dados numéricos, alguns casos precisam ser olhados. Em primeiro lugar, vamos começar com binário sem assinatura., Os oito bits (B) de um byte serão representados como:
b₇b₆b₅b₄b₃b₂b₁b₀
contamos os bits da direita para a esquerda, indexando de 0. Cada bit pode ser visto como sendo relacionado a um número binário. O bit mais à direita representa 2⁰, o próximo à esquerda é 21, depois 22, e assim por diante. Será, portanto, útil lembrar os poderes de 2, que são:
2⁷ = 128
2⁶ = 64
2⁵ = 32
2⁴ = 16
2³ = 8
2² = 4
2¹ = 2
2⁰ = 1
para traduzir de binário para algo que reconhecemos que precisaremos somar todos os poderes apropriados de 2., Se um bit for definido para 1
vamos incluir a potência correspondente em nossa soma, se não vamos descartá-la. Isto pode já parecer complicado, mas, olhando para um exemplo, esperamos que ajude a esclarecê-lo. Se tomarmos o número binário 0010 0011
podemos ver os únicos bits definidos são 0, 1 e 5. Podemos então “somá-los”como tal:
b₅ + b₁ + b₀
= 2⁵ + 2¹ + 2⁰
= 32 + 2 + 1
= 35
Você também pode tentar ir para o outro lado, de decimal a binário. Nós fazemos isso dividindo o número por duas múltiplas vezes e rastreando o restante., O bit restante (que será sempre um 1 ou um 0) irá mapear para os bits em um byte. Por exemplo, se você dividir 35 por 2 você recebe 17 restante 1. Portanto, o bit 0 será um 1. Mais uma vez, este cálculo é menos estranho do que soa quando você vê-lo realizado. Vamos tentar 35 (ou 0010 0011
) novamente:
35 ÷ 2 = 17r1→ 1
17 ÷ 2 = 8r1 → 1
8 ÷ 2 = 4r0 → 0
4 ÷ 2 = 2r0 → 0
2 ÷ 2 = 1r0 → 0
1 ÷ 2 = 0r1 → 1
0 ÷ 2 = 0r0 → 0
0 ÷ 2 = 0r0 → 0
Este método nos dá o resultado0010 0011
, que é exatamente o que começamos!
adição
Agora que estamos confortáveis lendo e escrevendo números binários, vamos querer tentar fazer alguma matemática com eles., A adição funciona “normalmente”. Quando você adicionar dois números normais (vamos tentar 9 e 2) você “carregar” tudo o que vai acima de dez para o próximo dígito. Então, 9 + 2 te dará 11. Em binário, você executa um processo semelhante. Bits simples seguem estas regras:
0 + 0 = 0
1 + 0 = 1
0 + 1 = 1
1 + 1 =(1)0
o (1) representa um carry. É o mesmo que dizer 9 + 2 = (1)1. Usando o que aprendemos antes podemos ver que 10 em binário é o equivalente a 2 em decimal, exatamente o que esperaríamos de 1 + 1!,
Se a gente tentar fazer de 3 (0011
) + 1 (0001
), podemos ver outro exemplo de como o transporte em binário funciona:
0011
+ 0̲0̲0̲1̲
0100
podemos ver aqui algo foi realizada a partir de 1º de bits para a 2ª. E se acrescentarmos um número maior? Vamos tentar 128 e 129:
10000001
+̲1̲0̲0̲0̲0̲0̲0̲0̲
(1)00000001
agora encontramos o nosso primeiro problema. Sabemos que a resposta deve ser 257, no entanto, olhando para o que está nos primeiros 8 bits, parece que a resposta é 1. Só com o bit extra carry é que a verdadeira resposta se torna aparente., Se vamos salvar nossos números binários em 8 bits, vamos precisar de uma maneira de armazenar e rastrear este tipo de transporte. O 6502 pode fazer exatamente isso, phew! O 6502 tem um conjunto de bandeiras construídas dentro dele, uma das quais é chamada de “Carry Flag”. Isto pode ser definido como 1 ou 0. Sempre que uma adição acontece para números binários que resultam na resposta ser maior que 256, A Bandeira Carry é definida para 1. Isso nos permite manter o controle de nossa matemática e nos dá uma maneira de estender a nossa aritmética para além de 8 bits números.,vamos tirar um minuto para pensar no que acabamos de dizer, porque acho que tem uma implicação profunda. Não é software que vai manter o controle do transporte em nossa matemática, é hardware. A bandeira carry é um registro dentro do 6502, um “lugar real”. Se eu tivesse um microscópio grande eu poderia ampliar e ser capaz de dizer: “Ei, esse é o lugar onde o pedaço de transporte é armazenado!”. Isto é o que eu acho realmente emocionante sobre aprender montagem 6502 — você está em um espaço onde há uma enorme sobreposição entre o hardware que você tem e o código que você é capaz de escrever., Isto pode realmente moldar a forma como você pensa sobre codificação neste sistema. Quando escrevo Python no meu Mac, tenho muito pouco senso de como ele se conecta a ele-eu escrevo o meu roteiro, alguma magia acontece, então eu recebo alguns números de volta. Quando se discute a montagem não se pode evitar a ideia de que o que se está a fazer tem uma forte ligação com a sua máquina, eu acho-a muito menos abstracta.
assim, nós também podemos representar nossos inteiros positivos corretamente e se incluirmos um carry bit nossos números binários podem adicionar corretamente. No entanto, existem dois problemas:
- Só podemos contar até 255 (se usarmos apenas 8 bits).,só podemos representar números positivos.
precisamos ser capazes de resolver o último problema. Para isso, introduziremos o binário assinado.