Entwickler-Ecke

Sonstiges (Delphi) - Assembler Files einbinden


FrEEzE2046 - Mi 09.12.09 12:26
Titel: Assembler Files einbinden
Hallo,

ich suche eine Möglichkeit reinen Assembler Code in Delphi zu verwenden.

Soll heißen:
Ich habe mehrere reine Assembler Dateien, die verschiedene Routinen enthalten, die ich in Delphi nutzen möchte. Prinzipiell muss ich nur eine Möglichkeit haben die asm-files zu kompilieren (ggf. eben mit nasm) und dem Delphi-Linker mitzuteilen, dass ich ein paar externe Procedures und Functions habe.

Dass das möglich ist zeigt Delphi selbst in der system.pas (zu finden unter "...\Borland\Delphi5\Source\Rtl\Sys\") wo verschiedene assembler funktionen als extern deklariert wurden.


Wie genau muss ich da vorgehen? Ich bin ein C/C++ Mensch und verwende Delphi nur in der Not. Wäre wirklich super, wenn jemand die Lösung hätte.


BenBE - Mi 09.12.09 18:10

Grundsätzlich gibt es für die Nutzung von ASM unter Delphi 3 Möglichkeiten.

Fangen wir an:
Die einfachste Variante ist die Nutzung von Inline-ASM in einer Funktion. Je nach Umfang kann man hier entweder einen Teilblock, oder die gesamte Funktion in ASM fassen.

Was Delphi in der System.pas macht ist IIRC die nutzung von {$I 'datei.inc'} zum Einbinden von zusätzlichen Source-Dateien. Diese ist grundsätzlich mit der oberen Variante identisch, beschränkt jedoch auf die Nutzung vollständiger Code-Blöcke in den externen Dateien.

Möglichkeit 2 ist die Nutzung von Object-Files. Was Delphi da wirklich hernimmt, ist mir bisher schleierhaft, da weder GCC noch MSVC kompatible Object-Files erzeugen. Die Nutzung dieser Möglichkeit ist z.B. bei der ZLib umgesetzt und benötigt eine External-Deklaration der zugehörigen Funktionen inklusive der Nutzung der Compiler-Direktive [$'objfile.obj'}.

Und zu guter Letzt bleibt noch die Variante 3: ASM-Routinen als DLL einbinden.

Einen direkten Compiler zur Nutzung von ASM, wie es in C möglich ist, ist in Delphi nicht vorgesehen. Unter Delphi scheitert man bei ASM schon bei OOP an einigen etwas umfangreicheren Konstrukten. Insgesamt ist es daher unter Delphi keine gute Idee ASM einzusetzen, wo es nicht notwendig ist ...

MfG,
BenBE.