Binary to coś, o czym nie trzeba wiedzieć, wykonując nowoczesne programowanie na wysokim poziomie. 6502 może wykonywać wiele operacji (dodawać, odejmować, przenosić rzeczy w pamięci), dla których nie musisz rozumieć, jak działa binarny. Są jednak operacje, które możemy chcieć wykonać, takie jak mnożenie i dzielenie, które nie są rzeczami, które 6502 może wykonać natywnie. Musimy sami tworzyć te funkcje. Będzie to wymagało pewnego zrozumienia zawiłości obliczeń binarnych., Nie tylko dlatego, że wewnętrznie, 6502 będzie reprezentować wszystko w postaci binarnej. Widzieliśmy to, gdy rozmawialiśmy o tym, jak procesor będzie próbował „przetłumaczyć” wszystko na wzorce binarne. Znajomość odczytu liczb binarnych i pojęć takich jak bit, bajt i nibble będzie przydatna do ogólnego zrozumienia, jak działa 6502. Na szczęście dla nas binary jest intuicyjny i zabawny.
obecnie jedynym praktycznym sposobem przechowywania danych w elektronice jest dwustanowa logika. Coś może być „włączone” lub „wyłączone”, „prawda” lub „FAŁSZ”., W komputerze pojedyncza cyfra binarna, najbardziej podstawowy sposób przechowywania informacji nazywa się bitem. Bit może być albo 1
lub 0
. Dane w komputerze są przechowywane w grupach bitów. W wielu przypadkach, takich jak 6502, preferowany sposób jest w grupie ośmiu (coś w rodzaju 0001 0101
). To się nazywa bajt. Możemy również mieć mniejszą grupę czterech bitów zwaną skubaniem (lol).
aby odpowiednio reprezentować dane liczbowe, należy przyjrzeć się kilku przypadkom. Po pierwsze, zaczniemy od unsigned binary., Osiem bitów (b ) jednego bajtu będzie reprezentowane jako:
b₇b₆b₅b₄b₃b₂b₁b₀
liczymy bity od prawej do lewej, indeksujemy od 0. Każdy bit może być postrzegany jako związany z liczbą binarną. Najbardziej prawy bit reprezentuje 2♣, Następny po lewej to 21, potem 22 i tak dalej. Dlatego warto zapamiętać potęgi 2, które są następujące:
2⁷ = 128
2⁶ = 64
2⁵ = 32
2⁴ = 16
2³ = 8
2² = 4
2¹ = 2
2⁰ = 1
aby przetłumaczyć z binarnego na coś, co uznajemy, musimy zsumować wszystkie odpowiednie potęgi 2., Jeśli bit jest ustawiony na 1
dodamy odpowiednią moc do naszej sumy, jeśli nie, odrzucimy ją. Może to już wydawać się skomplikowane, ale patrząc na przykład, miejmy nadzieję, pomoże to wyjaśnić. Jeśli weźmiemy liczbę binarną 0010 0011
możemy zobaczyć, że ustawione bity to 0, 1 i 5. Następnie możemy „zsumować” je w taki sposób:
b₅ + b₁ + b₀
= 2⁵ + 2¹ + 2⁰
= 32 + 2 + 1
= 35
Możesz również spróbować przejść w drugą stronę, od dziesiętnego do binarnego. Robimy to, dzieląc liczbę przez dwa razy i śledząc resztę., Pozostały bit (który zawsze będzie 1 lub 0) będzie mapowany do bitów w bajcie. Na przykład, jeśli podzielisz 35 przez 2, otrzymasz 17 reszty 1. Dlatego bit 0 będzie 1. Ponownie, obliczenia te są mniej dziwne, niż się wydaje, gdy widzisz, że są wykonywane. Spróbujmy 35 (lub 0010 0011
) ponownie:
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
ta metoda daje nam wynik0010 0011
, od czego dokładnie zaczęliśmy!
dodawanie
teraz, gdy jest nam wygodnie czytać i pisać liczby binarne, będziemy chcieli spróbować zrobić z nimi trochę matematyki., Dodatek działa „normalnie”. Po dodaniu dwóch normalnych liczb (spróbujmy 9 i 2) „przenosisz” wszystko, co idzie powyżej dziesięciu do następnej cyfry. Więc 9 + 2 da ci 11. W systemie binarnym wykonujesz podobny proces. Pojedyncze bity są zgodne z następującymi zasadami:
0 + 0 = 0
1 + 0 = 1
0 + 1 = 1
1 + 1 =(1)0
(1) reprezentuje przenoszenie. To tak samo jak my mówimy 9 + 2 = (1)1. Używając tego, czego nauczyliśmy się wcześniej, widzimy, że 10 w binarnym jest odpowiednikiem 2 w dziesiętnym, dokładnie tego, czego oczekujemy od 1 + 1!,
jeśli spróbujemy wykonać 3 (0011
) + 1 (0001
) możemy zobaczyć inny przykład jak działa przenoszenie w systemie binarnym:
0011
+ 0̲0̲0̲1̲
0100
możemy zobaczyć tutaj coś zostało przeniesione z pierwszego bitu do drugiego. Co jeśli dodamy większą liczbę? Spróbujmy 128 I 129:
10000001
+̲1̲0̲0̲0̲0̲0̲0̲0̲
(1)00000001
napotkaliśmy nasz pierwszy problem. Wiemy, że odpowiedź powinna wynosić 257, jednak patrząc na to, co jest w pierwszych 8 bitach, wygląda na to, że odpowiedź wynosi 1. Dopiero z dodatkowym bitem przenoszenia prawdziwa odpowiedź staje się widoczna., Jeśli mamy zapisywać nasze liczby binarne w 8-bitach, będziemy potrzebować sposobu na przechowywanie i śledzenie tego typu przenoszenia. 6502 może to zrobić, UFF! 6502 posiada wbudowany zestaw flag, z których jedna nosi nazwę Carry Flag. Można to ustawić jako 1 lub 0. W przypadku dodawania liczb binarnych, które powodują, że odpowiedź jest większa niż 256, Flaga Carry jest ustawiona na 1. To pozwala nam śledzić naszą matematykę i daje nam sposób na rozszerzenie naszej arytmetyki ponad 8-bitowe liczby.,
zastanówmy się nad tym, co właśnie powiedzieliśmy, ponieważ myślę, że ma to głębokie implikacje. To nie jest oprogramowanie, które będzie śledzić przenoszenie w naszej matematyce, to jest sprzęt. Flaga carry jest rejestrem wewnątrz 6502, „rzeczywistego miejsca”. Gdybym miał duży mikroskop, mógłbym powiększyć i powiedzieć: „Hej, to miejsce, w którym jest przechowywany bit do przenoszenia!”. To jest to, co moim zdaniem jest naprawdę ekscytujące w nauce 6502 assembly-znajdujesz się w przestrzeni, w której istnieje ogromne nakładanie się między sprzętem, który masz, a kodem, który jesteś w stanie napisać., To może naprawdę kształtować sposób myślenia o kodowaniu w tym systemie. Kiedy piszę Pythona na moim Macu, mam bardzo małe poczucie, jak się z nim łączy — piszę mój skrypt, dzieje się jakaś magia, potem dostaję kilka liczb z powrotem. Kiedy dyskutujesz o montażu, nie możesz uniknąć idei, że to, co robisz, ma silny związek z Twoją maszyną, uważam to za znacznie mniej abstrakcyjne.
Tak więc, możemy również poprawnie reprezentować nasze dodatnie liczby całkowite i jeśli dodamy bit carry, nasze liczby binarne mogą być dodawane poprawnie. Są jednak dwa problemy:
- możemy liczyć tylko do 255 (jeśli używamy tylko 8 bitów).,
- możemy reprezentować tylko liczby dodatnie.
musimy być w stanie rozwiązać ten drugi problem. W tym celu wprowadzimy podpisany plik binarny.