![]() |
VAR-Parameter beim Inline-Assembler nutzen
Hallo,
wie kann ich in einer Assembler-Prozedur auf den Wert eines VAR-Parameters zugreifen? Ich habe folgendes probiert:
Delphi-Quellcode:
Das scheint aber falsch zu sein...
procedure Test(var x: DWord);
asm MOV EAX, DWORD PTR [x] ADD EAX, 4711 MOV DWORD PTR [x], EAX end;
Delphi-Quellcode:
Datt klappett...iss aber nich doll...
procedure Test(var x: DWord);
var z: DWord; begin z := x; asm MOV EAX, z ADD EAX, 4711 MOV z, EAX end; x := z; end; Wo mache ich da Blödsinn? Die Antwort muß entweder furchtbar einfach oder furchtbar schwer sein, denn ich habe bei der Suche nichts in dieser Art gefunden... |
Re: VAR-Parameter beim Inline-Assembler nutzen
Du musst bedenken, dass x "in Wirklichkeit" ein Zeiger auf einen DWord ist. Also musst du erst x in einen Register schieben und dann den Register dereferenzieren.
Wenn ich komplette Prozeduren in Inline-Assembler schreibe, greife ich nie auf die Parameter direkt zu, sondern immer aufrufkonventionabhängig über die Register oder den Stack. Dann weiß ich nämlich, dass mir Delphi nicht dazwischenfunkt. |
Re: VAR-Parameter beim Inline-Assembler nutzen
Wie dereferenziere ich denn korrekt?
Mein erster Versuch sollte das eigentlich machen... Ist es richtig das der Zeiger auf x bereits in EAX liegt? |
Re: VAR-Parameter beim Inline-Assembler nutzen
Hi,
Zitat:
Versuchs mal so:
Delphi-Quellcode:
Gruß
procedure Test(var x: DWord);
asm add [eax],4711 // Dereferenzieren mit den [ ] // entspricht x^ := x^ + 4711; end; Neutral General |
Re: VAR-Parameter beim Inline-Assembler nutzen
:-D Danke, das war die Lösung!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:41 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