Treść książki
Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
1.1.Modelprocesorówrodzinyx86wtrybierzeczywistym
25
Wprzedstawionymprzykładziezdefiniowanodwasegmentydanychorazjedenseg-
mentprogramu.Każdyznichjestzwiązanyzinnymrejestremsegmentowym,określo-
nymwdyrektywieASSUME.Adresybazowesegmentówprogramuorazstosuniesąznane
naetapietworzeniaprogramu,gdyżokreślajesystemoperacyjnydopierowtrakcieuru-
chamianiaprogramu.Natomiastpodczaswykonywaniaprogramumożnaokreślićadres,
podktórymumieszczonosegment,stosującdyrektywęSEG,np.
MOVAX,SEGdane1lubMOVBX,SEGprogram.
Adresybazowesegmentówdanychnależywpisaćdoodpowiednichrejestrówseg-
mentowychnapoczątkuprogramu.Możemymiećdoczynieniaznastępującymidwoma
przypadkami:
•
Programistapozostawiasystemowioperacyjnemudecyzjęoumieszczeniu
wpamięcisegmentudanych(takjestnajczęściej).Wówczasadresbazowysegmen-
tudanychokreślasystemoperacyjnypodczasuruchamianiaprogramu,aopera-
cjawpisaniaadresubazowegodorejestrusegmentowegoprzyjmujewprogramie
następującąpostać:
MOVAX,SEGdane1
MOVES,AX
•
Adresumieszczeniawpamięcisegmentudanychokreślaprogramista,np.
MOVAX,0B800h
MOVDS,AX
;adrespamięciobrazuwtrybieznakowym
Zawartośćrejestrówsegmentowychdanychmożebyćzmienianapodczaswykony-
waniaprogramu.
Podczastranslacjiprogramuasemblerprzyporządkowujekażdejzmiennejzdefinio-
wanejwprogramieadreswzględny,określonywzględempoczątkusegmentu.Wpro-
gramiemożnatenadreswyznaczyćzapomocądyrektywyOFFSETlubzzastosowaniem
rozkazuLEA:
MOVAX,OFFSETA2
lubLEAAX,A2
Wprzedstawionymprzykładzie,wdefinicjidanychB1iB2wsegmencieonazwie
dane2,występująwyrażeniaadresowe.DwubajtowejzmiennejB1iczterobajtowej
zmiennejB2przypisanonazwęzmiennejA2.Cotooznacza?Wobydwuprzypadkach
jesttoprzypisaniezmiennymB1iB2adresuzmiennejA2.PonieważzmiennaB1zawie-
radwabajty,asemblerprzypisujeoffsetzmiennejA2wsegmencieonazwiedane1.
NatomiastwartościązmiennejB2(odługościczterechbajtów)jestpełenadreslogicz-
nyzmiennejA2SEGMENT:OFFSET(2pierwszebajtyzmiennejB2zawierająoffset,nato-
miastkolejne2określająadresbazowysegmentu).