Einzelnen Beitrag anzeigen

Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#16

Re: Float-Parameter per ASM übergeben

  Alt 5. Jun 2008, 20:05
Hi,

Also du hast mir bisher sehr geholfen. Es tut mir Leid, aber ich muss nochmal weiter nachfragen

Ich habe jetzt die "Float-Kompatibilität" auf die Parameter 3-n erweitert (bzw 4-n wenn man Self mitzählt), also die Parameter die auf dem Stack abgelegt werden.

Jedoch kommt bei mir in der Funktion immer nur der Wert: -3,6854775808e-3509.

Außerdem erhalte ich die Exception: "Ungültige Gleitkommaoperation in meiner Test4-Procedure:

Delphi-Quellcode:
procedure TForm1.Test4(b: Byte; S: String; f: Extended); //b und S sind nur damit f der dritte parameter sein kann
begin
  ShowMessage(S + ' ' + FloatToStrF(f,ffNumber,5,2) + IntToStr(b));
end;
Hab mir auch den Stack angeguckt: Ich glaube da ist diesesmal nichts verschoben, er sieht jetzt immer total anders aus...

Hier der Code:

Delphi-Quellcode:
procedure TForm1.ExecuteScriptMethod(Method: String;
  Params: array of Const);
var max,off: Integer;
    proc: Pointer;
begin
  proc := MethodAddress(Method);
  max := Length(Params);

  for i:= 2 to max-1 do
  begin
    off := i*8;
    asm
      mov edx,[Params]
      add edx,off
      movzx ecx,[edx+$04] // Params[i].VType --> ecx
      sub ecx,3 // if Params[i].VType = vtExtended
      jnz @NoExt
        movzx ecx, word ptr [edx+$08] // then...
        push ecx
        push [edx+$04]
        push [edx]
        jmp @LoopEnd
      @NoExt: // else
        push [edx]
      @LoopEnd:
    end;
  end;

  // edx,ecx Parameter und eax = Self Parameter folgen
end;
Apollonius... *hundeblick*
Michael
  Mit Zitat antworten Zitat