System erkennt Assembler nicht
-
Hallo,
ich habe heute angefangen Assembler zu lernen. Doch leider bin ich schon beim kompilieren des folgenden Programmes hängen geblieben: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
Mein Problem:
Ich habe Windows XP Home Edition und Linux Ubuntu 7.04 Feisty Fawn auf dem PC. Eigentlich wollte ich Assembler ja unter Linux programmieren lernen und habe mir das Paket "nasm" herunterladen und installiert.
Nun wollte ich mitnasm -f elf ams1.asm
mein Programm assemblieren, doch der Terminal gab relativ viele Fehler an. Nun gut, der Code ist ja auch für Windows gedacht, also wollte ich es mit Windows probieren.
Zuerst mit dem MASM.
Ich habe mir MASM installiert und meine asm1.asm im Ordner Assembler auf dem Desktop gespeichert. Also wechsel ich in den Ornder und will mitMASM ams1.ams
(So steht es in meinem Buch)
das Programm assemblieren. Doch die Konsole sagt mir, dass der Befehl "MASM" entweder falsch geschrieben oder unbekannt ist.Woran kann das liegen? Ich habe den MASM Assembler doch installiert?
Das selbe sagt er mir übrigens auch mit dem NASM Assembler, mit dem ich es auch probiert habe.Kann mir jemand helfen?
Vielen Dank!
GrußP.S. Ist es schlecht, dass mein Prozessor ein AMD 64 Modell ist?
-
Oh, wie ich sehe habe ich im Code einen Tippfehler. Aber es ändert nichts daran, dass meine Assembler nicht funktionieren.
-
Dass Windows "masm" nicht kennt liegt wohl daran dass "masm" nicht im Path ist. Fuege das Verzeichnis, in dem masm.exe liegt, einfach dem Path hinzu (Rechtsklick auf Arbeitsplatz->Eigenschaften->Erweitert->Umgebungsvariablen und dann bei "PATH" ganz am Ende das VErzeichnis einfuegen). Danach sollte das kompilieren klappen.
Um dir zu sagen, wieso es mit dem nasm nicht geklappt hat waeren die Fehlermeldungen sehr hilfreich. Ich kenn weder masm noch nasm, allerdings ists moeglich dass die beiden einfach nicht die gleiche Syntax haben (sprich, du die Befehle im nasm anders schreiben musst).
Dass du einen Athlon64 hast, spielt bei den Befehlen keine Rolle. Der Athlon64 kennt alle Befehle, die im normalen x86-Assembler vorkommen (den du gerade lernst) und noch ein paar andere mehr
-
Erstmal danke für deine Antwort, allerdings befindet sich im ganzen masm32 Ordner keine Datei, die masm.exe heißt.
Weiss vielleicht jemand, wie die nötige Datei heißt?
-
AFAIR heisst die Datei da ml.exe, jedoch zickt das Ding beim Versuch 16Bit-Code zu verarbeiten gern mal rum. Kenne mich mit dem MASM aber auch nicht weiter aus.
Was nasm betrifft, hat Blue-Tiger schon richtig vermutet: Hat 1. eine andere Syntax und 2. ist dieser DOS-Code in Linux nicht lauffaehig (zumindest nicht ohne DOS-Emulator).
-
ich glaube du brauchst den 16 bit linker.
kuckst du hier:http://board.codingcrew.de/viewtopic.php?t=218
-
Ja das ist ein DOS Programm und braucht einen 16bit-Linker (ist bei Büchern in dem Fall aber i.d.R. dabei). Ich muss jeweils ml datei.asm eingeben und dann wird assembliert und eine .exe gelinkt. Geht meist auch unter XP, bei so einfachen Dingen sowieso
-
Hallo,
ich habe jetzt soweit alle Dinge gemacht, die Ihr mir geschrieben habt, doch leider erkennt Windows MASM immer noch nicht.
Ich sag euch mal, was und wie ich die Änderungen gemacht habe.1. Wegen dem 16 Bit Linker habe ich alles genauso gemacht, wie im Thread, also Link.exe umbenannt und die Batchdatei erstellt.
2. Ich habe folgendes in die Pathvariable geschrieben:
%SystemRoot%\masm32\bin;
Jetzt zeige ich euch am besten mal, wie ich den Code assemblieren will und was er mir für Fehler ausgibt.
Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. C:\Dokumente und Einstellungen\Manu>cd C:\Dokumente und Einstellungen\Manu\Deskt op\Assembler C:\Dokumente und Einstellungen\Manu\Desktop\Assembler>masm asm1.asm Der Befehl "masm" ist entweder falsch geschrieben oder konnte nicht gefunden werden. C:\Dokumente und Einstellungen\Manu\Desktop\Assembler>ml asm1.asm Der Befehl "ml" ist entweder falsch geschrieben oder konnte nicht gefunden werden. C:\Dokumente und Einstellungen\Manu\Desktop\Assembler>ml asm1.asm Der Befehl "ml" ist entweder falsch geschrieben oder konnte nicht gefunden werden. C:\Dokumente und Einstellungen\Manu\Desktop\Assembler>masm asm1.asm Der Befehl "masm" ist entweder falsch geschrieben oder konnte nicht gefunden werden. C:\Dokumente und Einstellungen\Manu\Desktop\Assembler>make16 asm1.asm Der Befehl "make16" ist entweder falsch geschrieben oder konnte nicht gefunden werden. C:\Dokumente und Einstellungen\Manu\Desktop\Assembler>masm asm1.asm Der Befehl "masm" ist entweder falsch geschrieben oder konnte nicht gefunden werden. C:\Dokumente und Einstellungen\Manu\Desktop\Assembler>ml asm1.asm Der Befehl "ml" ist entweder falsch geschrieben oder konnte nicht gefunden werden. C:\Dokumente und Einstellungen\Manu\Desktop\Assembler>
Ich weiss echt nicht mehr weiter.:(
-
So langsam glaube ich nicht mehr dran, dass der MASM Compiler je funktionieren wird. Daher habe ich mir jetzt den FASM installiert. Dieser funktioniert auch, doch wieder gibt es Probleme mit dem Code. Bei beiden Versionen (DOS und Win32) sagt der mir, dass das "DATEN SEGMENT" illegal ist.
Wie muss es denn heißen, dass es funktioniert?
-
Um weiteren wirren Probierereien vorzubeugen: Der einzige Assembler, der AFAIK ausser MASM die MASM-Syntax unterstuetzt ist TASM und den gibt's nicht kostenlos.
FASM kann den Code AFAIK gar nicht verarbeiten.Und durch planloses Eintippen irgendwelcher Befehle in die Shell wirst du MASM so auch nicht zum Laufen kriegen.
Liegt denn ml.exe oder masm.exe, whatever tatsaechlich bei "%SystemRoot%\masm32\bin"?
Als Alternativ-Assembler wuerde ich uebrigens, wenn ueberhaupt, fuer DOS-Code NASM empfehlen.
-
DIe Datei heißt zwar dort ml.exe liegt aber im /bin Verzeichnis, ja.
Edit: Hoppla, jetzt hab ich mit meinem Account geschrieben.
-
Ich habe es jetzt doch hinbekommen.
Vielen Dank für eure Hilfe!