FOR Anweisung in nasm

25/08/2008 - 17:45 von Jens Kallup | Report spam
Hallo,

wie programmiert eine FOR-Anweisung in NASM?
etwa so:

mov _a, 0
L2:
cmp _a, 5
je L1
nop
nop
inc _a
jmp L2
L1:

????????

Gruß
Jens
 

Lesen sie die antworten

#1 Ralph rkhb Bauer
25/08/2008 - 18:40 | Warnen spam
Jens Kallup schrieb:
wie programmiert eine FOR-Anweisung in NASM?



1. Möglichkeit (5 mal):

mov ecx, 5
.Schleife:
; Anweisungen
loop .Schleife

2. Möglichkeit ("While ecx <> 5")

xor ecx, ecx
.Schleife:
cmp ecx, 5
je .Break
; Anweisungen
inc ecx
jmp .Schleife
.Break:

3. Möglichkeit ("Repeat until ecx=5")

xor ecx, ecx
.Schleife:
; Anweisungen
inc ecx
cmp ecx, 5
jne .Schleife

Es gibt zwei Optimierungen:

1) 'add ecx, 1' statt 'inc ecx' (wird allgemein empfohlen, könnte aber eine
urban legend sein)
2) Registeroperationen so weit wie möglich auseinanderziehen, z.B.:

.Schleife
inc ecx
; Anweisungen
cmp ecx, 5
jne .Schleife

Da heutige Prozessoren viel parallel erledigen, kann so die Abarbeitung der
"Anweisungen" bereits erfolgen, obwohl noch am 'inc ecx' gearbeitet wird.
Beim 'cmp ecx,5' muss dann auf jeden Fall gewartet werden, bis das Ergebnis
von 'inc ecx' vorliegt.

Diese Optimierungen sind aber so gut wie nicht messbar. Man sollte der
Schönheit (durchschaubarkeit) des Codes den Vorrang geben.

Die Frage steht auf meiner ToDo-Liste für die FAQ. Könnte da jemand noch
sein Senf dazugeben? Danke!

viele grüße
ralph

Ähnliche fragen