| STATYSTYKI |
Od 06.09.2000
|
Optymalizacja: 1024x768, IE5 |
|
| Instrukcji warunkowe przez analogię do języków wysokiego poziomu |
Instrukcje warunkowe to takie instrukcje, które uzależniają inne instrukcje od określonego wyrażenia (warunku).
Instrukcje warunkowe w językach wysokiego poziomu (Pascal)
Wyróżniamy dwie instrukcje warunkowe:
- instrukcja "jeśli" :
IF warunek THEN
instrukcja(e)
lub
IF warunek THEN
instrukcja(e)
ELSE instrukcja(e)
- instrukcja wyboru :
CASE wyrażenie OF
instrukcje wyboru
END
lub
CASE wyrażenie OF
instrukcje wyboru
ELSE
instrukcja
END
Dla instrukcji "jeśli" jako warunek możemy użyć złożenia na przykład dwóch :
IF warunek1 AND warunek2 THEN
instrukcja(e)
Taka(e) instrukcja(e) wykonają się jeśli obydwa warunki będą spełnione.
Nie będę się rozpisywał więcej na temat instrukcji warunkowych
w językach wysokiego poziomu ponieważ można to znaleźć w każdej książce
do C lub Pascala.
Instrukcje warunkowe w assemblerze
W zasadzie napisanie takiej instrukcji w Assemblerze nie powinno
sprawić trudności - trzeba sobie jedynie wyobrazić jak ta instrukcja
powinna działać, dalej poruszamy się już "z górki".
Do napisania instrukcji warunkowych użyjemy porównań i skoków - to
w zasadzie wszystko co nam jest potrzebne do stworzenia szkieletu.
Załóżmy że mamy w rejestrach AX i BX dwie liczby (bez znaku) i chcemy
sprawdzić czy AX jest większe od BX i (jeżeli większe) wypisać komunikat
- najprostszy schemat instrukcji będzie wyglądał tak :
| ... | |
| MOV AX,liczba | ;AX zawiera liczba |
| MOV BX,liczba2 | ;BX zawiera liczba2 |
| CMP AX,BX | ;porównaj AX z BX |
| JBE AXMIN | ;jeżeli AX<=BX skacz do AXMIN |
| ... | ;tu powinny znajdować się instrukcje wypisujące informację |
| JMP KONIEC | ;skocz aby ominąć AX<=BX |
| AXMIN: | ;jeżeli AX<=BX to wykonają się |
| ... | ;te instrukcje |
| KONIEC: | ;tu zaczynają się instrukcje następujące |
| ... | ;po wykonaniu instrukcji "jeśli" |
Instrukcja ta odpowiada Pascalowej instrukcji IF :
| ... | |
| IF liczba>liczba2 THEN | {porównanie liczba z liczba2} |
| ... | {instrukcje wypisujące informację} |
| ELSE | {w przeciwnym wypadku...} |
| ... | |
Teraz pora na instrukcję CASE :
Załóżmy jeszcze raz że mamy daną zmienną (liczba bez znaku)
i chcemy napisać program który wykonywałby instrukcje w zależności
od wartości tej liczby (1,2,...), można by napisać to w Pascalu
i wystarczyłaby do tego znajomość instrukcji IF przy użyciu, której
trzeba się trochę opisać dlatego lepiej użyć CASE, wyglądałoby to tak:
| CASE zmienna OF | |
| 1: BEGIN | {wykona się jeśli zmienna=1} |
| ... | |
| END; | |
| 2: BEGIN | {wykona się jeśli zmienna=2} |
| ... | |
| END; | {inne zależności od wartości zmiennej} |
| ... | |
| ELSE | {w przeciwnym wypadku wykonaj} |
| BEGIN | {następujące instrukcje} |
| ... | |
| END; | |
| END; | |
A teraz skoro mamy schemat możemy to w prosty sposób napisać w ASMie :
| ... | |
| MOV AX,zmienna | ;AX zawiera zmienną |
| CMP AX,1 | ;porównanie AX z 1 |
| JZ SKOK1 | ;jeżeli równe to skacz do SKOK1 |
| CMP AX,2 | ;porównanie AX z 2 |
| JZ SKOK2 | ;jeżeli równe to skacz do SKOK2 |
| ... | ;tu powinny znajdować się inne porównania |
| JMP ELSE | ;omiń miejsca docelowe wcześniejszych skoków i wykonaj ELSE |
| SKOK1: | ;etykieta pierwszego skoku |
| ... | ;tu instrukcje dla AX=1 |
| JMP KONIEC | ;skocz na koniec instrukcji warunkowej |
| SKOK2: | ;etykieta drugiego skoku |
| ... | ;tu instrukcje dla AX=2 |
| JMP KONIEC | ;skocz na koniec instrukcji warunkowej |
| ... | ;dalsze etykiety skoków i inne instrukcje |
| ELSE: | ;tu powinny się pojawić instrukcje występujące |
| ... | ;po ELSE |
| KONIEC: | ;koniec instrukcji warunkowej |
| ... | |
To wszystko co powinniśmy wiedzieć, aby napisać najprostsze instrukcje warunkowe.
©Copyright by FiXER 2001
<<
|
|