Ok, weiter gehts...
Eine mögliche Optimierung, die ich bei Assemblern sehe, ist das Umsortieren von Befehlen.
Dabei kann ein Befehl belibig verschoben werden, solange alle Abhängigkeiten in der selben Reihenfolge bleiben.
Ich möchte das mal genauer erleutern:
In der Regel wird ein Befehl durch bestimmte Register beeinflusst. (Eingabe)
Der Befehl selbst wiederum verändert Register. (Ausgabe)
Während der Ausführung des Befehles werden bestimmte Bereiche der CPU belegt. (Ressourcen)
Die Beachtung der Ein- und Ausgabe ist zur Erhaltung der Reihenfolge nötig.
Über das Umsortieren der Befehle soll erreicht werten, dass alle Ressourcen der CPU ausgelastet werden
mal ein einfaches Beispiel in Assembler:mov eax,[0xDEADBEEF]
add eax,0xABC
add ebx,ecx
In diesem Beispiel würde die CPU (meines aktuellen Wissens nach) vor dem zweiten Befehl warten bis eax mit dem Speicherwert geladen wurde. (Arbeitsspeicher ist aus sicht des Assemblerprogrammierers eher langsamm)
Zur Optimierung würde man den letzten Befehl einfach zwischen die ersten beiden schieben.mov eax,[0xDEADBEEF]
add ebx,ecx
add eax,0xABC
Das Rumschieben kann ich in diesem Beispiel sehr einfach machen, weil der Befehl add ebx,ecx nicht in direkter Verbindung zu den beiden anderen Befehlen steht.
Man könnte jedoch keinen Befehl zwischenschieben der eax beeinflusst!
mov eax,[0xDEADBEEF]
<--Bereich ist für alle Befehle frei, die eax nicht beeinflussen
add eax,0xABC
Hoffe das wurde soweit verstanden.