Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

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

venice2 13. Feb 2022 20:48


ASM Inline code x64
 
Habe gelesen das man unter 64Bit ASM nicht in Inline code verwenden soll.
Wie kann ich dann diesen Block als Procedure auslegen? So das er inline verwendet werden kann?
Wenn möglich sollte es auch unter 32Bit funktionieren.

Delphi-Quellcode:
      FPWord := Get8087CW;
      Set8087CW(MCW_EM);

      if (not VisInfo^.VisPointer^.Render(VisInfo^.VisBuf, StretchWidth,
        StretchHeight, StretchWidth, @VisData)) then
      begin
        // der block
        asm
          FNCLEX
        end;
        // end block
        Set8087CW(FPWord);

        VisInfo^.Rendering := False;
        Exit;
      end;

      // der block
      asm
        FNCLEX
      end;
      // end block
      Set8087CW(FPWord);
Würde das reichen?
Delphi-Quellcode:
procedure ClearPendingExceptions;
asm
  FNCLEX
end;
Aktueller Fehler. 64Bit
Zitat:

[dcc64 Fehler] uMain.pas(513): E1025 Sprach-Feature wird nicht unterstützt: 'ASM'
Aber nur wenn ich die 32Bit exe als Abhängigkeit zuweise.
Zudem treten dann noch andere Probleme auf.

Zitat:

[dcc64 Fehler] uMain.pas(23): E2065 Ungenügende Forward- oder External-Deklaration: 'WinMain'
[dcc64 Fehler] uMain.pas(26): E2065 Ungenügende Forward- oder External-Deklaration: 'WndProc'
Delphi-Quellcode:
function WinMain(hInstance: HINST; hPrevInstance: HINST; lpCmdLine: PChar;
  nCmdShow: integer): integer; stdcall;

function WndProc(WinHandle: HWND; Msg: UINT; wP: WParam; lP: LParam): LRESULT;
  stdcall;
Warum treten dann diese Fehler auf?
Weil 32Bit.exe nicht kompatibel ist zu 64Bit.exe ??
Weshalb vertragen sich die Abhängigkeiten nicht.

Bei aktivierter Abhängigkeit tritt beim Start der Anwendung noch dieser Fehler auf
Zitat:

[dcc64 Fataler Fehler] SOP.dpr(10): F2048 Falsches Unit-Format: '_dcu\uMain.dcu' - Erwartete Version: 35.0, Windows Unicode(x64) Gefundene Version: 35.0, Windows Unicode(x86)
Wie kann es sein das der Compiler nicht erkennt das SOP eine 32Bit Anwendung ist bei aktivierter Abhängigkeit.
Auch ohne die Zuweisung der Abhängigkeit alle Projekte kompilieren tritt der Fehler auf
Da stimmt doch was nicht!

TurboMagic 13. Feb 2022 21:08

AW: ASM Inline code x64
 
Nein, so geht das glaube ich nicht!
Mit ASM eingeleitete Blöcke dürften in x64 nicht
funktionieren.

Du musst glaube ich sowas machen:

Delphi-Quellcode:
Procedere DoIt; Assembler;
begin
  mov ax, 0; // nur ein Beispiel
end;

venice2 13. Feb 2022 21:10

AW: ASM Inline code x64
 
Zitat:

Zitat von TurboMagic (Beitrag 1502118)
Nein, so geht das glaube ich nicht!
Du musst glaube ich sowas machen:

Delphi-Quellcode:
Procedere DoIt; Assembler;
begin
  mov ax, 0; // nur ein Beispiel
end;

Ich habe leider keine Ahnung von ASM daher nutz mir eine Vermutung (Beispiel) nichts.. Sorry
Der Aufruf müßte also schon genau funktionieren.

FNCLEX müßte dann also nach Delphi übersetzt werden.
Oder die Procedure entsprechend angepaßt.

Trotzdem Danke!

Zitat:

Mit ASM eingeleitete Blöcke dürften in x64 nicht
funktionieren.
Diese Funktion unter 64Bit macht aber keine Probleme.
Wird anstandslos akzeptiert trotz Abhängigkeit (allerdings in einer DLL 64Bit)
Delphi-Quellcode:
function TSkinEngine.Rgb2Gray(RGBValue: COLORREF): COLORREF; stdcall;
asm
  movzx  edx, al
  imul   edx, 19595  //Red
  movzx  ecx, ah
  imul   ecx, 38470  //Greean
  shr    eax, 16
  imul   eax, 7471   //Blue
  add    eax, ecx
  add    eax, edx
  shr    eax, 16
  mov    ah, al
  shl    eax, 8
  mov    al, ah
end;
Verstehe wer will.

Also Basis Anwendung 64Bit funktioniert.
32Bit Anwendung ASM macht Probleme wenn ich diese als Abhängigkeit der 64Bit Anwendung zuweise.
64Bit DLL mit obiger Funktion geht ohne Probleme.

himitsu 14. Feb 2022 01:33

AW: ASM Inline code x64
 
"Assembler" als Schlüsselwort dürfte schon ewig keine Auswirkng mehr haben und wird vom Compiler quasi ignoriert.

Assembler wird mit ASM ... END angegeben.


InlineASM gibt es nur im Win32-Compiler (von Borland).

Überall in neuen Compilern war man (CodeGear/Embarcadero/Idera) zu faul sowas zu bauen.


Also dort wo Assember noch geht, da dann nur noch als komplette Funktion (abgesehn von Win32)
und für ARM scheinbar nirgendwo, also ausschließlich x86.
https://docwiki.embarcadero.com/RADS...ation_(Delphi)
https://docwiki.embarcadero.com/RADS...ten_Assemblers



Hast du DCUs im selben Ausgabeverzeichnis, für alle Platformen?

venice2 14. Feb 2022 01:35

AW: ASM Inline code x64
 
Zitat:

Zitat von himitsu (Beitrag 1502122)
InlineASM gibt es nur im Win32 (von Borland).

Überall in neuen Compilern war man (CodeGear/Embarcadero/Idera) zu faul sowas zu bauen.


Also da wo Assember noch geht, da dann nur noch als komplette Funktion (abgesehn von Win32)
und für ARM scheinbar nirgendwo.
https://docwiki.embarcadero.com/RADS...ation_(Delphi)

Die Frage ist nur was hilft mir das jetzt weiter?

Zitat:

Assembler wird mit ASM ... END angegeben.
Habe ich.. siehe
Delphi-Quellcode:
        // der block
        asm
          FNCLEX
        end;
        // end block
Die Meldung die dann bei 32Bit kommt.
Zitat:

[dcc64 Fehler] uMain.pas(513): E1025 Sprach-Feature wird nicht unterstützt: 'ASM'
Zitat:

Hast du DCUs im selben Ausgabeverzeichnis, für alle Platformen?
Nein.
Diese sind getrennt in jeweiligen Root der Projekte im Ordner "dcu"
Zitat:

Also dort wo Assember noch geht, da dann nur noch als komplette Funktion (abgesehn von Win32)
Delphi-Quellcode:
function TSkinEngine.Rgb2Gray(RGBValue: COLORREF): COLORREF; stdcall;
asm
  movzx edx, al
  imul edx, 19595 //Red
  movzx ecx, ah
  imul ecx, 38470 //Greean
  shr eax, 16
  imul eax, 7471 //Blue
  add eax, ecx
  add eax, edx
  shr eax, 16
  mov ah, al
  shl eax, 8
  mov al, ah
end;
Funktioniert unter 64Bit.. sagte ich schon.
Zitat:

"Assembler" als Schlüsselwort dürfte schon ewig keine Auswirkng mehr haben
Verwende stdcall !

Das Problem sind die Abhängigkeiten.
Addiere ich SOP.exe (32Bit) zu den Abhängigkeiten der 64Bit Anwendung funktioniert das Kompilieren nicht mehr.
Mit den im ersten Beitrag angegebenen Fehlermeldungen.

TiGü 14. Feb 2022 10:02

AW: ASM Inline code x64
 
Zitat:

Zitat von venice2 (Beitrag 1502116)

Aktueller Fehler. 64Bit
Zitat:

[dcc64 Fehler] uMain.pas(513): E1025 Sprach-Feature wird nicht unterstützt: 'ASM'
Aber nur wenn ich die 32Bit exe als Abhängigkeit zuweise.
Zudem treten dann noch andere Probleme auf.

Ich verstehe diesen Punkt nicht.
Was genau machst du da? Wie weist du "die Abhängigkeit" zu?

venice2 14. Feb 2022 12:14

AW: ASM Inline code x64
 
Rechte Maustaste auf Projekt dann aus Menu "Abhängigkeiten.." anklicken. 32Bit Anwendung Checkbox aktivieren.

TiGü 14. Feb 2022 14:37

AW: ASM Inline code x64
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von venice2 (Beitrag 1502149)
Rechte Maustaste auf Projekt dann aus Menu "Abhängigkeiten.." anklicken. 32Bit Anwendung Checkbox aktivieren.

Also das hier:
Anhang 54866

Das sind bei dir aber schon zwei verschiedene Projekte, richtig?
Jetzt nicht irgendwie merkwürdig in sich selbst abhängig?!

venice2 14. Feb 2022 14:43

AW: ASM Inline code x64
 
Zitat:

Das sind bei dir aber schon zwei verschiedene Projekte, richtig?
Jetzt nicht irgendwie merkwürdig in sich selbst abhängig?!
Was ist in sich selbst abhängig?

64Bit ist die Basis 32Bit die Abhängigkeit hatte ich aber schon geschrieben.

Bei dir wäre das Projekt1 die Basis und die andere die Abhängigkeit.
Ohne Projekt 2 würde Projekt 1 nicht korrekt funktionieren.

Wenn ich 64Bit kompiliere dann soll die 32Bit Anwendung ebenfalls kompiliert werden weil 64Bit abhängig von der 32Bit ist.
64Bit würde nicht korrekt funktionieren wenn die 32Bit nicht vorher kompiliert wurde.

Oder anders..
Wenn ich die Projektgruppe kompiliere tritt auch hier der gemeldete Fehler auf!
Kann gerne ein Video aufnehmen um es zu demonstrieren.

TiGü 14. Feb 2022 14:55

AW: ASM Inline code x64
 
Ja, bitte!


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 Uhr.
Seite 1 von 4  1 23     Letzte »    

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