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
DualCoreCpu
(Gast)

n/a Beiträge
 
#1

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.130 Beiträge
 
Delphi 10.3 Rio
 
#2

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
 
#3

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
 
#4

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
 
#5

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
 
#6

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
 
#7

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
Benutzerbild von Mavarik
Mavarik

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

AW: Parameterübergabe an Assemblerfuktionen?

  Alt 29. Okt 2015, 20:07
OMG Danke für die vielen Antworten...

Das war nicht die Frage...

Natürlich gibt es genug was man in ASM besser machen kann...

Systemnahe Programmierung sowieso... Aber in Zeiten von: Mein Code soll auf 32bit/64Bit Intel, ARM 32Bit/64Bit laufen,
stellt sich kaum noch die Frage... Weil einfach zu aufwendig...

Wie hieß es früher? Besser gut C programmieren als schlecht ASM... Wer programmiert schon "multicore" ich würde sagen vor TPL 5% der Delphi-Programmierer... Da sehe ich mehr Möglichkeiten als wenige % mit ASM raus zu holen...

Aber jeder wie er mag...
  Mit Zitat antworten Zitat
Benutzerbild von TRomano
TRomano

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

AW: Parameterübergabe an Assemblerfuktionen?

  Alt 30. Okt 2015, 08:28
Ich bin da voll bei @Mavarick, wenn es um Multi-platform geht. Leider ist der Windows-Teil des Delphi-Compilers nicht gerade optimierend ...
Wenn ich nur daran denke, wenn man mal größere Array´s aufsummieren muss, dann lohnt sich geschicktere Pascal-Programmierung (siehe pipelines) oder eben Assembler mit SSE- oder AVX-Erweiterungen. Das wird wohl noch eine Weile so bleiben, oder soll der Delphi-Windows-Compiler auch ersetzt werden ?
Thomas Forget
  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 03:34 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