Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Inline-Assembler - Register auf den Stack retten? (https://www.delphipraxis.net/48405-inline-assembler-register-auf-den-stack-retten.html)

Schneider-Huetter 24. Jun 2005 18:41


Inline-Assembler - Register auf den Stack retten?
 
Servus,
muss man bei Inline-Assembler Funktionen die dort benutzten Register auf den Stack sichern oder wird dies - falls nötig - von Delphi selbst erledigt?

Beispiel:
Delphi-Quellcode:
Function BitTest( ui32Operand : LongWord; Position : Word ) : Byte;
asm
  //PUSH DX
  MOV DX, Position
  BT ui32Operand,DX
  SETC AL
  //POP DX
end;

NicoDE 24. Jun 2005 19:15

Re: Inline-Assembler - Register auf den Stack retten?
 
Im Allgemeinen weiß Delphi welche Register Du verwendest. Es gibt Vorgaben was Du frei modifizieren darfst (EDX gehört dazu).

assembler + F1 :)

Schneider-Huetter 24. Jun 2005 19:20

Re: Inline-Assembler - Register auf den Stack retten?
 
Alles klar, wer die OH lesen kann ist klar im Vorteil, oder wie war das ? :zwinker:

Muetze1 24. Jun 2005 19:31

Re: Inline-Assembler - Register auf den Stack retten?
 
Moin!

Zitat:

Zitat von NicoDE
Im Allgemeinen weiß Delphi welche Register Du verwendest. Es gibt Vorgaben was Du frei modifizieren darfst (EDX gehört dazu).

assembler + F1 :)

Diese Vorgaben kannste bei aktivierten Optimierer total in die Tonne kloppen - wenn der Optimierer an ist (default), dann sichere alles...

Fälle:

EDX ist änderbar laut Hilfe: von wegen - harten Absturz mit aktivierten Optimierer - ohne, keine Probleme - mit Optimierer und EDX sichern: keine Probleme.

Oder das Direction Flag verändern: darfste auch nicht...

MfG
Muetze1

NicoDE 24. Jun 2005 19:47

Re: Inline-Assembler - Register auf den Stack retten?
 
Zitat:

Zitat von Schneider-Huetter
Alles klar, wer die OH lesen kann ist klar im Vorteil, oder wie war das ? :zwinker:

Jupp.

Dann hättest Du auch bemerkt, dass bei der Aufrufkonvention der zweite Parameter bereits in DX ist (du machst also ein 'mov dx, dx').
Delphi-Quellcode:
function BitTest(BitBase: Longword; BitOffset: Byte): Byte; register; assembler;
asm
        // eax BitBase
        // dl  BitOffset
        bt     eax, edx
        setc   al
        // al  Result
end;
Zitat:

Zitat von Muetze1
EDX ist änderbar laut Hilfe: von wegen - harten Absturz mit aktivierten Optimierer - ohne, keine Probleme - mit Optimierer und EDX sichern: keine Probleme.

Beipspiel-Code?


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz