Martin L.: ASSEMBLER Problem

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

  1. 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

    1. 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).

      1. 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

        1. 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^^

        2. 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