Hallo zusammen!
Vor ein paar Tagen hatte ich hier euch schon mal wegen einer Anfrage zum Thema Assembler genervt. Jetzt habe ich mir ein Buch (Assembler / M. Roming u. J. Rohde / mitp-Verlag) besorgt und möchte Assembler richtig lernen. Das heißt ich bin auch noch ein echter Anfänger.
Als Assembler habe ich mir NASM Version 0.98.39 (für DOS) und MASM32 Version 8 besorgt, wobei ich lieber mit NASM arbeiten würde. Hierzu auch schon meine erste Frage: Kann NASM mit den entsprechenden LIBs auch Windows-Fenster erzeugen wie MASM?
Um den Umgang mit dem Assembler zu erlernen habe ich das erste Testprogramm aus dem oben genantem Buch abgeschrieben. Hier das Listing dazu:
.model small
.stack 100h
.data
meldung db „Hallo Welt$“
.code
start:
mov ax, @data
mov ds, ax
mov dx, offset meldung
mov ah, 09h
int 21h
mov ah, 4Ch
int 21h
end start
Beide Assembler haben mir keine EXE-Datei erzeugen können. So wie ich das verstehe hängt es nicht am Assembler selbst, sondern am Linker. Ich habe schon ein paar Codemodifikationen selbst ausprobiert, wie zum Beispiel die STACK-Deklaration wegzulassen, was aber alles nichts geholfen hat.
MASM-Eingabe: ml bsp.asm
MASM-Ausgabe:
Microsoft ® Macro Assembler Version 6.14.8444
Copyright © Microsoft Corp 1981-1997. All rights reserved.
Assembling: bsp.asm
Microsoft ® Incremental Linker Version 5.12.8078
Copyright © Microsoft Corp 1992-1998. All rights reserved.
/z2
„bsp.obj“
„bsp.exe“
NUL
LINK : warning LNK4044: unrecognized option „z2“; ignored
LINK : error : Segment reference in fixup record
bsp.obj : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt
NASM-Eingabe: nasm bsp.asm
NASM-Ausgabe:
bsp.asm:1: error: attempt to define a local label before any non-local labels
bsp.asm:1: error: parser: instruction expected
bsp.asm:2: error: attempt to define a local label before any non-local labels
bsp.asm:2: error: parser: instruction expected
bsp.asm:3: error: attempt to define a local label before any non-local labels
bsp.asm:9: error: comma or end of line expected
bsp.asm:14: error: parser: instruction expected
Meine Frage ist recht simpel: Wo liegt der Fehler? Den Quelltext habe ich schon mehrfach überprüft und den habe ich richtig abgetippt. Das heißt entweder liegt es am Programm selbst, oder an den Parametern für den Assembler.
Ich muss noch dazu sagen, dass das Buch nur TASM und MASM verwendet, ich aber lieber NASM verwenden würde, weil der auch unter Linux funktioniert. In dem Buch steht das man MASM mit der Option /c aufrufen soll, damit keine EXE-Datei sondern nur ein Objectfile erzeugt wird. Mit „link bsp.obj“ sollte dann der Linker die EXE-Datei erzeugen. Auch diese Vorgehensweise hat nicht zum Ziel geführt.
Grüße
C. Penkwitt