ASSEMBLER Problem
Martin L.
- sonstiges
So ich habe mich jetzt ein wenig in Assembler zurecht gefunden und habe jetzt aber ein Problem, für das ich keine Lösung finde:
es geht um unterprogramme und ich bekomme immer wenn ich das mit masm zu ner obj datei machen lassen nen Fehler
1.PROGRAMM----------------------------------------------
--------------------------------------------------------
--------------------------------------------------------
EXTERN PRINT:FAR
EXTERN MSDOS:FAR
DATEN SEGMENT
MELDUNG DB "Meldung aus Datei 1 !","$"
DATEN ENDS
STAPEL SEGMENT BYTE STACK
DW 128 DUP(0)
STAPEL ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATEN,ES:NOTHING,SS:STAPEL
START:
MOV AX, DATEN
MOV DS, AX
MOV DX, OFFSET MELDUNG
CALL PRINT
CALL MSDOS
CODE ENDS
----------------------------------------------------------
-----------------------------------------------------------
----------------------------------------------------------
Fehler der programms:
expectet: instruction, directive or label
expectet: instruction, directive or label
Symbol not defined: PRINT
Symbol not defined: MSDOS
----------------------------------------------------------
--------------------------------------------------------
-----------------------------------------------------
woran kann das liegen?
ich geh jetz in die schule und hoffe ihr könnt mir helfen
Grazie in anticipo
Hi !
Wo sind denn die Funktionen PRINT und MSDOS definiert?
Wenn mich meine Gehirnzellen nicht im Stich lassen - mach mal statt
CALL PRINT
ein
INT 21h (war immer der Aufruf zum Ausgeben von Text)
Gruß
Hans
Wo sind denn die Funktionen PRINT und MSDOS definiert?
Da:
EXTERN PRINT:FAR
EXTERN MSDOS:FAR
Möglicherweise liegt in den beiden Zeilen auch der Hund begraben. Vielleicht mal mit einem anderen Attribut probieren oder die Kommandozeilenoptionen nochmals prüfen (nicht, dass er statt einer Objektdatei gleich ein Programm basteln will).
damit kann ich jetzt nicht viel tuen :-( das ist erst mein zweiter tag mit assembler^^
also ich habe noch ein subprogramm, in dem die beiden funktionen drin sind. die werden dann mit call aufgerufen laut tutorial (bisher war das auch sehr gut)
wenn das unterprogramm nenne ich es jetzt mal im gleichen segment steht und ich es als near habe, dann klappt das auch mit dem callen ohne probleme.
laut tutorial sagt das extern <name><far>, dass es irgendwo extern diese funktionen gibt, die dann nachher durch den linker halt verbunden werden. schön erklärt mit zwei ösen die ausgeworfen werden...
das tutorial arbeitet allerdings mit TASM das ist aber shareware also habe ich MASM das soll allerdings genau so funkionieren......
Das es an den zwei zeilen liegt das denke ich auch, nur habe ich keine ahnung wie ich das ändern soll... wie sagt ihr dem das denn, wenn ihr unterprogramme aus einer anderen datei holen wollt ?
Grazie in anicipo
ich hab den fehler. ich hab buchstabe für buchstabe gelesen und es ist so, das im tutorial EXTRN steht. ich habe das in meiner blindheit nicht gesehen und EXTeRN geschrieben.
Damit ist das gelöst^^
Yerf!
Ich hab zwar keine Erfahrung mit x86 Assembler, aber das Problem ergibt sich bei C ähnlich...
laut tutorial sagt das extern <name><far>, dass es irgendwo extern diese funktionen gibt, die dann nachher durch den linker halt verbunden werden. schön erklärt mit zwei ösen die ausgeworfen werden...
Genau, es ist Aufgabe des Linkers, beide Dateien zu "verbinden".
Das es an den zwei zeilen liegt das denke ich auch, nur habe ich keine ahnung wie ich das ändern soll... wie sagt ihr dem das denn, wenn ihr unterprogramme aus einer anderen datei holen wollt ?
Ist der Linker eigentlich ein extra Programm? Wenn ja, versuch z.B. mal beide Dateien als Aufrufparametre zu übergeben. Ansonsten musst du mal die Hilfe deines Assemblers bemühen, wie du ihn dazu bringst, beide Dateien gemeinsam "durch den Linker zu jagen".
Gruß,
Harlequin