KAP1 KAP1
646
BLOG

0A. Natura najmniejszej porcji informacji

KAP1 KAP1 Nauka Obserwuj temat Obserwuj notkę 40

W dyskusji przy ostatniej notce SławekP zapytał mnie, dlaczego faworyzuję system binarny, składający się tylko z cyfr 0 i 1. Zrobiłem to, ponieważ w tym systemie działają wszystkie komputery działające w architekturze von Neumana (współczesne pecety), w których pamięć składa się z ciągów zer i jedynek, które są potem odczytywane jako liczby (dziesiętne czy szesnastkowe.

  • W systemie dziesiętnym, cyfry mogą przyjmować wartości: 0,1,2,3,4,5,6,7,8,9.
  • W systemie dwójkowym, cyfry mogą przyjmować wartości: 0,1

W systemie dziesiętnym, kolejne liczby tworzy się podczas dodawanie kolejnych cyfr z kolejnymi potęgami dziesięciu, przykłady:

  • 12 = 1 * 10^1 + 2 * 10^0 = 1 * 10 + 2 = 10 + 2
  • 54 = 5 * 10^1 + 4 * 10^0 = 5 * 10 + 4 = 50 + 4

W systemie binarnym jest podobnie, ale tutaj podstawą systemu jest liczba cyfr równa 2:

  • 10 = 1 * 2^1 + 0 * 2^0 = 1 * 2 + 0 = 2 + 0 = 2
  • 1010 = 1 * 2^3 + 0 * 2^2  + 1 * 2^1 + 0 * 2^0 = 8 + 2 = 10

Jeszcze do dzisiaj, mimo że nie używam już tak intensywnie jak kiedyś, mogę z pamięci wyrecytować kolejne potęgi dwójki, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536...

 

Jako 17-letnie dziecko, jeszcze w czasach komputerów ośmiobitowych lubiłem grzebać w kodzie gier, aby sprawdzać "co się stanie gdy". Sprowadzało się to tak naprawdę do poszukiwania nieśmiertelności w grach. Kilka razy nawet wydrukowano wynik moich eksperymentów w magazynie Top Secret, z czego jakże byłem wtedy dumny. Programy miały maksymalnie 64kB (= 64 * 1024 bajty= 64 * 1024 * 8 bitów), a większość nawet po 16kB. Można je było łatwo ogarnąć rozumem. Nawet lista rozkazów procesora Z80 mieściła się na jednej kartce.

Przykładowo LD A, * oznaczał: załaduj (LoaD) liczbę zapisaną w kolejnym bajcie do akumulatora, czy inaczej rejestru A (rejestr to zmienna przechowywana bezpośrednio w procesorze). Oczywiście w pamięci komputera nie było symbolicznych napisów typu LD A, 2, a zamiast tego miałem doczynienia z ciągiem cyfr binarnych. LD A, 2 to inaczej 11111110 (rozkaz LD A, *) 00000010 (liczba 2).

Zmieniając teraz liczbę w kolejnym bajcie i uruchamiając grę, można było obserwować np. mniejszą liczbę śmiercionośnych obiektów na ekranie :) Znajdowanie nieśmiertelności najczęściej sprowadzało się do poszukiwania jednego z rozkazów DEC (DECrement, zmniejsz rejestr o 1) lub INC (INCrement, zwiększ rejestr o 1) i zamiany go na NOP (No OPeration, nic nie rób), dzięki czemu liczba żyć naszego bohatera nie była odejmowana.

W szczególnych przypadkach, zmiana jednego bitu w całej pamięci (całym "świecie", w którym działał program) mogła zdecydować o nieśmiertelności, np.  ADD A, 1 (11000110 00000001) - dodaj jeden do akumulatora, zmienione na ADD A, 0 (11000110 00000000) - dodaj 0 do akumulatora powodowało utrzymanie status quo w grze. Podczas przypominania sobie rozkazów posiłkowałem się opracowaniem dostępnym tutaj.

 

Zwracam uwagę, że w przypadku komputera system dziesiętny się nie sprawdza, bo np. największą liczbą zapisaną w bajcie, najmniejszej komórce pamięci złożonej z ośmiu bitów jest ni przypiął ni przyłatał 255. Co z tym fantem zrobić? Może do komunikacji pomiędzy informatykami system 256-tkowy? Wymagałby on aż 256 symboli dla każdej cyfry, a jako że my chińczykami nie jesteśmy, zdecydowano się podzielić bajt na dwie liczby 16 * 16 = 256. Tak powstał system szesnastkowy, składający się z cyfr 0,1,2,3,4,5,6,7,8,9,A (10), B (11), C (12), D (13), E (14), F (15). Od tej pory zamiast 11110000 można powiedzieć F0, a chyba każdy rasowy informatyk będzie wiedział co to za liczba.

Niezależnie od tego jakim systemem byśmy się nie porozumiewali, każdą liczbę można sprowadzić do systemu dwójkowego. Pojedynczy bit, przyjmujący wartości 0 albo 1 jest najmniejszą porcją informacji. Zmiana wartości bitu z zera na jeden lub odwrotnie następuje w komputerach programowo (nikt nie wchodzi do procesora i nie przestawia jakichś tajemnych zworek. Innymi słowy program "nie widzi" fizycznej maszynerii procesora, takiej jak zasilacz czy wiatraczek przy procesorze. Program operuje na bitach.

Szukając nieśmiertelności w grach uruchamiałem jeden program, by zmienił strukturę bitów drugiego programu. W kolejnej notce odniosę się do wykładu VI Stanisława Hellera, a na zakończenie rysunek złożony z coraz większej liczby bitów.

 

 

KAP1
O mnie KAP1

Nowości od blogera

Komentarze

Inne tematy w dziale Technologie