1. Co robi komputer?
Jak wiemy, typowy zestaw komputerowy składa się z procesora, pamięci operacyjnej
(umieszczonych na płycie głównej) oraz urządzeń zewnętrznych, z których
niektóre są lub mogą być zintegrowane z płytą (karta graficzne, sterowniki
dysków i dyski, karta dźwiękowa, karta sieciowa, modem, monitor itp.). O tych
elementach komputera mówimi jako o sprzęcie (hardware).
Odpowiedź jest negatywna. Nie wystarczy (nawet najnowocześniejszy)
sprzęt. Program jest zakodowaną sekwencją instrukcji,
które ma wykonać procesor (lub za jego pośrednictwem inne elementy sprzętowe).
Na przykład pisanie i redagowanie tekstów może się odbywać tylko dzięki temu, że działa odpowiedni program - edytor lub procesor tekstów. Programy takie są skomplikowane, często bardzo duże, ale w sumie sprowadzają się do pewnych sekwencji prostych instrukcji zlecanych do wykonania sprzętowi (przede wszystkim procesorowi). Mówi się powszechnie, że instrukcje wykonuje program. Np. "program wykonał błędną instrukcję i nie może być kontynuowany". Takie sformułowania są wygodne i w pewnym sensie poprawne, pamiętajmy jednak o tym, że instrukcje są przekazywane do wykonania procesorowi.
Kiedy zatem siedzimy przed "czystą kartką" jakiegoś dokumentu i zastanawiamy się jak zacząć pisanie, to jakaś część działającego akurat programu-edytora śledzi klawiaturę (czeka na wprowadzenie znaku z klawiatury), a kiedy wciśniemy klawisz jakiegoś znaku - wykonuje instrukcje skutkujące w uwidocznieniu w określony sposób (rodzaj, wielkość, kolor pisma) tego znaku na ekranie monitora. Zatem wykonanie programu polega na przekazywaniu instrukcji procesorowi. Ale przecież nie zawsze program się wykonuje. Co się wtedy z nim dzieje? Co musi się stać, żeby zaczął działanie? Programy (jako zapisane ciągi instrukcji) rezydują na dysku twardym. Uruchomienie programu polega na załadowaniu go do pamięci operacyjnej i przekazaniu sterowania do pierwszej jego instrukcji. Tym zajmuje się specjalne oprogramowanie systemowe i wspomagające. Bez niego komputer nie mógłby działać, nie mógłby komunikować się z użytkownikiem, nie mógłby wykonywać - na jego zlecenie - określonych programów. Możemy zatem w tej chwili już z pewnością stwierdzić, że działanie komputera polega po prostu na wykonywaniu programow - czy to systemowych, czy to użytkowych. Wszystkie programy komunikują się z procesorem w specjalnym języku. "Słowa"
tego języka to liczby. Niektóre z tych liczb mają specjalne znaczenie -
właśnie kodów instrukcji do wykonania (warto dodać, że bardzo prostych
instrukcji; złożone programy składają się z bardzo dużej liczby takich prostych
instrukcji). Inne liczby oznaczają dodatkową informację, która jest potrzebna
przy wykonaniu instrukcji. Ta dodatkowa informacja stanowi zwykle dane nad
którymi przeprowadzane są jakieś operacje (np. dodawanie liczb). Przykładowa sekwencja instrukcji maszynowych hipotetycznego komputera
może wyglądać tak:
10001010 10001000 00000001 11001010 ..... Cóż to za dziwne liczby składające się z samych zer i jedynek? Z tego wynika, że Ważną rolę w informatyce odgrywa bajt. Słowo maszynowe - to najmniejsza, adresowalna komórka pamięci
operacyjnej, jak również - odpowiadający tej wielkości rozmiar rejestrów
procesora, czyli specjalnego wewnętrznego układu pamięciowego, o bardzo
szybkim dostępie, w którym procesor przechowuje chwilowo dane aktualnie
wykonywanych operacji
W szczególności dlatego, że procesory operują na jednostkach, które nazywają się słowami maszynowymi, składających się z całkowitej liczby bajtów. Bajt jest najmniejszszą częścią słowa maszynowego, dostępną bezpośrednio dla procesora. Kody instrukcji procesorów były i są jedno lub kilkubajtowe. Znaki (litery) były i są kodowane jako liczby jedno (np. kody ASCII, EBCDIC) lub wielo - bajtowe (np. DCSB lub Unicode). A ponieważ pół bajta można przedstawić jako cyfrę szesnastkową, to heksadecymalny system liczbowy jest wygodniejszą (od binarnego, bo jest bardziej czytelny; ale i od dziesiętnego, bo widzimy w nim wyraźny podział na bajty) formą przedstawiania zapisu maszynowego kodu programu.
Oczywiście, można napisać program w języku maszynowym. Ale domyślamy się, że jest to zadanie niezwykle pracochlonne, a pisanie w taki sposób programów - niezwykle niefektywne. A jednak - na samym początku epoki komputerów tak właśnie pisano programy. Na pomoc biednym programistom pionierskiej epoki komputeryzacji przyszło stworzenie asemblerów - języków symbolicznego zapisu instrukcji maszynowych danego procesora. Od tego momentu, program, który wcześniej trzeba było zapisywać np. tak: 5830 D252 5A30 D256 5030 D260 można było zapisać dużo prościej i bardziej zrozumiale, np:
Taki zapis - bardziej zrozumiały dla nas - jest jednak niezrozumiały
dla procesora. Programy zapisane w symbolicznym języku assemblera, muszą
być przetłumaczone na język maszynowy (ciąg cyfr binarnych) i tym zajmują
się translatory (czasem zwane potocznie również assemblerami).. Wszakże programowanie w języku assemblera jest wciąż uciążliwe. Co gorsza obarcza ono programistę obowiązkiem pamiętania różnych technicznych szczegółów (rejestry, ich numery, adresowanie pamięci), wymaga od niego zapisywania bardzo elementarnych operacji i nie pozwala dostatecznie skupić się na dziedzinie i logice rozwiązywanego (przez program) problemu. W istocie w powyższym "programiku" chodzi o dodanie do siebie dwóch liczb
(oznaczonych X i Y) i zapisanie wyniku jako Z. Z = X + Y ? Dlatego pojawiły się języki programowania (ściślej - i dla odróżnienia
od języków assemblera - języki programowania wysokiego poziomu), które
w swoich instrukcjach, składni, semantyce konsolidują wiele prostych instrukcji
assemblerowych, ukrywają ich techniczne szczegóły, i - w porównaniu z
assemblerami - są składniowo niezależne od procesora. W tych językach
naprawdę możemy napisać: Z = X + Y, nie martwiąc się rejestrami, względnym
adresowaniem pamięci i zestawem rozkazów konkretnego procesora.
|