60 Zrozumieć Asembler
Dawno już minęły te czasy, kiedy komputer zadowalał się tylko jedną kostką pamięci. Mój biedny COSMAC ELF już potrzebował dwóch kostek. Współczesne komputery wymagają ich dziesiątki, a nawet setki. Żeby móc dobrze programować w Asemblerze, musisz w pełni zrozumieć organizację pamięci. Istnieje szereg różnych sposobów organizacji przy pomocy różnych kostek pamięci. Ja opiszę tutaj system zastosowany w komputerach typu IBM PC w odmianach PC, XT, AT, PS/2 i całym peletonie klonów.
Sposób fizycznej organizacji kostek pamięci zależy przede wszystkim od sposobu organizacji informacji zawartej w komputerze. Jednym z podstawowych elementów organizacji jest bajt (ang. by te). Nie bez powodu to słowo wymieniane jest na czołowym miejscu w całej literaturze i czasopismach komputerowych. Funkcjonalnie pamięć mierzona jest w bajtach, a nie w bilach. Jeden bajt równy jest 8 bitom. Dwa bajty jeden obok drugiego tworzą słowo (dwa razy 8 bilów). Dwa słowa jedno obok drugiego tworzą podwójne słowo (cztery bajty). Istnieją jeszcze inne terminy: poczwórne słowo czy nybble, ale z nimi będziesz miał znacznie mniej do czynienia.
Komputer został stworzony do przechowywania i przetwarzania informacji dla człowieka. Podstawowym elementem informacji dla człowieka są symbole zawierające litery alfabetu (wielkie i osobno małe), cyfry i szereg innych symboli, jak np. przecinek, dwukropek, kropka, wykrzyknik itd. Dodając do tego różne odmiany liter w poszczególnych językach oraz np. specjalne symbole matematyczne, uzyskasz zestaw niezbędnych znaków, który będzie zawierał ponad 200 symboli (zestaw symboli używanych w komputerach PC znajduje się w załączniku A).
Jeden bajt, czyli 8 bitów, może przechować 2*, czyli 256 różnych informacji- Dlatego też bajt jest podstawowym elementem informacji przetwarzanych w komputerze. Oznacza to, że binarna liczba 8-bito-wa (bajt), może przybierać (a w pamięci przechowywać) jedną z 256 różnych wartości: od 0 do 255. Z wyjątkiem bardzo specjalizowanych komputerów, w większości przypadków przetwarzanie informacji w komputerze odbywa się w jednostkach bajtowych. Nowsze (i szybsze) komputery mogą już naraz przetwarzać całe słowa, czy nawet podwójne słowa.
Jednym z najbardziej denerwujących początkujących programistów faktów jest ten, że jednomegabitowa kość pamięci nie może przechować ani jednego bajtu tylko... właśnie - 1 048 576 bitów. Pamiętaj, że większość istniejących kości pamięci ma tylko jedną linię danych. Jeżeli chcielibyśmy przechowywać bajty w istniejących kostkach RAM jeden za drugim, trzeba by je zapisywać i odczytywać w ośmiu kolejnych cyklach roboczych.
Istnieje możliwość ośmiokrotnego przyspieszenia odczytu czy zapisu. Każdy z ośmiu bitów jednego bajtu danych zapisany jest w osobnej kości RAM, ale w każdej z nich pod tym samym adresem. W ten sposób przy doprowadzeniu jednego adresu do linii wszystkich ośmiu kostek RAM, na ich liniach danych pojawia się równocześnie osiem bitów danych. Czas dostępu wynosi 80 nanosekund, a nie 640. Taka organizacha pamięci przedstawiona jest na rysunku 2.3. Jak z tego widać, komórka pamięci przechowująca jeden bajt, fizycznie wcale nie jest jakimś jednym miejscem. Faktycznie jest to zbiór ośmiu „komóreczek”, przechowujących po jednym bicie. Ponieważ jednak wszystkie te „komóreczki” (znajdujące się w ośmiu różnych kostkach) mają ten sam adres i przechowują bity tego samego bajtu, to z punktu widzenia programisty będzie całkowicie poprawna nazwa „komórka” jako równoważnik jednego adresu.
Zestaw ośmiu kostek nazywamy bankiem pamięci, natomiast pojemność takiego banku zależy od rodzaju układów scalonych, z których bank jest zbudowany. Zestaw ośmiu kostek 64k bitów zawiera 64 kilobajtów. Bank ośmiu kostek 256k będzie zawierał 256 kilobajtów.