MASM32
-
Hallo. Ich habe mir das Buch von Reiner Backer gekauft um einen Einblick in die Assemblerprogrammierung zu ermöglichen. Ich habe vom Programmieren keine Ahnung und kann deshalb auf kein Grundwissen einer anderen Programmiersprache zurückgreifen.
Also, folgendes Problem...
Ich habe ein Programm aus dem Buch abgeschrieben und möchte es jetzt assemblieren.Das Übungsprogramm:
DATEN SEGMENT
Meldung db "Assembler ist gar nicht so schwer"
db "§"
DATEN ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATEN
Anfang: mov ax,DATEN
mov ds,ax
mov dx,offset Meldung
mov ah,9
int 21h
mov ah,4Ch
int 21h
CODE ENDS
END AnfangFolgende Fehlermeldung wird ausgegeben:
Assembling: asm1.asm
asm1.asm(7) : error A2004: symbol type conflict
asm1.asm(15) : warning A4023: with /coff switch, leading underscore required for start address : Anfang
Datentr„ger in Laufwerk C: ist Win
Volumeseriennummer: 1818-8DE2Kann mir jemand sagen, welchen Fehler ich mache????
Es wäre nett, wenn mir da jemand helfen könnte...
-
versuch mal
Anfang:
mov ax,DATENund nicht
Anfang: mov ax,DATENhab leider grad keinen masm da zum ausprobieren sorry.
-
Moin, Moin...
Die Zeile db "§" ändern in db '$'!!!!
Die Anweisung zum Übersetzen des Programms lautet:
ml /c DeinProgramm.asm
Hast Du eventuell mit /coff übersetzt? Das ist für DOS-Proggies nicht erlaubt.
Zum Linken benötigst Du ein 16-Bit-Linker:ftp://ftp.microsoft.com/softlib/mslfiles/lnk563.exe
Das Programm ist ein selbstentpackendes Archiv. Nach der Ausführung stehen drei Dateien im Verzeichnis:
link.exe
cvpack.exe
readme.txtDen Linker link.exe umbenennen in link16.exe und in das Verzeichnis bin kopieren.
Die OBJ-Datei linkst Du dann mit:
link16 DeinProgramm.obj;
Das Semikolon am Ende der Zeile unterdrückt den Abfragemodus des Linkers.
Der Linker gibt Dir noch eine Warnung aus:WARNING L4021: No Stack Segment
Das kannst Du ignorieren. Allerdings ist es zu empfehlen, ein eigenes Stacksegment zu definieren. Das Programm nutzt sonst den DOS-Stack.
Beispiel:
data segment txtMsg db 13, 10, 'Programm mit eigenem Stack...', 13, 10, '$' data ends stack segment stack dw 512 dup(0) stack ends code segment assume cs:code, ds:data, ss:stack start: mov ax, seg data mov ds, ax mov ah, 009h mov dx, offset txtMsg int 021h mov ax, 04c00h int 021h code ends end start
Ciao...
-
Dank an Kal El..... das mit dem: "$" habe ichübersehen...
Beim Linken bin ich zwar leider noch nicht, trotzdem danke für deine Tips dazu.
Die Link16 ist übrigens schon beim assemblerprogramm dabei.
Das Problem tritt aber auf beim Assemblieren.
Es werden die Zeilen 7 und 15 als Fehler gemeldet.
Ich versteh das nicht. Ich habe alles so abgeschrieben, wie es im buch steht...
Also was mache ich falsch???
-
Ich habe mich geirrt, der Linker, den du meinst ist nicht mit dabei....
Danke für den Link, ich habe Linker grad gezogen.
txtMsg habe ich nicht übernommen, da diese Zeile angenomen wurde...
mov ax, 04c00h -->ist auch korrekt
anstatt mov ax,seg data habe ich mov ax,ds geschrieben...
-
So, ich habe4 jetzt den turbo assembler...von borland...
Mit dem geht´s erste Sahne!!!!
kurz-->masm32 ist nicht der bringer!