LOOP
-
Kann mir jemand mal genauer erklären, wie man den LOOP Befehl benutzt. Soweit ich weiß muss man in CX einen Wert schieben, der dann mit jedem LOOP um 1 dekrementiert wird. Kann mal jemand ein Beispiel geben?
-
vieleicht hilfts ja: Link
-
etwa so:
mov cx, 42 lbl: <insert code here> LOOP lbl;
entsprich etwa dem c code von:
int i=42; do { <insert code here> }while(i>0);
ohne garantie
mfg japro
-
Original erstellt von japro:
**[cpp]
int i=42;
do
{
<insert code here>
--i
}while(i>0);[/cpp]
**das währ schon besser (sonst baut man sich ne tolle endlosscheife (der asm code stimmt aber)
-> wieso ignoriert man eigentlich meinen link da steht das auch... (man muss nur das "e" wegen 32bit wegglassen dann ist es 100% das selbe..)
naja egal...
-
AFAIK ist "LOOP lbl" langsamer als "DEC cx; JNZ lbl;".
-
In den meisten Fällen ist LOOP eindeutig schneller (11 Takte), weil es direkt für Schleifen vorgesehen ist. DEC und JNZ haben zusammen mindestens 9 Takte, können aber auch viel mehr haben, wobei LOOP immer 11 Takte braucht. Ich hoffe, dass war jetzt nicht zu verwirrt...
-
Hi.
Das ist haengt aber sehr stark vom verwendeten CPU ab.
Auf einem AMD ist dec cx; jnz... zB. nicht unerheblich schneller als eine Loop-Instruktion.
-
Die LOOP Instruktion ist schon recht alt und wurde auch nicht erweitert. Deshalb kann man bei LOOP nur ein Label angeben zu dem ein short jump reicht. Die conditional jumps gehen da logischerweise weiter. LOOP ist also nur für kleine Schleifen wirklich geeignet.
-
Größere Schleifen hat man ja auch selten...
-
Original erstellt von cd9000:
AFAIK ist "LOOP lbl" langsamer als "DEC cx; JNZ lbl;".Och nee, Leute! Fangt doch nicht schon wieder mit diesem Geschwindeigkeitszeug an. Das ist doch bei den heutigen Prozessorgeschwindigkeiten völlig egal.
-
Das ist ganz und garnicht egal!
-
Ich würde sagen in 99% der Fälle schon. Da macht man sich mehr kaputt mit Abhängigkeiten und branch prediction misses als man retten kann.
-
Loop wird heutzutage aus Geschwindigkeitsgründen nicht mehr eingesetzt. Loop wird nur noch eingesetzt, wenn wärend der Abarbeitung der Schleife die Prozessorflags nicht beeinflusst werden dürfen - so stand es in meinem alten ASM-Buch.