Autor Beitrag
FrEEzE2046
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109

Windows 98, 2000, XP Pro, Vista Ultimate 32 & 64 Bit, Windows 7 Beta 64 Bit
C/C++, C# (VS 2008 TeamSystem) - Delphi (Delphi 5) - Java (Eclipse)
BeitragVerfasst: Mi 09.12.09 12:26 
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.