MASM32-Einsteiger need Help

Offizieller deutscher Support für das MASM32 SDK. Download FAQ

Moderatoren: crack, Krüsty, Marwin

MASM32-Einsteiger need Help

Beitragvon lowbird » Freitag 17. Oktober 2008, 16:31

Hallo, ich bin grad dabei mich mit Assembler vertraut zu machen und bin langsam am verzweifeln.

Ich hab mir das MASM32 Package gezogen und unter C:\Masm32 installiert und mein erstes programm in dem ordner erstellt, welches
ich aus dem Buch von Reiner Backer abgeschrieben habe.
Ich hab das programm unter asm1.asm gespeichert aber bekomm es einfach net hin es zu assemblieren.
Hab mir auch schon alle möglichen Beiträge hier angeguckt und LINK16.EXE Datei in das Verzeichnis C:\masm32\bin kopiert aber funktioniert iwie immer noch net.
Wenn ich die Datei mit dem qeditor assemblieren will bekomm ich diese Meldung

Assembling: C:\masm32\bin\asm2.asm
C:\masm32\bin\asm2.asm(13) : error A2004: symbol type conflict
C:\masm32\bin\asm2.asm(28) : warning A4023: with /coff switch, leading underscore required for start address : Anfang
Volume in Laufwerk C: hat keine Bezeichnung.
Volumeseriennummer: 5C1B-E7C5

Verzeichnis von C:\masm32\bin

17.10.2008 16:00 268 asm2.asm
1 Datei(en) 268 Bytes
0 Verzeichnis(se), 56.639.619.072 Bytes frei

Der programmcode ist:



Code: Alles auswählen
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 Anfang


wobei die Fehlermeldung: Volume in Laufwerk C: hat keine Bezeichnung.
Volumeseriennummer: 5C1B-E7C5


bei jedem Beispiel Programm kommt welches ich assemblieren möchte.

Kann mir jemand helfen ?

Am liebsten wäre mir ne ausführliche anleitung vom entpacken des Masm32 packetes und allen zwischenschritten bzw änderungen welche ich machen muss bis ich mit dem programm schreiben beginnen kann. Danke

Mfg
lowbird
Newbie
 
Beiträge: 6
Registriert: Freitag 17. Oktober 2008, 16:12

Re: MASM32-Einsteiger need Help

Beitragvon crack » Freitag 17. Oktober 2008, 19:33

lowbird hat geschrieben:Hallo, ich bin grad dabei mich mit Assembler vertraut zu machen und bin langsam am verzweifeln.

....

Assembling: C:\masm32\bin\asm2.asm
C:\masm32\bin\asm2.asm(13) : error A2004: symbol type conflict


Ja ich denke das 'mov ax,DATEN' die (nichtexistente) Variable Daten läd, damit der Segmentanfang des Datensegments geladen wird lautet die korrekte Semantik: 'mov ax,@DATEN' oder bei Eric Isaacsons A86: 'mov ax, seg DATEN'.


C:\masm32\bin\asm2.asm(28) : warning A4023: with /coff switch, leading underscore required for start address : Anfang
Volume in Laufwerk C: hat keine Bezeichnung.
Volumeseriennummer: 5C1B-E7C5

Verzeichnis von C:\masm32\bin

17.10.2008 16:00 268 asm2.asm
1 Datei(en) 268 Bytes
0 Verzeichnis(se), 56.639.619.072 Bytes frei

Der programmcode ist:



Code: Alles auswählen
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 Anfang


wobei die Fehlermeldung: Volume in Laufwerk C: hat keine Bezeichnung.
Volumeseriennummer: 5C1B-E7C5


bei jedem Beispiel Programm kommt welches ich assemblieren möchte.

Kann mir jemand helfen ?

Am liebsten wäre mir ne ausführliche anleitung vom entpacken des Masm32 packetes und allen zwischenschritten bzw änderungen welche ich machen muss bis ich mit dem programm schreiben beginnen kann. Danke

Mfg


Du sollst vor das Label 'Anfang' einen Unterstrich machen:'_Anfang', weil der Linker nicht zwischen Groß und Kleinschreibung unterscheidet.

die 'Fehlermeldung': Volume in Laufwerk C: hat keine Bezeichnung.
Volumeseriennummer: 5C1B-E7C5
ist keine Fehlermeldung, sondern eine Statusmeldung :wink:
mit freundlichen grüssen,
with best regards,

crack
Benutzeravatar
crack
Administrator
 
Beiträge: 280
Registriert: Dienstag 21. Dezember 2004, 15:02
Wohnort: 53783 Eitorf

Re: MASM32-Einsteiger need Help

Beitragvon lowbird » Freitag 17. Oktober 2008, 20:34

Danke für die schnelle Antwort, hmm hab jetzt alles ausprobiert mit unterstrich und "mov ax,@DATEN" bzw "mov ax,seg DATEN" dann bringt er mir solche Fehlermeldungen

Assembling: E:\asm\asm1.asm
E:\asm\asm1.asm(33) : error A2008: syntax error : END_Anfang
E:\asm\asm1.asm(35) : error A2088: END directive required at end of file
E:\asm\asm1.asm(17) : error A2006: undefined symbol : @DATEN
Volume in Laufwerk E: hat keine Bezeichnung.
Volumeseriennummer: 90E6-91EC

Verzeichnis von E:\asm

17.10.2008 20:32 487 asm1.asm
1 Datei(en) 487 Bytes
0 Verzeichnis(se), 19.241.984.000 Bytes frei

Code: Alles auswählen
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_Anfang


Hab das Package jetzt schon auf 2 verschiedenen Rechner installiert, beide Windows XP und funktioniert bei keinem.... :|
lowbird
Newbie
 
Beiträge: 6
Registriert: Freitag 17. Oktober 2008, 16:12

Re: MASM32-Einsteiger need Help

Beitragvon crack » Freitag 17. Oktober 2008, 20:52

Axo, das 'END_Anfang' ist 'depricadet' also nur bei Abwärtskompatibilität mit älteren Assembly Language Compilern zu gewährleisten, und zwar stammt es aus einer Zeit in der der Quelltext und das Ablauffähige Programm noch auf Bändern gespeichert wurde, das 'END_Anfang' diente damals dazu am Ende des Quelltextes das Bandlaufwerk abzuschalten. Also lass es einfach weg, bzw. Schreibe einfach 'END' da ja nur ein Quelltext bzw. ein einziges Programm compiliert wird.

Das mit der Korrekten Syntax zum Laden des DS Registers schaue ich jetzt gleich nochmal nach, es gibt darüber aber auch was in der MASM Hilfe :wink:
mit freundlichen grüssen,
with best regards,

crack
Benutzeravatar
crack
Administrator
 
Beiträge: 280
Registriert: Dienstag 21. Dezember 2004, 15:02
Wohnort: 53783 Eitorf

Re: MASM32-Einsteiger need Help

Beitragvon lowbird » Freitag 17. Oktober 2008, 21:58

Also ich habe meine Code jetzt nochmal geändert und für das "DATEN" einfach mal so "bx" eingesetzt, dann kann ich die datei mit hilfe der MAKE16.BAT datei assemblieren aber muss LINK16 in dem Makro einfach durch LINK ersetzen damit die Datei zu ner .exe gelinkt wird.

Code: Alles auswählen
DATEN          SEGMENT

Meldung        db "Assembler ist gar nicht so schwer."
       
               db "$"




DATEN          ENDS

CODE           SEGMENT

               ASSUME CS:CODE,DS:DATEN


Anfang:        mov ax,bx
               mov ds,ax

               mov dx,offset Meldung

               mov ah,9

               int 21h
               
               mov ah,4Ch


               int 21h

CODE           ENDS

               END


Das Prob is jetzt nur das ich das Programm nicht starten kann bzw es keine sinn macht und da ich noch net ma weiß wie Assembler überhaupt funktioniert weiß ich nun auch nicht was er jetzt für das "bx" anstatt dem "DATEN" macht und ich net weiß wie ich das programm ändern kann damit es funktioniert...

MAKE16.Bat Datei

@ECHO OFF

ECHO Assembling ...
\masm32\bin\ml /c /AT %1.asm

ECHO Linking ...
\masm32\bin\link /TINY %1.obj, %1.com;

DIR %1.*

PAUSE


Wenn wer noch nen tip hat wäre ich seh dankbar.

Mfg
lowbird
Newbie
 
Beiträge: 6
Registriert: Freitag 17. Oktober 2008, 16:12

Re: MASM32-Einsteiger need Help

Beitragvon crack » Freitag 17. Oktober 2008, 22:34

Ah, nein die Anweisung 'mov ax,seg xxxx' will nicht die symbolische Segmentaddresse also nicht 'mov ax, seg DATEN' sondern ein Label das innerhalb des Segments liegt, also 'mov ax, seg Meldung' :!:
mit freundlichen grüssen,
with best regards,

crack
Benutzeravatar
crack
Administrator
 
Beiträge: 280
Registriert: Dienstag 21. Dezember 2004, 15:02
Wohnort: 53783 Eitorf

Re: MASM32-Einsteiger need Help

Beitragvon lowbird » Samstag 18. Oktober 2008, 11:21

Also mein Code siehts nun so aus:

Code: Alles auswählen
DATEN          SEGMENT

Meldung        db "Assembler ist gar nicht so schwer."
               db "$"

DATEN          ENDS

CODE           SEGMENT

ASSUME         CS:CODE,DS:DATEN

Anfang:        mov ax,SEG DATEN
               mov ds,ax

mov            dx,offset Meldung

mov            ah,9

               int 21h

mov            ah,4Ch

               int 21h

CODE ENDS

END


wenn ich ihn über qeditor assemblieren will bringt er mir die Meldung:

Assembling: C:\masm32\bin\asm2.asm
C:\masm32\bin\asm2.asm(13) : error A2004: symbol type conflict


und wenn ich ihne über die Dos-Eingabeaufforderung mit der MAKE16.EXE datei assemblieren will bringt er die Meldung:

asm1.asm <13> :error A2118: cannot have segment address references with TINY model

Muss ich das TINY evtl durh was anderes in der MAKE16.EXE Datei ersetzen ?

@ECHO OFF

ECHO Assembling ...
\masm32\bin\ml /c /AT %1.asm

ECHO Linking ...
\masm32\bin\link16 /TINY %1.obj, %1.com;

DIR %1.*

PAUSE


Mfg
lowbird
Newbie
 
Beiträge: 6
Registriert: Freitag 17. Oktober 2008, 16:12

Re: MASM32-Einsteiger need Help

Beitragvon lowbird » Samstag 18. Oktober 2008, 12:00

So jetzt hab ich es doch mal nach 3 tagen geschafft die Datei zu assemblieren und zu übersetzen,
hab den Code nochmal wie in dem Beispiel aus dem Buch 1:1 übernommen:

Code: Alles auswählen
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 Anfang


Hab immer versucht den Code mit C:\masm32\bin>ml asm1 zu übersetzen wie es in dem buch ja eigendlich auch mit dem Befehl in der Komandozeile "masm asm1" beschrieben ist.
Musste aber noch die endung .asm hinzufügen damit er mir die Datei assembliert, also C:\masm32\bin>ml asm1.asm
und dann mit "LINK16 asm1" linken und ich kann die das Programm starten, assemblieren und linken über den QEDITOR funktionier aber trozdem nicht.

Jemand ne idee woran das liegt und warum er nur assembliert wenn ich die endung .asm anhänge ?
ansonsten trozdem schon mal danke für eure hilfe.

Mfg
lowbird
Newbie
 
Beiträge: 6
Registriert: Freitag 17. Oktober 2008, 16:12

Re: MASM32-Einsteiger need Help

Beitragvon crack » Samstag 18. Oktober 2008, 13:31

Ach das hat einen relativ einleuchtenden Grund:

nehmen wir an dein Quelltext heist 'banane.asm' und Du bindestein: 'banane.inc' schon hier muss der Assembler wissen welcher Quelltext zum Hauptprogramm gehört, aber auf jeden Fall tritt das Problem nach dem Assemblieren auf, denn dann gibt es schon:

  • banane.asm
  • (banane.inc)
  • banane.obj
  • banane.sym

nach dem Linken sind es dann:

  • banane.asm
  • (banane.inc)
  • banane.obj
  • banane.sym
  • banane.exe
  • banane.lst

Aber alle Dateien heissen 'banane', und spätestens jetzt müsstest Du zum Neuassemblieren angeben welche Datei der Assembler benutzen soll, denn: der Struktur nach sind sowohl name.asm, name.inc und name.lst ganz normale Textdateien :wink:
mit freundlichen grüssen,
with best regards,

crack
Benutzeravatar
crack
Administrator
 
Beiträge: 280
Registriert: Dienstag 21. Dezember 2004, 15:02
Wohnort: 53783 Eitorf


Zurück zu MASM32-Package

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder

cron