70 Zrozumieć Asembler
Program komputerowy jest binarnym ciągiem instrukcji języka maszynowego zapamiętanych w pamięci komputera. Nie istnieje żadna różnica między binarnym ciągiem instrukcji a dowolnym innym ciągiem bajtów znajdujących się w pa-mięci. Jedyna różnica wynika ze sposobu, w jaki mikroprocesor traktuje ten ciąg bajtów.
Nic bez powodu mówiłem wcześniej, że instrukcje dla mikroprocesora są kodami dwójkowymi. Mikroprocesor nie odczytuje żadnych liczb z pamięci i nie sprawdza znaczenia tych liczb. Instrukcje nie są liczbami. Instrukcje są dwójkowym wzorem wskazującym, jak mają być przełączone elektroniczne przełączniki. Cały mikroprocesor zbudowany jest z naprawdę bardzo dużej liczby tranzystorów. Pewna ich część tworzy taką tabelę wzorcową, służącą do „zrozumienia” instrukcji. Są to po prostu (w 80386 jest ich ponad milion) przełączniki połączone z innymi przełącznikami, które dalej są połączone z następnymi, tworząc specjalną sieć połączeń.
Na przykład instrukcja 01000000 (40H) poleca CPU dodanie jedynki do aktualnej wartości rejestru AX. Mikroprocesor działa następująco: bajt instrukcji pobierany z pamięci zostaje pobrany z pamięci i na jego podstawie osiem przełączników bitowych zostaje ustawionych w położenia zgodne z wartościami ośmiu bitów tego bajtu. W przypadku instrukcji 40H, siedem tych przełączników bitowych zostaje ustawionych w położeniu „wyłączony”, a jeden w położeniu „włączony”.
To odczytanie załadowanego bajtu powoduje reakcję łańcuchową przełączeń kolejnych przełączników związanych z tymi pierwszymi. Te następne wywołują przełączenia dalszych i w ten sposób w całym CPU rozprzestrzenia się fala zmian stanów przełączników tranzystorowych. Ta fala przełączeń nie jest oczywiście przypadkowa. Przebiega ona w ściśle określony sposób - określony przez zespoły inżynierskie firmy Intel. W tym przypadku po przebiegnięciu tej fali wewnątrz mikroprocesora występuje tylko jedna jedyna zmiana: w rejestrze AX nastąpiło zwiększenie dotychczasowej wartości o 1.
W mikroprocesorze utworzone są nie tylko zwykłe przełączniki, ale również tak zwane bramki (ang. gal es) - układy wykonujące operacje logiczne. Na wyjściu takich bramek pojawia się sygnał wtedy zależne od doprowadzonych do nich kilku innych (odpowiednich) sygnałów.
Zespoły bramek tworzą bardziej skomplikowane układy, takie jak np. sumatory, zadaniem których jest dodawanie liczb. W przypadku naszej lawiny przełączeń wywołanych kodem dwójkowym 01000000, następuje przeniesienie istniejącej wartości rejestru AX do odpowiedniego wejścia sumatora, a równocześnie do innego wejścia zostaje tam dostarczona liczba 1. W dalszym ciągu działania tej fali przełączeń wynik sumowania AX+1 zostanie przeniesiony z powrotem do rejestru AX.
Nie jest w końcu tak istotne, w jaki sposób pracuje mikroprocesor. Ważne jest, że gdy wpiszesz do programu odpowiednią instrukcję, to mikroprocesor wykona ją tak, jak mu to poleciłeś.
Pierwszym elementem genialnej i magicznej inteligencji komputera jest umiejętność wykonania 'lwoich poleceń krok po kroku. Drugim elementem tej magii jest umiejętność zmiany kolejności wykonywania instrukcji wskutek wyników działania innych z nich.
Mikroprocesor może więc wykonać instrukcję (lub ciąg instrukcji) tworzących jakąś użyteczną funkcję, a następnie natrafić na instrukcję, która mu nakaże np. wrócić do początku tego ciągu. Wówczas ten pożyteczny ciąg może być wykonywany wielokrotnie.
W dowolnym miejscu programu może występować ponadto dowolna instrukcja skoku nakazująca pominięcie następnych instrukcji, i przejście do wykonywania jakiejś innej części programu.
W sumie oznacza to, że program może być wykonywany w dowolnych kawałkach, powtarzanych wielokrotnie w dowolnych kolejno-ściach, wykonując żądaną funkcję komputera. Umiejętność wykonywania skoku nie jest wcale skomplikowaną funkcją. W mikroprocesorze masz specjalny rejestr o nazwie wskaźnik (licznik) instrukcji. W tym rejestrze znajduje się liczba, która jest traktowana jako adres kolejnej instrukcji. Instrukcje skoków są po prostu instrukcjami zmieniającymi zawartość tego rejestru. Do wskaźnika in-