AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Fließkomma-Rückgabewert über Assembler
Thema durchsuchen
Ansicht
Themen-Optionen

Fließkomma-Rückgabewert über Assembler

Ein Thema von MaOfDe · begonnen am 19. Apr 2006 · letzter Beitrag vom 19. Apr 2006
 
MaOfDe

Registriert seit: 3. Jan 2004
Ort: Berlin
73 Beiträge
 
Delphi 6 Personal
 
#1

Fließkomma-Rückgabewert über Assembler

  Alt 19. Apr 2006, 01:27
Hi!

Ich habe eine kleine DLL geschrieben mit diversen Rechenoperationen.
Diese werden dann vom eigentlichen Programm aufgerufen, was über Assembler erfolgt. Die Übergabe der Parameter und der Aufruf der Funktion klappt soweit über Assembler, jedoch hab ich bei Fileßkommazahlen Probleme den Rückgabewert zu ermitteln.

Wenn ich als Rückgabewert Integer habe, so finde ich das Ergebnis im EAX-Register, bzw. bei Int64 noch zusätzlich im EDX, soweit kein Problem.
Bei Single und Double bekomme ich allerdings absurde Werte wie $16 oder $3 ins EAX-Register reingeschrieben, also fallen diese auch als Zeiger auf Fließkommawerte weg.

Delphi-Quellcode:
//Beispielfunktionen aus der DLL:
function add_2i64(a, b: Int64): Int64; stdcall;
// Parameterübergabe klappt, Rückgabe klappt
begin
    Result:=a+b;
end;

function add_2f(a, b: Single): Single; stdcall;
// Parameterübergabe klappt, Rückgabe schlägt fehl
begin
    Result:=a+b;
end;

//Aufruf der Funktion(Ausschnitt)
{
p, prc: Pointer;
x, n: Integer;
Rslt: array[0..1]of Cardinal;
Result --> Pointer
}


n:=Params.Count-1; //Parameterübergabe
if(n>-1)then
begin
    x:=n;
    repeat
        p:=Params[x];
        asm
            PUSH p
        end;
        Dec(x);
    until(x=-1);
end;

n:=Params.Count*4;
asm
    CALL prc //Aufruf der Funktion
    ADD ESP, n //Säubern des Stacks
    MOV DWORD PTR [Rslt], EAX //Kopieren des EAX-Registers
end;

Result:=@Rslt;
Weiß einer ne Lösung? ^^ Oder hat einer Verbesserungsvorschläge?
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:02 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