AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Parameterübergabe an Assemblerfuktionen?
Thema durchsuchen
Ansicht
Themen-Optionen

Parameterübergabe an Assemblerfuktionen?

Ein Thema von DualCoreCpu · begonnen am 28. Okt 2015 · letzter Beitrag vom 30. Okt 2015
Antwort Antwort
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
492 Beiträge
 
Delphi 12 Athens
 
#1

AW: Parameterübergabe an Assemblerfuktionen?

  Alt 28. Okt 2015, 10:50
lässt sich mit einem einfachen Programm leicht überprüfen.
Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

function Test(B: Byte; W: Word; I: Integer): LongInt;
begin
  Result := B + W + I;
end;

begin
  try
    writeln(Test(5, 50000, 1000000));
    { TODO -oUser -cConsole Main : Code hier einfügen }
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
CPU-Ansicht:
Code:
Project1.dpr.17: writeln(Test(5, 50000, 1000000));
0041C4B0 B940420F00       mov ecx,$000f4240
0041C4B5 66BA50C3         mov dx,$c350
0041C4B9 B005             mov al,$05
0041C4BB E814D5FFFF      call Test
  Mit Zitat antworten Zitat
DualCoreCpu
(Gast)

n/a Beiträge
 
#2

AW: Parameterübergabe an Assemblerfuktionen?

  Alt 28. Okt 2015, 12:31
Danke @BerndS.

Dann brauch ich mir diesbezüglich keine Sorgen zu machen.
  Mit Zitat antworten Zitat
Benutzerbild von TRomano
TRomano

Registriert seit: 24. Nov 2004
Ort: Düsseldorf
194 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Parameterübergabe an Assemblerfuktionen?

  Alt 28. Okt 2015, 12:36
Sorgen machen musst Du dir nur, wenn Du ein 64bit-Kompilat ersteellen willst. Da ist die Reihenfolge der Parameter nämlich eine andere ...
Thomas Forget
  Mit Zitat antworten Zitat
DualCoreCpu
(Gast)

n/a Beiträge
 
#4

AW: Parameterübergabe an Assemblerfuktionen?

  Alt 28. Okt 2015, 13:46
Sorgen machen musst Du dir nur, wenn Du ein 64bit-Kompilat ersteellen willst. Da ist die Reihenfolge der Parameter nämlich eine andere ...
Ok, danke für den Hinweis.

Damit werd ich mich später beschäftigen. Jetzt erst mal 32Bit.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.154 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Parameterübergabe an Assemblerfuktionen?

  Alt 29. Okt 2015, 12:30
Nur aus reiner Neugier...

Was gibt es heute noch, dass man in ASM programmieren "muss"...
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

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

AW: Parameterübergabe an Assemblerfuktionen?

  Alt 29. Okt 2015, 12:33
Nur aus reiner Neugier...

Was gibt es heute noch, dass man in ASM programmieren "muss"...
Zumindest mal Teile von Bootloadern/Betriebssystemen
Ansonsten kann je nach Situation SSE hilfreich sein, was der Compiler nicht automatisch hinbekommt.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
SMO

Registriert seit: 20. Jul 2005
178 Beiträge
 
Delphi XE6 Professional
 
#7

AW: Parameterübergabe an Assemblerfuktionen?

  Alt 29. Okt 2015, 13:52
Was gibt es heute noch, dass man in ASM programmieren "muss"...
Jede Menge, wenn man an Leistung interessiert ist. Der Delphi-Compiler optimiert leider nicht gut genug.
Natürlich sollte man aufpassen, keine "premature optimization" durchzuführen. Aber wenn man eine rechenintensive Anwendung hat, kann es sich lohnen, mit einem Profiler nach den Engstellen zu suchen und diese in Assembly zu schreiben (mit SSE und allem Pipapo).
FL Studio zum Beispiel benutzt Delphi und jede Menge Inline Assembly für Audiosignalverarbeitung.

Außerdem geht manches in Assembly schlicht einfacher. Konvertierung zwischen Big- und Little-Endian zum Beispiel. Für 16 Bit Werte gibt's in Delphi immerhin noch die intrinsische Funktion "Swap". Für 32 Bit muss man sich selbst etwas basteln, aus shl/shr, and, or. In Intel Assembly gibt's dafür einen dedizierten Befehl: bswap. Ich warte schon seit Jahren, dass Delphi das auch mal als intrinsische Funktion zur Verfügung stellt (Swap32 oder so). Aber das wird wohl nichts mehr; und wenn ich in der Hilfe zu Swap (siehe oben) lese "Die Prozedur dient lediglich der Abwärtskompatibilität", kann ich nur den Kopf schütteln...

Geändert von SMO (29. Okt 2015 um 13:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#8

AW: Parameterübergabe an Assemblerfuktionen?

  Alt 29. Okt 2015, 15:18
Das ist etwas was mit dem GCC super funktioniert. Ge-inlinte Funtionen mit eingebettetem Assembler, wobei man Angaben zu Eingabe- und Ausgabe-Registern machen kann, sogar ohne sich auf spezifische Register festzulegen
Dank der besser spezifizierten AMD64/x64-ABI sollte es in Zukunft nur einfacher werden, Aufrufe zu implementieren.


Natürlich sollte man aufpassen, keine "premature optimization" durchzuführen.
Für das Backend macht es imho Sinn, die Zielarchitektur zu kennen bevor man mit dem Design loslegt. Das Anforderungen des Problems sollte bekannt sein, die Fähigkeiten der Hardware sollten bekannt sein. Damit kann man dann von vornherein sinnvolle Abstraktionen festlegen, die man dann später auch Optimieren kann. Als Anwendungsprogrammierer bekommt man das in Form von Bibliotheken serviert und muss das dann sinnvoll einsetzten; das Wissen über die Zielplattform sollte an der Stelle schon wegabstrahiert sein.
Die beiden Hüte kann sich natürlich auch ein und die selbe Person aufhaben.

Geändert von BUG (29. Okt 2015 um 15:20 Uhr)
  Mit Zitat antworten Zitat
DualCoreCpu
(Gast)

n/a Beiträge
 
#9

AW: Parameterübergabe an Assemblerfuktionen?

  Alt 29. Okt 2015, 16:22
Nur aus reiner Neugier...

Was gibt es heute noch, dass man in ASM programmieren "muss"...
Schnelle Grafikroutinen für PC Spiele. Mathematische Funktionen für lanwierige Berechnungen. Es sei denn letzere werden schon auf Operatorebene passend optimiert.

Ich beschäftige mich gerade mit Ati Grain Gerometry http://www.antigrain.com.

Graeme Geldenhuys, der Macher des fpGUI Prokektes hat zur fpGUI die Pascal Version dieser Bibliothek dazu gepackt. Und bei einem Demo bin ich von der Darstellungsgeschewindigkeit regelrecht enttäuscht. Da könnte sich Assembelerprogrammierung noch lohnen.

Ansonsten Neugier, sehen wie die CPU unsere Programme verarbeitet.

Und natürlich die Compilerhersteller müssen wissen, welcher Code für das Hochsprachenkonstrukt erzeugt werden muss. Auch heute noch, es gibt ständig Compilererweiterungen.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#10

AW: Parameterübergabe an Assemblerfuktionen?

  Alt 29. Okt 2015, 18:21
Und bei einem Demo bin ich von der Darstellungsgeschewindigkeit regelrecht enttäuscht. Da könnte sich Assembelerprogrammierung noch lohnen.
Puh. Also um noch schnelleren Code zu schreiben als die heutigen hochoptimierten Compiler, musst du wohl vorher 20 Jahre bei Intel in der CPU Entwicklung gearbeitet haben Gut, Delphi generierter Code ist leider so ziemlich gar nicht optimiert (im Gegenteil findet man ziemlich oft sogar sinnlose Instruction/Abfolgen), aber wenn du MSVC oder CLang Kompilate (in Lib- oder Dll Form) verwendest, werden die zu 99% immer performanter sein als dein eigener Assembler Code.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:38 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