binär är något som inte är nödvändigt att veta när man gör modern, hög nivå programmering. 6502 kan göra många operationer (Lägg till, subtrahera, flytta saker i minnet) som du inte behöver förstå hur binär fungerar. Men det finns operationer som vi kanske vill göra, till exempel multiplikation och splittring, vilket inte är saker som 6502 kan göra inbyggt. Vi måste själva skapa dessa funktioner. Detta kommer att kräva viss förståelse av den invecklade binära beräkning., Inte minst för att internt, 6502 kommer att representera allt i form av binär. Vi såg detta när vi diskuterade hur processorn kommer att försöka ”översätta” allt ner till binära mönster. På ett mycket minimum, att vara bekant med att läsa binära tal och med termer som bit, byte och nibble kommer att vara användbart för att förstå generellt hur 6502 fungerar. Lyckligtvis men för oss, binary är intuitivt och roligt.
Från och med nu är det enda praktiska sättet att lagra data i elektronik i form av tvåstatslogik. Något kan antingen vara ”på” eller ”av”, ”Sant”eller ” falskt”., I en dator kallas en singulär binär siffra, det mest grundläggande sättet att lagra information lite. En bit kan antingen vara en 1
eller en0
. Data i en dator lagras i grupper av bitar. I många fall, till exempel 6502, är det föredragna sättet i en grupp av åtta (något som 0001 0101
). Detta kallas en byte. Vi kan också ha en mindre gruppering av fyra bitar som kallas en nibble (lol).
för att på ett adekvat sätt representera numeriska data måste några fall undersökas. För det första kommer vi att börja med osignerad binär., De åtta bitarna (B) av en byte kommer att representeras som:
b₇b₆b₅b₄b₃b₂b₁b₀
Vi räknar bitarna från höger till vänster, indexering från 0. Varje bit kan ses som relaterad till ett binärt nummer. Den högra biten representerar 2, nästa till vänster är 21, sedan 22, och så vidare. Det kommer därför att vara användbart att komma ihåg kraften i 2, som är:
2⁷ = 128
2⁶ = 64
2⁵ = 32
2⁴ = 16
2³ = 8
2² = 4
2¹ = 2
2⁰ = 1
för att översätta från binär till något vi känner igen måste vi summera alla lämpliga befogenheter 2., Om en bit är inställd på 1
kommer vi att inkludera motsvarande effekt i vår summa, om inte vi kommer att kasta den. Detta kan redan verka komplicerat, men att titta på ett exempel kommer förhoppningsvis att hjälpa till att rensa upp det. Om vi tar binärnumret 0010 0011
kan vi se att de enda bitarna är 0, 1 och 5. Vi kan sedan ”summera” dem som sådana:
b₅ + b₁ + b₀
= 2⁵ + 2¹ + 2⁰
= 32 + 2 + 1
= 35
Du kan också försöka gå åt andra hållet, från decimal till binär. Vi gör detta genom att dela numret med två flera gånger och spåra resten., Resten bit (som alltid kommer att vara en 1 eller en 0) kommer att mappa till bitarna i en byte. Till exempel, om du delar 35 med 2 får du 17 resten 1. Därför blir bit 0 en 1. Återigen är denna beräkning mindre konstig än det låter när du ser det utfört. Låt oss försöka 35 (eller 0010 0011
) igen:
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
den här metoden ger oss resultatet0010 0011
, vilket är precis vad vi började med!
tillägg
Nu när vi är bekväma att läsa och skriva binära tal kommer vi att vilja försöka göra lite matematik med dem., Tillägg fungerar ”normalt”. När du lägger till två normala tal (Låt oss försöka 9 och 2) du ”bär” allt som går över tio till nästa siffra. Så, 9 + 2 ger dig 11. I binär utför du en liknande process. Enstaka bitar följer dessa regler:
0 + 0 = 0
1 + 0 = 1
0 + 1 = 1
1 + 1 =(1)0
(1) representerar en bärning. Det är samma som vi säger 9 + 2 = (1) 1. Med hjälp av vad vi har lärt oss innan vi kan se att 10 i binär motsvarar 2 i decimal, exakt vad vi skulle förvänta oss från 1 + 1!,
om vi försöker göra 3 (0011
) + 1 (0001
) kan vi se ett annat exempel på hur man bär på binära verk:
0011
+ 0̲0̲0̲1̲
0100
Vi kan se här något har burit från 1: a bit till 2: a. Vad händer om vi lägger till ett större antal? Låt oss försöka 128 och 129:
10000001
+̲1̲0̲0̲0̲0̲0̲0̲0̲
(1)00000001
Vi har nu stött på vårt första problem. Vi vet att svaret ska vara 257, men titta på vad som finns i de första 8 bitarna det ser ut som svaret är 1. Endast med den extra bärbiten blir det sanna svaret uppenbart., Om vi ska spara våra binära tal i 8-bitar behöver vi ett sätt att lagra och spåra denna typ av bär. 6502 kan göra exakt det, phew! 6502 har en uppsättning flaggor byggda inom den, varav en kallas Bärflaggan. Detta kan ställas in som 1 eller 0. När ett tillägg händer för binära tal som resulterar i att svaret är större än 256 bär flaggan är inställd på 1. Detta gör det möjligt för oss att hålla reda på våra matematik och ger oss ett sätt att förlänga våra aritmetiska tidigare 8-bitarsnummer.,
låt oss ta en minut men att tänka på vad vi just har sagt eftersom jag tror att det har en djupgående implikation. Det är inte programvara som kommer att hålla reda på bär i våra matematik, det är hårdvara. Bärflaggan är ett register inuti 6502, en ”faktisk plats”. Om jag hade ett stort mikroskop kunde jag zooma in och kunna säga ”hej, det är den plats där bärbiten lagras!”. Detta är vad jag tycker är riktigt spännande om att lära 6502 montering – du är i ett utrymme där det finns en enorm överlappning mellan hårdvaran du har och koden du kan skriva., Detta kan verkligen forma hur du tänker på kodning i detta system. När jag skriver Python på min Mac har jag väldigt lite känsla för hur den ansluter till den – jag skriver mitt manus, lite magi händer, då får jag några nummer tillbaka. När du diskuterar montering kan du inte undvika tanken att det du gör har en stark koppling till din maskin, tycker jag att det är mycket mindre abstrakt.
Så, vi kan också representera våra positiva heltal korrekt och om vi inkluderar en carry bit våra binära tal kan lägga till korrekt. Det finns dock två problem:
- vi kan bara räkna upp till 255 (om vi bara använder 8 bitar).,
- vi kan bara representera positiva tal.
Vi måste kunna lösa det senare problemet. För att göra detta kommer vi att introducera Signed Binary.