![]() |
Inline Assembler Adressierungsproblem
Hallo,
ich möchte mit dem Inline-Assembler auf ein dynamisches Array zuzugreifen, aber offensichtlich macht es einen Unterschied wo das Array deklariert bzw. ob es dynamisch deklariert ist. So funktioniert es:
Delphi-Quellcode:
Dieser Code schreibt eine 7 in das erste von 5 DWords.
procedure Test;
var Feld: array of DWord; begin SetLength(Feld, 5); asm MOV EAX, Feld; //Adresse von Feld nach EAX kopieren MOV EDX, 7d; //7 nach EDX MOV [EAX], EDX; //DWord an Adresse von Feld mit 7 überschreiben end; end; So funktioniert es nicht (Speicherschutzverletzung):
Delphi-Quellcode:
type
TTest = class(TObject) private FFeld: array of DWord; public constructor Create; end; constructor TTest.Create; begin SetLength(FFeld, 5); asm MOV EAX, FFeld; //Hier scheint nur der Offset von FFeld in EAX zu landen MOV EDX, 7d; MOV [EAX], EDX; //Speicherschutzverletzung... end; end; Weiß jemand wie im Assembler die Adresse in diesem Fall ermittelt werden muß? |
Re: Inline Assembler Adressierungsproblem
Hi,
in einer Methode mußt du die Felder über den (unsichtbaren) Self-Zeiger adressieren:
Delphi-Quellcode:
Gruß Hawkeye
constructor TTest.Create;
begin SetLength(FFeld, 5); asm MOV EAX, Self MOV EAX,[EAX].FFeld MOV EDX, 7d; MOV [EAX], EDX; end; end; |
Re: Inline Assembler Adressierungsproblem
:thumb: Besten Dank! So funktioniert es!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 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