Assembler in C einbinden
-
Hallo,
Ich hab ein kleines Programm in Turbo C++ geschrieben das auf eine Routine die in Assembler geschrieben wurde von C aus aufruft. Das Problem ist, das ich die beiden nicht zu einer EXE Datei linken kann.#################### C Programm - "prog02c.cpp" ############# extern void Ausgabe(); void main () { Ausgabe(); } ############################### ENDE ###################
#################### ASM - "prog02.asm" ################### DATA SEGMENT BYTE PUBLIC str1 DB '1.erste Ausgabe!',13,10,'$' DATA ENDS CODE SEGMENT WORD PUBLIC ASSUME CS:CODE, DS:DATA PUBLIC _Ausgabe _Ausgabe PROC FAR mov dx, OFFSET str1 mov ah, 09h int 021h ret _Ausgabe ENDP CODE ENDS END ###################################################
Dann Compiliere ich prog02c.cpp -> prog02c.obj
Dann Compiliere ich prog02.asm -> prog02.obj
... und jetzt
versuche ich mit TLINK prog02c.obj prog02.obj
... die beiden zu einer EXE Datei zu linken jedoch kommt dann die
FehlermeldungE:\TC\BIN>tlink prog02.obj prog02c.obj
Turbo Link Version 5.0 Copyright (c) 1992 Borland International
Error: Undefined symbol ausgabe() in module PROG02C.CPP
Error: Undefined symbol N_OVERFLOW@ in module PROG02C.CPP
Error: Undefined symbol ___BRKLVL in module PROG02C.CPP
Warning: No stackKann mir jemand helfen???
Danke im voraus!mfg
RadekEditBySideWinder: Nächstes Mal bitte selbständig Code-Tags einfügen!
[ Dieser Beitrag wurde am 27.01.2003 um 15:42 Uhr von SideWinder editiert. ]
-
Hallo,
die Deklaration solltest Du schon mal anders definieren, da sie sich in einer CPP-Datei befindet:
extern "C" void Ausgabe();
Dann musst Du sicherstellen, dass die CPP-Datei auch im Modell LARGE übersetzt wird (Deine ASM-Funktion ist FAR). Für alle Fälle schreibe ich Dir nochmal den ganzen Quelltext mit meinen Änderungen auf, für die Annahme, es wird das Speichermodell LARGE verwendet (ich habe den TASM 5.0, mit dem funktionierts):
#################### C Programm - "prog02c.cpp" ############# extern "C" void Ausgabe(); void main () { Ausgabe(); } ############################### ENDE ################### #################### ASM - "prog02.asm" ################### P386 MODEL LARGE ; Borland-C kompatibles Datensegment: DATASEG str1 DB '1.erste Ausgabe!',13,10,'$' @curseg ENDS ; Borland-C kompatibles Codesegment: CODESEG PUBLIC _Ausgabe LOCALS _Ausgabe PROC mov dx, OFFSET str1 mov ah, 09h int 021h ret ENDP END ###################################################