Obecny czas to Wto 6:55, 21 Sie 2018 | Zaloguj się, by sprawdzić wiadomości
Zobacz posty bez odpowiedzi
Forum Forum hakerskie - najlepsze forum hakerskie Strona GłównaForum Forum hakerskie - najlepsze forum hakerskie Strona Główna
Użytkownicy Grupy Rejestracja Zaloguj

Pętla (LOOP, LOOPE, LOOPZ, LOOPNE, LOOPNZ, JCXZ)
Napisz nowy temat   Odpowiedz do tematu    Forum Forum hakerskie - najlepsze forum hakerskie Strona Główna » Assembler
Zobacz poprzedni temat | Zobacz następny temat  
Autor Wiadomość
CodeLan
Administrator



Dołączył: 03 Lis 2006
Posty: 171
Przeczytał: 0 tematów

Pomógł: 3 razy
Ostrzeżeń: 0/5
Skąd: Z pod skrzydeł Google.pl

PostWysłany: Nie 7:38, 17 Cze 2007    Temat postu: Pętla (LOOP, LOOPE, LOOPZ, LOOPNE, LOOPNZ, JCXZ)

Jak pisałem poprzednio, przy naszych obecnych umiejętnościach spokojnie można zrobić pętlę "for .. to ..." - choćby tak, jak to demonstruje ten przykład.

Oczywiście - pętla działa co można bez trudu stwierdzić - poprawnie, lecz to jest pretekstem do wprowadzenia właśnie instrukcji LOOP.

Składnia:
LOOP ETYKIETA
Tu warto od razu wyjaśnić, że loop - z angielskiego oczywiście - znaczy "pętla".
No ale co właściwie robi LOOP? Mówiąc krótko - zaledwie dwie rzeczy: Po pierwsze - zmniejsza wartość CX o jeden (DEC CX), po drugie - jeśli CX jest większe 0 powoduje bezwarunkowy przeskok do "ETYKIETA".

Jeśli chcielibyśmy powiedzieć to językiem procesora - LOOP ETYKIETA jest skrutem poniższych komend:

DEC CX
CMP CX,0
JNE ETYKIETA


Nie trzeba tu filozofa by stwierdzić, że LOOP umożliwia tylko budowę pętli typu "downto" czy - jak w basicu - "step -1" - a po ludzku pętli, w której licznik maleje a nie rośnie.
Oczywiście jest to prawda, ale prawdą jest też, że nie warto się męczyć wykonywaniem powyżej pokazanej pętli, gdy można to rozwiązać LOOP'em.
Ponieważ postraszyłem w nagłówku pół tuzinem instrukcji, najwyższy czas zakończyć ten przydługi opis LOOP - za podsumowanie musi wystarczyć przykładowy programik.





LOOPE/LOPZ, LOOPNE/LOOPNZ

Instrukcje LOOP?? mają - jak nie trudno się domyśleć - coś wspólnego z instrukcją LOOP. Tym czymś jest choćby użycie.

Składnia:
LOOPE ETYKIETA
LOOPZ ETYKIETA
LOOPNE ETYKIETA
LOOPNZ ETYKIETA


Nie trudno się też domyśleć, że LOOP?? dotyczą w jakiś sposób instrukcji skoku warunkowego...
Kończąc więc domysły wyjaśniam, że działanie instrukcji LOOP** jest następujące:

Zmniejszyć CX o jeden (DEC CX - tak jak przy LOOP)
Jeśli CX>0 wykonać skok warunkowy do "ETYKIETA" w zależności od typu instrukcji: LOOPE - JE, LOOPNE - JNE, LOOPZ - JZ, LOOPNZ - JNZ.
Jeśli CX=0, lub nie spełniono warunku skoku warunkowego, zakończyć pętlę.
A po jakie licho jest to wszystko aż tak dokładnie zamotane? - jedną z przyczyn jest oczywiście - wyjście na przeciw programiście... teraz ma on możliwość wykonania działania w pętli, które nie tylko będzie uzależnione od wartości CX, ale nawet może on przeprowadzić porówn anie dwóch innych wartości (np. CMP AX,BX) i również na tej podstawie wykonać pętlę lub jej nie wykonać... np. procedurka upewniająca się - zadająca użytkownikowi ważne pytanie, które musi on potwierdzić 3 razy np. "czy formatować dysk" - mogłaby wyglądać tak jak to przedstawia niniejszy program.
Mam nadzieję, że po jego analizie nie będziesz mieć już żadnych wątpliwości, ale oczywiście - gdybyś jednak miał mieć - czekam na pytania.


Post został pochwalony 0 razy
...
Zobacz profil autora
Powrót do góry
Napisz nowy temat   Odpowiedz do tematu    Forum Forum hakerskie - najlepsze forum hakerskie Strona Główna » Assembler
Wyświetl posty z ostatnich:   
 
 
Wszystkie czasy w strefie EET (Europa)
Skocz do:  

Strona 1 z 1


Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach


fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2002 phpBB Group

Theme created OMI of Kyomii Designs for BRIX-CENTRAL.tk.