Zitat von
Quake:
Die Register müssen nicht gesichert werden, da der Inhalt, der vor dem
asm-Block drin war nach dem
asm-Block nicht weiter verwendet wird.
Hallo? Was ist das denn für ein ausgemachter Unfug? Woher willst du das wissen? Das kann man erst nach einer Analyse in einem Disassembler mit Bestimmtheit sagen und dann auch nur für das aktuelle Kompilat. Kann sich bei einer kleinen Codeänderung schon gewaltig ändern.
Zitat:
Im Allgemeinen sind die Regeln für die Verwendung von Registern in einer
asm-Anweisung identisch mit denjenigen für eine external-Prozedur oder -Funktion.
In einer asm-Anweisung muss der Inhalt der Register EDI, ESI, ESP, EBP und EBX erhalten bleiben, während die Register EAX, ECX und EDX beliebig geändert werden können. Beim Eintritt in eine
asm-Anweisung zeigt EBP auf den aktuellen Stackframe, ESP auf den Beginn des Stacks.
Zu Beginn der Ausführung einer asm-Anweisung ist der Registerinhalt unbekannt. Eine Ausnahme bilden die Register ESP und EBP.
Da steht exakt drin:
1. "EDI, ESI, ESP, EBP und EBX" keinesfalls antatschen
2. "EAX, ECX und EDX" darfst du.
3. Der zweite rote Teil suggeriert, daß du sehr wohl die Register (aus 2.) sichern mußt.
Man kann es nicht deutlich genug machen. Der Text besagt nichts darüber, wie die Werte vor oder nach dem
asm-Block sind oder sein sollen, sondern wie sie innerhalb des Blocks zu sein haben.
BTW: #18 fand ich einfach goldig