Wie es auch in der Suchwort-Hilfe von BP70 steht, verhält es sich folgendermaßen:
Wenn ich eine Routine mit "assembler" deklariere, scheint er den Code 1:1 und ohne
vorherige/nachherige Sicherung der Register einzufügen.
Wenn ich aber die Routine mit "begin" anfangen lasse und dann erst mit "asm" anfange
steht im Disassemblat folgendes:
Was auch immer diese Subroutine ist...
Nach meinen Testbefehlen (nur xor ax, ax und mov ds, ax):
So... Aber das ganze wird auch hinfällig wenn man sich mal ein wenig mit der Hilfe von Pascal
beschäftigt hat. Dort steht:
Eine asm-Anweisung muss folgende Register sichern:
BP SP SS DS
Eine asm-Anweisung kann folgende Register ändern:
AX BX CX DX SI DI ES Flags
Damit wäre die Sache ja eigentlich geklärt - demnach kann ich mit AX-DX sowie mit SI, DI ES und Flags
machen was ich will, ohne die sichern zu müssen.
Etwas ist nur unklar beschrieben. "
Kann folgende Register ändern".
Ich
kann auch DS ändern. Heisst wohl eher, eine asm-Anweisung kann folgende Register ändern, und
kann sie so belassen. Fragt sich nur, ob da nicht noch eine Lücke ist. AX-DX und SI DI ES sind ja
längst nicht alle Register. Kann man sich weitere freischalten, so wie mit {$G+} den 286er Assembler?
Fazit wäre für mich jetzt, dass ich nur DS sichern muss, wenn ich es denn verwende. An BP, SP und SS
fummel ich ja nicht herum.
Und ich nehme mal, an, die Stack-bezogenen Register erhalten wieder ihre Ursprungswerte, auch wenn
ich in der Routine etwas auf den Stack lege, dann aber auch sauber wieder runternehme.