14 Zrozumieć Asembler
Bardzo ważną rolę spełniają (miejscami dziwne) numery znajdujące się z lewej strony instrukcji programu oraz danych. Każdy z tych numerów jest niepowtarzalny, co znaczy, że dowolny numer oznaczający jakieś pole (komórkę pamięci) pojawia się tylko jeden raz. Taki numer nazywa sic adresem. Wszelkie dane są zapamiętywane lub odczytywane tylko za pośrednictwem ich adresu w obrębie pamięci komputera. Procedury są wywoływane przez podanie adresu komórki, od której się zaczynają.
Prostokącik (czyli komórka pamięci) o nazwie LICZNIK PROGRAMU przechowuje adres instrukcji, która ma być wykonana bezpośrednio po zakończeniu wykonania aktualnej instrukcji. Liczba przechowywana w liczniku programu jest zwiększana o 1 po zakończeniu wykonywania każdej instrukcji, chyba że wykonywana instrukcja programu nakaże licznikowi programu wykonać coś inne-
8°-
Zwróć uwagę na instrukcję JUMP BACK 7, znajdującą się pod adresem 0049- Po wykonywaniu lej instrukcji licznik programu zostaje zmniejszony o siedem. Jest to odpowiednik polecenia „cofnij się o siedem pól”, występującego we wszystkich grach planszowych.
Jak na razie tyle wyjaśnień dotyczących gry w Asembler zupełnie wystarczy To jest w dalszym ciągu rozdział 0 i w dalszym ciągu znajdujemy się w zakresie metafor, czyli porównań. Czytelnicy, którzy mieli więcej do czynienia z komputerami, rozpoznają na pewno więcej szczegółów na rysunku 0.2. (Jest to w rzeczywistości prawdziwy program, który wykonuje określoną czynność, możesz to sprawdzić!) Czytelnicy, którzy nie mieli styczności z wewnętrznym działaniem komputera, nie powinni czuć się zdeprymowani czy zagubieni. Utworzyłem tę grę w Asemblera tylko w celu podkreślenia kilku podstawowych zasad:
■ Poszczególne kroki są bardzo proste. Pojedyncza instrukcja jedynie w wyjątkowych wypadkach czyni coś więcej niż przeniesienie pojedynczego bajtu z jednej komórki do innej czy porównanie wartości danych zawartych w dwóch różnych komórkach. To jest dobra nowina, ponieważ będziesz mógł koncentrować się na prostych czynnościach wykonywanych w pojedynczych instrukcjach,
bez zagłębiania się w złożone problemy. Ale równocześnie mamy tu i złą nowinę...
■ Dla wykonania czegokolwiek użytecznego trzeba napisać dużo instrukcji. W Pascalu czy Basicu można napisać użyteczny program nawet w pięciu czy sześciu linijkach. Użyteczny programik w Asemblerze nie będzie nigdy krótszy niż powiedzmy 50 linii, a cokolwiek poważniejszego wymaga ich setek czy tysięcy. Umiejętność tworzenia programu w języku Asemblera sprowadza się do umiejętności uporządkowania tych setek czy tysięcy instrukcji tak, żeby ten program mógł być odczytywany i zrozumiały. I wreszcie:
■ Kluczem do programowania w Asemblerze jest dobre zrozumienie adresowania pamięci. W językach takich jak Pascal czy Basic troskę o to, gdzie ma być lub została umieszczona taka czy inna dana, przejmuje kompilator tego języka. Ty nadajesz temu czemuś własną nazwę i polem wywołujesz to nazwę tę podając. W Asemblerze Ty podajesz tylko numery komórek i musisz zawsze wiedzieć, gdzie się co znajduje, a także, jakie komórki są wolne. Przy czytaniu tej książki zawsze zwracaj uwagę na adresowanie, to znaczy patrz, gdzie co się znajduje. Gra w Asemblera zawiera wiele instrukcji, które operują adresami. (Na przykład MOVE dane z [B] do [C] oznacza przeniesienie danych zapamiętanych pod adresem wskazanym w rejestrze B pod adres określony w rejestrze C.) Adresowanie jest najbardziej skomplikowaną częścią programowania w Asemblerze, ale gdy już je opanujesz, to będziesz miał programowanie w małym palcu.
Wszystkie informacje zawarte w tym rozdziale mają charakter orientacyjny. Próbowałem tu przedstawić pełny zarys programowania
w Asemblerze i powiązać jego podstawowe zasady z życiem codzien-
*
nym. Zycie jest tylko ciągiem kroków i sprawdzeń. To samo mamy w grach planszowych i to samo jest w języku Asemblera. Pamiętaj o tych porównaniach, gdy zaczniemy się zagłębiać w gąszcz liczb, którymi operują komputery.