Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
62
2.Podstawyprogramowaniaprocesorówrodzinyx86wtrybierzeczywistym
LOOP<etykieta>,którarealizujepętlęzokreślonąliczbąpowtórzeń.Licznikiempętli
jestrejestrCX,adziałanietejinstrukcjimożnaprzedstawićnastępująco:
CX:=CX-1;IFCX<>0THENGOTO<etykieta>
Pętlazzadanąliczbąpowtórzeń,określonąprzezstanpoczątkowyrejestruCX,zre-
alizowanazapomocąinstrukcjiLOOPmapostać:
MOVCX,N;Nliczbapowtórzeńpętli
petla:
...
...
...
LOOPpetla
PrzyzastosowaniuinstrukcjiLOOPtrzebauwzględnićnastępująceuwagi:
Instrukcjaużywawyłącznierejestru
CXjakolicznikapętli.
Początkowąwartośćrejestru,określającąliczbępowtórzeńpętli,trzebawpisaćdo
rejestruCXprzedpierwszymrozkazemwykonywanymwpętli.
Zmniejszenieo1(dekrementacja)rejestru
CXorazsprawdzeniewarunkuzakoń-
czeniapętliodbywasiępowykonaniuwszystkichinstrukcjipętli.Wynikaztego,
żewpisaniedorejestruCXpoczątkowejwartościrównejzeru(CX=0)spowoduje,
żepętlawykonasię65536=216razy.Ztegopowoduwprogramiewykorzystują-
cyminstrukcjęLOOP,przedpierwsząinstrukcjąwykonywanąwpętlipowinnazna-
leźćsięinstrukcjasprawdzającastanrejestruCX.Możnatowykonaćtak:
MOVCX,N
JCXZkoniec
petla:
...
...
LOOPpetla
koniec:
;liczbapowtórzeńpętli
Prawdopodobnietenpowódbyłprzyczynąwprowadzeniawliścieinstrukcjiproce-
sorówrodzinyx86instrukcjiJCXZ.
InstrukcjaLOOPwykonujekrótkiskokwzględny,czyliwzakresie–128...+127baj-
tówwzględeminstrukcjiLOOP(około30–40instrukcji).Jeżeliliczbainstrukcjiwykony-
wanychwpętlijestwiększa,topętlęnależyzorganizowaćinaczej.
PozainstrukcjąpętliLOOP,wliścieinstrukcjiznajdująsiętakże:LOOPE/LOOPZoraz
LOOPNE/LOOPNZ,przyczymmnemonikiLOOPEiLOOPZorazLOOPNEiLOOPNZoznaczają
tesameinstrukcje.DziałanieinstrukcjiLOOPE/LOOPZmożnaprzedstawićnastępująco:
CX:=CX-1;IF(CX<>0)AND(Z=1)THENGOTO<etykieta>.
InstrukcjadziaławięcanalogiczniedorozkazuLOOP,jednakzakończenieiteracji
jestuzależnionenietylkoodstanurejestruCX,lecztakżeodflagiZrejestruflagowego