html> Programming & Security - Assembler - kurs: Instrukcji warunkowe...
M E N U
Strona główna Assembler -kurs
Assembler -teksty
AntiCracking
API
Opisy narzędzi
Zabezpieczenia CD/DVD
Budowa plików
Sources
Linki
Kontakt

STATYSTYKI

stat4u
PRV.PL - Twoje miejsce w sieci.
Od 06.09.2000
Optymalizacja:
1024x768, IE5
  • Assembler - kurs

  • 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

    <<

    ©Copyright by zoomek 2001
    Wszelkie prawa zastrzeżone!