Einzelnen Beitrag anzeigen

Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#6

AW: (F)ASM: Flag zustand in register speichern?

  Alt 16. Mär 2012, 10:57
@AmateurProfi:
Ja habe ich schon gemerkt.
Deswegen habe ich den output meines Compilers so abgeändert:
Code:
cmp eax, ebx
setne ah
movsx eax, ah
push eax
Beim parsen des Ausdrucks haben die einzelnen Bausteinfunktionen, keinerlei ahnung, was die anderen machen oder gemacht haben.

wenn ich also folgendes habe:
Delphi-Quellcode:
if (4+3*5 = 3) or (12/2 < 7)then
....
Dan gehts als erstes so:
4 auf stack packen
3 auf stack packen
mul op kommt, wert von stack holen
mul mit 5
ergebnis auf stack packen
addition:
2 werte vom stack holen
addieren
auf den stack packen
3 auf den stack packen
vergleich durchführen
2 werte vom stack holen
vergleichen
ergbenis auf stack packen

jetzt wird als erstes mit der formel rechts vom or weiter gemacht, und danach ver-oderd

Die ungünstigen push/pop combis werden später nachträglich durch moves ersetzt.
Keine funktion weiß was die vorherige oder nächste macht. Aber jede weiß, dass sie ihre werte zum operieren auf dem stack findet und ihr ergebnis auf den stack pushen muss.
Variablen/konstanten: hier wird natürlich nichts gepopt, hier wird der wert direkt gepushed

Deswegen ist es nicht so leicht in einer komplexen formel beziehungen zwischen den einzelnen bausteinen schon im voraus zu optimieren

MFG
Memnarch
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat