V
60 Asembler. Poradnik użytkownika
Segment
danych
\oooo ( V)ooi | ||
[8B | ||
1A8B 0002 |
L1A | |
0004 |
Rysunek 6.4. Tryb adresowania bezpośredniego
Do rejestru AX ładowana jest zawartość komórki pamięci z daną o nazwie Tablica 1.
Segment
danych
\oooo , 0001 | ||
[8B | ||
1A8B AX 0002 |
1A | |
0004 |
TABLICA1
TABLICA1+2
Rysunek 6.5. Tryb adresowania pośredniego poprzez rejestr
W trybie adresowania pośredniego poprzez rejestr adres efektywny argumentu znajduje się w rejestrze bazowym BX lub we wskaźniku bazy BP (wskaźnik bazy BP odnosi się do rejestru SS) albo w rejestrze indeksowym SI lub DI. Rejestry, które są argumentami pośrednimi, zapisujemy w programie obejmując je nawiasem kwadrato wym, by móc odróżnić je od rejestrów-argumentów. Na przykład MOV AX,BX to zupełnie co innego aniżeli MOV AX,[BX]. W pierwszym przypadku do rejestru AX ładowana jest zawartość rejestru BX, w drugim przypadku ładowana jest zawartość
it
komórki, której adres (względem początku segmentu - tzw. offsetu) wskazuje rejestr BX. Aby umieścić offset w rejestrze BX, używa się przed adresem pamięci przedrostka OFFSET, na przykład:
• • *
M0V BX,OFFSET TABLICA1 M0V AX,[BX]
Dwie powyższe instrukcje asemblera wykonują tę samą czynność co instrukcja MOV AX, TABLICA1, z tą różnicą, że o ile bezpośrednie przyporządkowanie nazwy komórce pamięci jest jednoznaczne i właściwe przy operowaniu na pojedynczej komórce, o tyle operowanie na wielu komórkach z nieustannym odwoływaniem się do nowego adresu komórki w adresowaniu bezpośrednim byłoby uciążliwe. Stąd też