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 mainIch 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.):
-
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.