NASM beklagt sich beim übersetzen eines Codes in ASM



  • ...oder versuche zumindest erstmal, den TASM-Kompatibilitaetsmodus beim NASM ein zu schalten. Blick in die Parameteruebersicht mit /? und die Docu hilft.

    Ich weiss allerdings nicht, ob der nur den "echten" TASM-"IDEAL"-Modus unterstuetzt oder auch MASM-Code.
    Dein Code sieht mir naemlich genau genommen auch nicht wie TASM- sondern mehr wie MASM-Code aus. 🙄

    Auf NASM ausgelegte, gute Anfaengertutorials sind ziemlich rar... Falls gar nichts geht, koennte also auch ein Versuch mit einer 16Bit-Version des MASM was bringen.



  • Assembling: C:\masmPJ\first.asm
    C:\masmPJ\first.asm(9) : error A2004: symbol type conflict
    C:\masmPJ\first.asm(19) : warning A4023: with /coff switch, leading underscore required for start address : main
     Volume in Laufwerk C: hat keine Bezeichnung.
     Volumeseriennummer: 3074-3647
    
     Verzeichnis von C:\masmPJ
    
    22.08.2009  22:50               267 first.asm
                   1 Datei(en)            267 Bytes
                   0 Verzeichnis(se),  9.011.888.128 Bytes frei
    
    .model small
    .stack
    .data
    message   db "Hello world, I'm learning Assembly !!!", "$"
    
    .code
    
    main   proc
       mov   ax,seg message
       mov   ds,ax
    
       mov   ah,09
       lea   dx,message
       int   21h
    
       mov   ax,4c00h
       int   21h
    main   endp
    end main
    

    Ich verwende jetzt nicht mehr NASM (auch nicht mehr C ;)) sondern MASM den Makro Assembler von Microsoft und dieser meldet mir 2 Fehler die ich im moment nicht begreifen kann. Ich verwende übrigens diesmal ein anderes Tutorial (s. u.):

    http://www.xs4all.nl/~smit/asm01001.htm



  • Wie rufst du den Assembler auf? Aus Microsofts IDE heraus wird das mehreren Quellen zufolge nicht funktionieren. Probiere also mal direkt ueber die Konsole ml aufzurufen, evtl. mit dem switch /c dazu.
    Falls es noch immer mit Zeile 9 Probleme gibt, kannst du "seg message" mal durch "@data" ersetzen (holt allgemein die Segmentadresse des Datensegments).
    Die Warnung kannst du ignorieren, oder ihm den Gefallen tun, einen "_" vor dein Einstiegslabel zu packen (also immer "_main" schreiben).



  • Das "_" vor main gesetzt, seg message durch @data ersetzt und trotzdem kommt eine Fehlermeldung:

    9 - error A2006: undefined symbol : DGROUP

    und ein warning, aber das kann ich ja ignorieren.

    Grüße
    agi 🙂



  • Nobuo T schrieb:

    Wie rufst du den Assembler auf?

    Bitte mal detailliert beschreiben.



  • Nobuo T schrieb:

    Nobuo T schrieb:

    Wie rufst du den Assembler auf?

    Bitte mal detailliert beschreiben.

    Mit der IDE (da wird ja auch eine Konsole aufgerufen) und anders weis ich nicht wie.



  • Nobuo T schrieb:

    Aus Microsofts IDE heraus wird das mehreren Quellen zufolge nicht funktionieren. Probiere also mal direkt ueber die Konsole ml aufzurufen, evtl. mit dem switch /c dazu.

    ➡
    Konsole aufmachen, in das Verzeichnis mit deinen Quellcodes wechseln und dann "ml /c first.asm" eingeben. Falls der Pfad zu ml nicht im path steht, musst du halt den kompletten pfad von ml.exe eingeben.



  • Wenn ich "ml /c first.asm" eingebe kommt folgende Meldung:

    "Der Befehl "ml" ist entweder falsch geschrieben oder konnte nicht gefunden werden."

    Wo soll ich den kompletten Pfad eingeben in der cmd?

    edit:
    Und Ml ist der linker richtig?



  • Nein. ml ist der MASM.
    Ich schlage vor, bevor du dich weiter mit fortgeschrittenen Programmierthemen beschaeftigst, lernst du erstmal die Grundlagen des Umgangs mit dem Betriebssystem auf dem du arbeitest (also Windows) - genauer die wichtigsten Befehle der Konsole. 😃

    Wenn du das getan hast, kannst du ja nochmal versuchen, das hier umzusetzen:

    Nobuo T schrieb:

    Falls der Pfad zu ml nicht im path steht, musst du halt den kompletten pfad von ml.exe eingeben.



  • woher hast du den masm? Du brauchst nämlich eine 16Bit-Linker damit die Sache überhaupt läuft.


Anmelden zum Antworten