Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Inline ASM (https://www.delphipraxis.net/9930-inline-asm.html)

Lillebrohr 7. Okt 2003 22:05


Inline ASM
 
Guten Tag,


also ich habe ein Programm geschrieben das zu 90% aus inline ASM besteht.

So am ende hab ich einen Wert aus einem Register einer Variable übergeben.

mov iResult, eax

nach dem abschließenden end; möchte ich nun den Inhalt in einem Edit ausgeben.
Doch wenn ich nun neu kompiliere und auf den Button drücke der dann den Wert in dem Edit Feld
anzeigen lassen soll. Aber nach dem Drücken kommt eine Meldung das er an der Adresse FFFFFF nicht zugreifen kann.

So wenn ich aber mit mit Showmessage rangehe dann funktioniert es. Aber warum ???

Kann sich jemand das erklären ??



MfG

LB

neolithos 7. Okt 2003 22:27

Re: Inline ASM
 
hast du ebx wiederhergestellt? bzw verwendet.

Lillebrohr 7. Okt 2003 22:29

Re: Inline ASM
 
Guten Tag,

ja ich habe ebx benutzt. Aber warum muss ich das "wiederherstellen" ?? :(



MfG


LB

jbg 7. Okt 2003 22:39

Re: Inline ASM
 
... Weil Delphi dann die Daten in [ebx] benutzen kann.

Lillebrohr 7. Okt 2003 22:49

Re: Inline ASM
 
Guten Tag,


Naja, also einfach ebx am Anfang sichern und am Ande wieder zurücksetzen.


Code:
asm
mov iEBX, ebx
...

mov ebx, iEBX


end;
oder soll ich es besser über den Stack machen ??

MfG

LB

neolithos 7. Okt 2003 22:49

Re: Inline ASM
 
in ebx steht die Instance-Adresse des objectes in dem die Prog. gerade ausgeführt wird.

jbg 8. Okt 2003 00:04

Re: Inline ASM
 
Und bei Kylix die GOT (Global Offset Table).

Lillebrohr 8. Okt 2003 00:54

Re: Inline ASM
 
Guten Morgen,


also mach ich es so wie oben beschrieben. Oder wie macht ihr das ???



MfG LB


/Edit

aber warum funzt es dann mit showmessage aber nicht mit edit1.text ?
\Edit

negaH 8. Okt 2003 03:35

Re: Inline ASM
 
Delphi-Quellcode:
asm
  PUSH EBX

  POP  EBX
end;
Unter Windows musst du nichts weiter beachten.
Unter Kylix steht in EBX die "Globale Object Table" und diese sollte in deinem Assemblercode NIEMALS überschrieben werden falls diese Assembler Funktion weitere externe CALLs durchführt.
Am besten ist es auf die Register EDI,ESI auszuweichen und EBX generell als letzte Wahl zu sehen.

Gruß hagen

Lillebrohr 8. Okt 2003 18:47

Re: Inline ASM
 
Guten Tag,

hmm danke für die schnelle Antwort.
Aber ich habe gemerkt das es funktioniert wenn ich ebx und alle Register sichere.

Code:
asm
pushad
...
popad
end;
Aber bei nonVCL funktioniert das nich. Warum ? Was gibt es sonst noch für Möglichkeiten ???



MfG


LB


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:02 Uhr.
Seite 1 von 2  1 2      

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