![]() |
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; |
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 :) |
Re: Inline-Assembler - Register auf den Stack retten?
Alles klar, wer die OH lesen kann ist klar im Vorteil, oder wie war das ? :zwinker:
|
Re: Inline-Assembler - Register auf den Stack retten?
Moin!
Zitat:
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 |
Re: Inline-Assembler - Register auf den Stack retten?
Zitat:
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:
|
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