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