binární je něco, co není nutné vědět, když děláte moderní programování na vysoké úrovni. 6502 může provádět mnoho operací (přidat, odečíst, přesouvat věci v paměti), pro které nebudete muset pochopit, jak binární funguje. Existují však operace, které bychom chtěli dělat, jako je násobení a dělení, což nejsou věci, které 6502 může dělat nativně. Tyto funkce musíme vytvořit sami. To bude vyžadovat určité pochopení složitosti binárního výpočtu., V neposlední řadě proto, že interně bude 6502 představovat vše ve formě binárního. Viděli jsme to, když jsme diskutovali o tom, jak se procesor pokusí „přeložit“ vše na binární vzory. Přinejmenším bude užitečné seznámit se s čtením binárních čísel as pojmy jako bit, byte a nibble, abychom obecně pochopili, jak 6502 funguje. Naštěstí pro nás, binární je intuitivní a zábavné.
zatím je jediný praktický způsob ukládání dat v elektronice ve formě dvoustavové logiky. Něco může být buď “ On „nebo“ Off“,“ True „nebo“False“., V počítači je singulární binární číslice, nejzákladnější způsob ukládání informací se nazývá bit. Bit může být buď 1
nebo 0
. Data v počítači jsou uložena ve skupinách bitů. V mnoha případech, jako je 6502, je preferovaný způsob ve skupině osmi (něco jako 0001 0101
). Tomu se říká byt. Můžeme mít také menší seskupení čtyř bitů nazývaných nibble (lol).
Chcete-li adekvátně reprezentovat číselná data, je třeba se podívat na několik případů. Za prvé, začneme s nepodepsaným binárním kódem., Osmi bitů ( b ) jeden bajt bude reprezentován jako:
b₇b₆b₅b₄b₃b₂b₁b₀
počet bitů zprava doleva, indexování od 0. Každý bit lze považovat za příbuzný binárnímu číslu. Pravý bit představuje 2⁰, další vlevo je 21, pak 22 a tak dále. Bude proto užitečné pamatovat si pravomoci 2, které jsou:
2⁷ = 128
2⁶ = 64
2⁵ = 32
2⁴ = 16
2³ = 8
2² = 4
2¹ = 2
2⁰ = 1
přeložit z binárního na něco, co uznáváme, budeme muset shrnout všechny příslušné pravomoci 2., Pokud je bit nastaven na 1
, zahrneme odpovídající výkon do našeho součtu, pokud ne, zlikvidujeme jej. To se již může zdát komplikované, ale při pohledu na příklad to snad pomůže vyčistit. Pokud vezmeme binární číslo 0010 0011
vidíme, že pouze bity jsou 0, 1 a 5. Můžeme pak „součet“ je jako takový:
b₅ + b₁ + b₀
= 2⁵ + 2¹ + 2⁰
= 32 + 2 + 1
= 35
můžete také zkusit jít na druhou stranu, z desítkové do binární. Děláme to dělením čísla dvakrát vícekrát a sledováním zbytku., Zbývající bit (který bude vždy 1 nebo 0) bude mapovat na bity v bajtu. Pokud například rozdělíte 35 na 2, získáte 17 zbývajících 1. Proto bude bit 0 1. Opět platí, že tento výpočet je méně zvláštní, než to zní, když vidíte, že provádí. Zkusme 35 (nebo 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
Tato metoda nám dává výsledek0010 0011
, což je přesně to, co jsme začali s!
sčítání
nyní, když jsme pohodlné čtení a psaní binárních čísel budeme chtít, aby se pokusili udělat nějakou matematiku s nimi., Sčítání funguje „normálně“. Když přidáte dvě normální čísla (zkusme 9 a 2) „carry“ všechno, co jde nad deset na další číslici. Takže 9 + 2 vám dá 11. V binárním provedení provádíte podobný proces. Jednotlivé bity se řídí těmito pravidly:
0 + 0 = 0
1 + 0 = 1
0 + 1 = 1
1 + 1 =(1)0
(1) představuje přenos. Je to stejné, jako když říkáme 9 + 2 = (1)1. Pomocí toho, co jsme se naučili, než uvidíme, že 10 v binárním je ekvivalent 2 v desetinném čísle, přesně to, co bychom očekávali od 1 + 1!,
Pokud se budeme snažit udělat 3 (0011
) + 1 (0001
) můžeme vidět další příklad toho, jak nese v binární práce:
0011
+ 0̲0̲0̲1̲
0100
můžeme tady vidět něco provedla od 1. bit 2. Co když přidáme větší číslo? Zkusme 128 a 129:
10000001
+̲1̲0̲0̲0̲0̲0̲0̲0̲
(1)00000001
nyní jsme se setkali s naším prvním problémem. Víme, že odpověď by měla být 257, nicméně, při pohledu na to, co je v prvních 8 bitů vypadá to, že odpověď je 1. Pouze s extra carry bit se skutečná odpověď projeví., Pokud budeme ukládat naše binární čísla do 8 bitů, budeme potřebovat způsob, jak tento typ přenosu uložit a sledovat. 6502 to dokáže přesně, phew! 6502 má v sobě sadu vlajek, z nichž jeden se nazývá vlajka. To lze nastavit jako 1 nebo 0. Kdykoli dojde k přidání pro binární čísla, která vedou k tomu, že odpověď je větší než 256, je příznak Carry nastaven na 1. To nám umožňuje sledovat naši matematiku a dává nám způsob, jak rozšířit naše aritmetické minulé 8bitové čísla.,
pojďme chvíli přemýšlet o tom, co jsme právě řekli, protože si myslím, že to má hluboký dopad. Není to software, který bude sledovat přenos v naší matematice, je to hardware. Carry flag je registr uvnitř 6502, „skutečné místo“. Kdybych měl velký mikroskop, mohl bych se přiblížit a říct: „Hej, to je místo, kde je uložen přenosový bit!”. To je to, co myslím, že je opravdu vzrušující o učení 6502 shromáždění — jsou v prostoru, kde je obrovský přesah mezi hardware, který máte a kód jste schopni napsat., To může skutečně utvářet způsob, jakým přemýšlíte o kódování v tomto systému. Když píšu Python na mém počítači Mac, mám velmi malý smysl pro to, jak se k němu připojuje — píšu svůj skript, nějaké kouzlo se stane, pak dostanu nějaká čísla zpět. Když diskutujete o montáži, nemůžete se vyhnout myšlence, že to, co děláte, má silné spojení s vaším strojem, považuji to za mnohem méně abstraktní.
takže můžeme také reprezentovat naše pozitivní celá čísla správně a pokud zahrneme přenos bit naše binární čísla mohou přidat správně. Existují však dva problémy:
- můžeme počítat pouze do 255 (pokud používáme pouze 8 bitů).,
- můžeme reprezentovat pouze kladná čísla.
musíme být schopni vyřešit druhý problém. Za tímto účelem představíme podepsaný binární soubor.