Rozdział 1.5.1.7



Tryb baza-indeks-skala-przemieszczenie


Adresowanie baza-indeks-skala-przemieszczenie jest dalszym rozszerzeniem adresowania z rejestrem bazowym. Adres argumentu jest obliczany na podstawie: bazy zawartej w rejestrze bazowym (rejestry EAX, EBX, ECX, EDX, ESP, EBP, ESI, EDI), indeksu w rejestrze indeksowym (rejestry EAX, EBX, ECX, EDX, EBP, ESI, EDI), współczynnika skali (liczba 1, 2, 4 lub 8) i przemieszczenia umieszczonego w kodzie rozkazu.

Argument znajduje się w pamięci, a jego adres efektywny jest obliczany ze wzoru:
adres argumentu = baza + indeks * skala + przemieszczenie.

Jako przykład możemy rozpatrzyć rozkaz:
MOV EAX, [EBP + 8*EBX + 4]

Adresowanie z indeksem służy do dostępu do tablic dwuwymiarowych o rozmiarze elementu określonym przez skalę. Jeżeli offset początku tablicy w segmencie zapisany jest w rozkazie (przemieszczenie), adres początku bieżącego wiersza w rejestrze bazowym, a indeks kolumny w rejestrze indeksowym, to adres efektywny wskazuje odpowiedni element tablicy umieszczonej w pamięci w kolejności wierszowej. Skala 1 daje tablice bajtowe, skala 2 - tablice słów 16b, skala 4 - tablice słów podwójnych 32 b, a skala 8 - tablice słów poczwórnych 64 b.


W trybie tym dostęp do argumentu wymaga następujących czynności:
  • Pobrania przemieszczenia i skali z pola rozkazu, bazy i indeksu z odpowiednich rejestrów,
  • Obliczenia adresu efektywnego przez dodanie przemieszczenia, bazy i indeksu pomnożonego przez skalę,
  • Dostępu do pamięci (cykl maszynowy) - wystawienia adresu argumentu na szynę adresową, pobrania argumentu z szyny danych (przy odczycie) lub zapisania argumentu z szyny danych do pamięci (przy zapisie).


Powrót do rozdziału 1
Powrót do strony głównej