Zitat von
choose:
Zitat von
negaH:
Du benutzt EBX ohne es vorher zu sichern, eg. PUSH/POP
Ja, das mache ich, weil es nicht notwendig ist:
Zitat:
You can rely on the fact that all Windows APIs save and restore the registers EBP,EBX,EDI and ESI. Therefore use these registers to keep handles and pointers which need to be used more than once through sequences of
API calls.
Und das schließt aber nicht aus, dass der Delphi Compiler in EBX bestimmte Daten hält. Es muss ja auch einen Grund haben, warum der Compiler bei Benutzen von EBX dieses vorher sichert und danach wiederherstellt.
Aus der Delphi Hilfe:
Zitat:
In einer
asm-Anweisung muß der Inhalt der Register EDI, ESI, ESP, EBP und
EBX erhalten bleiben
Unter Windows mag das nicht gleich zu einem Fehler führen, aber unter Linux steht in EBX die GOT (Global Offset Table) und wenn du diese verlierst, bekommst du sie nicht wieder zurück. Und ohne GOT wird es ein Zuckerschlecken ala SEGV (=AccessViolation), wenn du auf globale Variablen zugreifen willst.