AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ASM Inline code x64

Ein Thema von venice2 · begonnen am 13. Feb 2022 · letzter Beitrag vom 16. Feb 2022
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
venice2
(Gast)

n/a Beiträge
 
#1

ASM Inline code x64

  Alt 13. Feb 2022, 20:48
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!

Geändert von venice2 (13. Feb 2022 um 23:08 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.827 Beiträge
 
Delphi 12 Athens
 
#2

AW: ASM Inline code x64

  Alt 13. Feb 2022, 21:08
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;
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#3

AW: ASM Inline code x64

  Alt 13. Feb 2022, 21:10
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.

Geändert von venice2 (14. Feb 2022 um 00:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#4

AW: ASM Inline code x64

  Alt 14. Feb 2022, 01:33
"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?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (14. Feb 2022 um 01:41 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#5

AW: ASM Inline code x64

  Alt 14. Feb 2022, 01:35
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.

Geändert von venice2 (14. Feb 2022 um 02:14 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: ASM Inline code x64

  Alt 14. Feb 2022, 10:02

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?
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#7

AW: ASM Inline code x64

  Alt 14. Feb 2022, 12:14
Rechte Maustaste auf Projekt dann aus Menu "Abhängigkeiten.." anklicken. 32Bit Anwendung Checkbox aktivieren.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: ASM Inline code x64

  Alt 14. Feb 2022, 14:37
Rechte Maustaste auf Projekt dann aus Menu "Abhängigkeiten.." anklicken. 32Bit Anwendung Checkbox aktivieren.
Also das hier:
depends.png

Das sind bei dir aber schon zwei verschiedene Projekte, richtig?
Jetzt nicht irgendwie merkwürdig in sich selbst abhängig?!
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#9

AW: ASM Inline code x64

  Alt 14. Feb 2022, 14:43
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.

Geändert von venice2 (14. Feb 2022 um 14:46 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: ASM Inline code x64

  Alt 14. Feb 2022, 14:55
Ja, bitte!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 05:53 Uhr.
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