![]() |
Re: Inkrementieren von Eax geht nicht
Zitat:
EDIT: Ok, ich hab mir das nochmal angeschaut und habe gemerkt, dass es nun gar nicht geht :S Ich bin nun total verwirrt Wenn ich mit stdcall kompiliere, liefert GetFileAttributes immer -1 zurück ansonten funktioniert das prima |
Re: Inkrementieren von Eax geht nicht
Um das mal deutlicher zu sagen: Wenn eine Stdcall-Routine aufgerufen wird, kann im Eax-Register irgendetwas stehen. Nur bei der Aufrufkonvention Register enthält es den ersten Parameter.
|
Re: Inkrementieren von Eax geht nicht
Zitat:
|
Re: Inkrementieren von Eax geht nicht
Bei StdCall liegen die Parameter aber auf'm Stack und nicht in den Registern!
Und das Result auf EAX. Laß dat StdCall weg, dann sollte es gehn, oder du nutzt den Stack.
Delphi-Quellcode:
function _FileExists( Filename: PChar ): LongBool; stdcall;
asm push [esp+8] call GetFileAttributes inc eax end; function _FileExists( Filename: PChar ): LongBool; asm push eax call GetFileAttributes inc eax end; Zitat:
Zitat:
Und du mindestens die unteren 16 Byte auswerten mußt ... also statt Boolean/ByteBool muß schon mindestens WordBool verwendet werden! |
Re: Inkrementieren von Eax geht nicht
Zitat:
Zitat:
Das war mir bewusst :) Das war halt nur die Antwort auf den vorherigen Beitrag. MfG |
Re: Inkrementieren von Eax geht nicht
also in meiner OH steh es eigentlich recht genau ^^
Code:
[i]OH: Aufrufkonventionen[/i]
Parameterübergabe Direktive Parameterreihenfolge Bereinigung in Registern? register Von links nach rechts Routine Ja pascal Von links nach rechts Routine Nein cdecl Von rechts nach links Aufrufer Nein [b]stdcall[/b] Von rechts nach links Routine [b]Nein[/b] safecall Von rechts nach links Routine Nein |
Re: Inkrementieren von Eax geht nicht
wie wärs mit:
Delphi-Quellcode:
dann ist es egal obs stdcall oder register ist.
push FileName
call GetFileAttributes inc eax Und wenn ich mich nicht irre, kann man auch beliebig viele Begin und Ends um den asm Block schreiben. Der Compiler sollte das gleiche draus machen, als wenn sie nicht da wären. |
Re: Inkrementieren von Eax geht nicht
Zitat:
![]() |
Re: Inkrementieren von Eax geht nicht
Dumm ist allerdings, dass der Compiler selbst in einer reinen Assembler-Routine meint, einen Stackframe generieren zu müssen, was extrem lästig sein kann.
|
Re: Inkrementieren von Eax geht nicht
Wie sonst soll es vom Compiler verwaltete lokale Variablen geben? ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:29 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