AGB  ·  Datenschutz  ·  Impressum  







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

Assembler Files einbinden

Ein Thema von FrEEzE2046 · begonnen am 9. Dez 2009 · letzter Beitrag vom 11. Jan 2010
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
FrEEzE2046

Registriert seit: 25. Aug 2009
27 Beiträge
 
#1

Assembler Files einbinden

  Alt 9. Dez 2009, 11:23
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Assembler Files einbinden

  Alt 9. Dez 2009, 12:08
du kannst es direkt als "Inline-ASM" anlegen

das geht an jeder Stelle innerhalb des Pascalcodes oder auch als kompletter Prozedurrumpf.
Delphi-Quellcode:
asm
  mov eax, 0
end;
wenn du reine ASM-Befehle im "Delphi-Stiel" einbinden willst
Delphi-Quellcode:
asm
  {$INLINE myfile.asm}
end;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
FrEEzE2046

Registriert seit: 25. Aug 2009
27 Beiträge
 
#3

Re: Assembler Files einbinden

  Alt 9. Dez 2009, 12:49
Zitat von himitsu:
du kannst es direkt als "Inline-ASM" anlegen
Danke für deine Hilfe. Ich habe aber extra "reines asm" geschrieben, da ich den Inline-Assembler eben NICHT benutzen will.
Dass die Möglichkeit besteht, zeigt - wie bereits erwähnt - die System.pas.

Irgendwie muss das doch möglich sein, dem Linker mitzuteilen, dass da was existiert. Wenn ich die Funktion per extern kennzeichne und den Pfad zu einer aout datei setzte, dann kommt die Fehlermeldung, dass die datei keine "Windowsdatei" wäre ...
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Assembler Files einbinden

  Alt 9. Dez 2009, 13:11
Übersetzen mit TASM und in Delphi einbinden per Schlüsselwort "external" und dem Befehl die OBJ dazu zu linken "{$L file.obj}"
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Assembler Files einbinden

  Alt 9. Dez 2009, 13:15
Schuss ins Blaue: *.asm in *.obj kompilieren und in einer Delphi-Unit {$L Funktionen.obj}. Sowas Ähnliches wird in ZLib.pas (in den VCL-Sourcen, zumindest bei mir (D2007)) gemacht.

@Roter Kasten: Ich hab ja noch den Verweis auf ZLib als Beispiel.
Uli Gerhardt
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#6

Re: Assembler Files einbinden

  Alt 9. Dez 2009, 13:18
Zitat von FrEEzE2046:
Danke für deine Hilfe. Ich habe aber extra "reines asm" geschrieben, da ich den Inline-Assembler eben NICHT benutzen will.
Dass die Möglichkeit besteht, zeigt - wie bereits erwähnt - die System.pas.

Irgendwie muss das doch möglich sein, dem Linker mitzuteilen, dass da was existiert. Wenn ich die Funktion per extern kennzeichne und den Pfad zu einer aout datei setzte, dann kommt die Fehlermeldung, dass die datei keine "Windowsdatei" wäre ...
Das ist Unsinn: System.pas bindet kein reines asm ein. Was gemacht wird - und schon seit dem letzen Jahrtausend unterstützt wird-, ist das Einbinden von Obj-Files. Wo die herkommen ist im Prinzip egal, Du kannst zB ASM-Files mit TASM oder MASM übersetzen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Assembler Files einbinden

  Alt 9. Dez 2009, 13:32
Der Delphi-Compiler kennt nur sein Pascal, das sogenannte "Inline"-ASM und den vorkompilierten Maschienencode aus OBJ-Dateien.

Wenn du ihm etwas Anderes mitgeben willst, dann mußt du dieses erstmal in ein Format bringen, welches der Delphi-Compiler kennt.
Also, indem man z.B. Assembler via TASM oder MASM oder C über einen C-Compiler in das OBJ-Format umwandelt.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
FrEEzE2046

Registriert seit: 25. Aug 2009
27 Beiträge
 
#8

Re: Assembler Files einbinden

  Alt 9. Dez 2009, 14:02
Zitat von gammatester:
Das ist Unsinn: System.pas bindet kein reines asm ein. Was gemacht wird - und schon seit dem letzen Jahrtausend unterstützt wird-, ist das Einbinden von Obj-Files. Wo die herkommen ist im Prinzip egal, Du kannst zB ASM-Files mit TASM oder MASM übersetzen.
Ich wollte auch nicht sagen, dass der Delphi-Compiler Assembler kompilieren kann. Die Antwort, eine Obj.-Datei per extern einzubinden, war die die ich wollte. Ich meinte eigentlich auch lediglich, dass System.pas auch externe (ursprünglich in assembler geschriebene) Routinen einbindet.
  Mit Zitat antworten Zitat
FrEEzE2046

Registriert seit: 25. Aug 2009
27 Beiträge
 
#9

Re: Assembler Files einbinden

  Alt 9. Dez 2009, 14:12
Ich bekomms einfach nicht hin:

Hab mal ein Test-Szenario erstellt. Sieht folgendermaßen aus:


Delphi-Quellcode:
unit TestUnit;

interface

   function Summe(i1, i2 : Integer): Integer;

implementation

   function Summe(i1, i2 : Integer): Integer; external; {$L sum.obj}

end.

Code:
global _Summe

; function Summe(i1, i2: Integer): Integer ;
_Summe:
  add eax, edx
  ret

Ich habe "sum.obj" folgendermaßen kompiliert:
nasmw -f obj -o sum.obj
nasmw -f win32 -o sum.obj


Ich bekomme die Meldung, dass sum.obj ein falsches Dateiformat wäre (win32) bzw. 16-Bit Segmente entdeckt wurden (obj)


Was mache ich falsch?
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#10

Re: Assembler Files einbinden

  Alt 9. Dez 2009, 14:46
Wenn sum.asm Dein Beispiel wie folgt enthält
Code:
.586
.model flat
.code
public sum
sum proc
    add eax,edx
    ret
sum endp
    end
mit Tasm32 assemblieren: Tasm32 sum.asm und einbinden mit
function sum(a,b: integer):integer; register; external; {$l sum.obj} Läuft ohne Probleme.

Ansonsten Aufrufkonventionen beachten/anpassen: stdcall, pascal, cdecl Stichwort Calling conventions in Onlinehilfe.
  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 21:24 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