Il binario è qualcosa che non è necessario sapere quando si esegue una programmazione moderna e di alto livello. Il 6502 può fare molte operazioni (aggiungere, sottrarre, spostare le cose in memoria) per le quali non sarà necessario capire come funziona il binario. Tuttavia, ci sono operazioni che potremmo fare, come la moltiplicazione e la divisione, che non sono cose che il 6502 può fare in modo nativo. Dobbiamo creare queste funzioni noi stessi. Ciò richiederà una certa comprensione della complessità del calcolo binario., Anche perché internamente, il 6502 rappresenterà tutto sotto forma di binario. Lo abbiamo visto quando abbiamo discusso di come il processore cercherà di “tradurre” tutto in modelli binari. Come minimo, avere familiarità con la lettura di numeri binari e con termini come bit, byte e nibble sarà utile per capire in generale come funziona il 6502. Fortunatamente però per noi, binario è intuitivo e divertente.
A partire da ora, l’unico modo pratico per memorizzare i dati in elettronica è in una forma di logica a due stati. Qualcosa può essere ” On ” o ” Off”, “True”o “False”., In un computer una cifra binaria singolare, il modo più semplice per memorizzare le informazioni è chiamato un po’. Un bit può essere un 1
o un0
. I dati in un computer sono memorizzati in gruppi di bit. In molti casi, come il 6502, il modo preferito è in un gruppo di otto (qualcosa come 0001 0101
). Questo è chiamato un byte. Possiamo anche avere un raggruppamento più piccolo di quattro bit chiamato un nibble (lol).
Per rappresentare adeguatamente i dati numerici è necessario esaminare alcuni casi. In primo luogo, inizieremo con binario senza segno., Gli otto bit (b) di un byte saranno rappresentati come:
b₇b₆b₅b₄b₃b₂b₁b₀
Contiamo i bit da destra a sinistra, indicizzando da 0. Ogni bit può essere visto come correlato a un numero binario. Il bit più a destra rappresenta 2⁰, il prossimo a sinistra è 21, quindi 22 e così via. Sarà, quindi, utile ricordare le potenze di 2, che sono:
2⁷ = 128
2⁶ = 64
2⁵ = 32
2⁴ = 16
2³ = 8
2² = 4
2¹ = 2
2⁰ = 1
Per tradurre da binario a qualcosa che riconosciamo dovremo sommare tutte le potenze appropriate di 2., Se un bit è impostato su 1
includeremo la potenza corrispondente nella nostra somma, in caso contrario la scarteremo. Questo può già sembrare complicato, ma guardando un esempio si spera aiuterà a chiarirlo. Se prendiamo il numero binario 0010 0011
possiamo vedere che gli unici bit impostati sono 0, 1 e 5. Possiamo quindi “sommarli”come tali:
b₅ + b₁ + b₀
= 2⁵ + 2¹ + 2⁰
= 32 + 2 + 1
= 35
Puoi anche provare ad andare dall’altra parte, dal decimale al binario. Lo facciamo dividendo il numero per due più volte e tracciando il resto., Il bit rimanente (che sarà sempre un 1 o uno 0) verrà mappato ai bit in un byte. Ad esempio, se dividi 35 per 2 ottieni 17 resto 1. Pertanto, il bit 0 sarà un 1. Ancora una volta, questo calcolo è meno strano di quanto sembri quando lo vedi eseguito. Proviamo di nuovo 35 (o 0010 0011
):
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
Questo metodo ci dà il risultato0010 0011
, che è esattamente quello con cui abbiamo iniziato!
Addition
Ora che siamo a nostro agio a leggere e scrivere numeri binari, vorremo provare a fare un po ‘ di matematica con loro., L’aggiunta funziona “normalmente”. Quando aggiungi due numeri normali (proviamo 9 e 2) “porti” tutto ciò che supera i dieci alla cifra successiva. Quindi, 9 + 2 ti darà 11. In binario, si esegue un processo simile. I singoli bit seguono queste regole:
0 + 0 = 0
1 + 0 = 1
0 + 1 = 1
1 + 1 =(1)0
Il (1) rappresenta un carry. È lo stesso di noi che diciamo 9 + 2 = (1)1. Usando ciò che abbiamo imparato prima di poter vedere che 10 in binario è l’equivalente di 2 in decimale, esattamente quello che ci aspetteremmo da 1 + 1!,
Se proviamo a fare 3 (0011
) + 1 (0001
) possiamo vedere un altro esempio di come funziona il trasporto in binario:
0011
+ 0̲0̲0̲1̲
0100
Possiamo vedere qui che qualcosa è stato trasportato dal 1 ° bit al 2°. Cosa succede se aggiungiamo un numero maggiore? Proviamo 128 e 129:
10000001
+̲1̲0̲0̲0̲0̲0̲0̲0̲
(1)00000001
Ora abbiamo riscontrato il nostro primo problema. Sappiamo che la risposta dovrebbe essere 257, tuttavia, guardando ciò che è nei primi 8 bit sembra che la risposta sia 1. Solo con il bit di trasporto extra la vera risposta diventa evidente., Se stiamo per salvare i nostri numeri binari in 8 bit avremo bisogno di un modo per memorizzare e tenere traccia di questo tipo di carry. Il 6502 può fare esattamente questo, uff! Il 6502 ha una serie di bandiere costruite al suo interno, una delle quali è chiamata Carry Flag. Questo può essere impostato come 1 o 0. Ogni volta che si verifica un’aggiunta per numeri binari che fanno sì che la risposta sia maggiore di 256, il flag Carry è impostato su 1. Questo ci permette di tenere traccia della nostra matematica e ci dà un modo per estendere la nostra aritmetica passato numeri a 8 bit.,
Prendiamoci un minuto per pensare a quello che abbiamo appena detto perché penso che abbia una profonda implicazione. Non è un software che terrà traccia del carry nella nostra matematica, è hardware. La bandiera carry è un registro all’interno del 6502, un “luogo reale”. Se avessi un grande microscopio potrei ingrandire ed essere in grado di dire “ehi, questo è il posto dove è memorizzato il bit di trasporto!”. Questo è ciò che penso sia davvero eccitante nell’apprendimento dell’assemblaggio 6502: ti trovi in uno spazio in cui c’è un’enorme sovrapposizione tra l’hardware che hai e il codice che sei in grado di scrivere., Questo può davvero modellare il modo di pensare alla codifica in questo sistema. Quando scrivo Python sul mio Mac ho ben poco senso di come si connette ad esso — scrivo il mio script, succede qualche magia, poi ottengo alcuni numeri indietro. Quando discuti l’assemblaggio non puoi evitare l’idea che ciò che stai facendo abbia una forte connessione con la tua macchina, lo trovo molto meno astratto.
Quindi, possiamo anche rappresentare correttamente i nostri numeri interi positivi e se includiamo un bit di trasporto i nostri numeri binari possono aggiungere correttamente. Tuttavia, ci sono due problemi:
- Possiamo contare solo fino a 255 (se usiamo solo 8 bit).,
- Possiamo rappresentare solo numeri positivi.
Dobbiamo essere in grado di risolvere quest’ultimo problema. Per fare questo introdurremo binario firmato.