NASM Compilierungsproblem



  • Hey Leute
    ICh bin ein Neuling in Assembler und möchte das Hallo Welt Programm compilieren Hier einmal der Source:

    .model small
    
    	.code
    
    	ORG 100H
    HOST:
    	mov	ah, 9			
    	mov	dx,OFFSET HI		
    	int	21H			
    
    	mov	ax, 4C00H		
    	int	21H			
    
    HI	DB	'Have a nice day!$'
    
    	END HOST
    

    Als Compiler(wenn man das bei asm sagen kann 😉 ) verwende ich nasm.

    nasm Hello.asm -f bin -o Hello.com

    Ich kopier die Hello.asm Datei also ins nasm Verzeichnis und geb die obige Zeile ins Dos Fenster ein.
    Leider wird nur der Text-Editor von Microsoft gestartet und ich bekomm keine Warnung noch Fehlermeldung. Weiß irgendwer den Fehler? 😞

    Ich freu mich schon auf eure Antworten und bedankt mich scho mal im voraus

    greetz ein verzweifelter
    pisco



  • piscosterr schrieb:

    Als Compiler(wenn man das bei asm sagen kann 😉 ) verwende ich nasm.

    He?

    Wenn du

    nasm Hello.asm -f bin -o Hello.com
    

    eingibst, startet notepad oder wie?

    Ist "nasm" überhaupt eine gesetzte Umgebungsvariable oder bist du im NASM-Verzeichnis? Daran liegt es in jedem Fall.



  • .model,.code ... das sieht doch sehr nach masm aus!



  • masm schrieb:

    .model,.code ... das sieht doch sehr nach masm aus!

    Das kommst noch dazu ... aber ich wüsste nicht, dass nasm bei MASM-Code notepad startet 😉



  • Hey
    Leute hab in den letzten Tagen etwas herumprobiert. Leider funzt es immer noch nicht.
    Hab mal einen screenshot gemacht um mein Problem zu verdeutlichen:

    http://www.bilder-space.de/thumb/25.01esnwoapGFj8FHjt.JPG

    ein vor dem Nervenzusammenbruch stehender
    pisco



  • du benutzt den falschen Assembler - entweder du nimmst MASM oder du änderst den code so ab, das nasm ihn akzeptiert.



  • Hey
    erstmal thx für die Antwort 🙂 😃

    du benutzt den falschen Assembler - entweder du nimmst MASM oder du änderst den code so ab, das nasm ihn akzeptiert.

    Ich hät dazu 2 Fragen:
    1. Wie muss ich den Code abändern? Gibts dazu irgendein Tutorial, welche Befehle bei nasm gelten?
    2.Brauch ich für masm eigentlich Visual Studio oder kann ich den auch in Code Blocks einbinden?

    greetz pisco



  • Piscosterr: Eine Moeglichkeit waere vielleicht, auf Linux umzusteigen. Da haettest Du keine Probleme mit der Auswahl der Werkzeuge usw... Was meinst Du dazu?



  • du meinst sicher gcc.. oder welche werkzeuge hätte sonst unter linux zu verfügung?(kenn mich noch nicht soooo gut mit linux aus 😃 )

    greetz



  • piscosterr schrieb:

    du meinst sicher gcc.. oder welche werkzeuge hätte sonst unter linux zu verfügung?

    Ja, gcc, binutils und gdb. Die binutils bestehen aus einer Reihe von Programmen, darunter as, der GNU Assembler...



  • abc.w schrieb:

    Piscosterr: Eine Moeglichkeit waere vielleicht, auf Linux umzusteigen. Da haettest Du keine Probleme mit der Auswahl der Werkzeuge usw... Was meinst Du dazu?

    und dann am besten gleich mit dem zeitgemäßen AT&T-Syntax anfangen 😮

    piscosterr schrieb:

    Ich hät dazu 2 Fragen:
    1. Wie muss ich den Code abändern? Gibts dazu irgendein Tutorial, welche Befehle bei nasm gelten?

    Hier kann man dir bestimmt weiter helfen.

    piscosterr schrieb:

    2.Brauch ich für masm eigentlich Visual Studio oder kann ich den auch in Code Blocks einbinden?

    Assembler und IDE sind zwei verschiedene Sachen – im diesem Fall würde ich dir von beiden abraten (im Bezug auf masm).
    IMO eine der besten IDE's für Assembler (insbesondere für masm) ist RadAsm
    masm kannst du durch das masm32-Package beziehen. Hier ist dann auch schon eine in deinem Fall benötigter 16Bit-Linker dabei.

    Nun weiß ich nicht ob es einen speziellen Grund gibt, warum du mit 16Bit Assembler für DOS anfängst, aber ich würde dir davon generell abraten. Das genannte masm32 SDK ist IMO sehr Anfängerfreundlich und erlaubt es sich leicht in die 32Bit Assemblerprogrammierung unter Windows ein zu arbeiten.

    Hier noch eine Batch (*.bat) die du zum kompilieren brauchst (Voraussetzung masm32 unter C:\ installiert):

    @echo off 
    if not exist %CD%\%~n1.asm goto nofile 
    if exist %CD%\%1.obj del %CD%\%~n1.obj 
    if exist %CD%\%1.exe del %CD%\%~n1.exe 
    
    @echo on 
    C:\masm32\bin\ml.exe %CD%\%~n1.asm 
    C:\masm32\bin\link16.exe %CD%\%~n1.obj,%CD%\%~n1.exe,,,
    @echo off 
    
    goto end 
    
    :nofile 
    echo invalid source file 
    :end 
    pause
    


  • Hey
    erstmal thx für deine Antwort
    @masm

    Nun weiß ich nicht ob es einen speziellen Grund gibt, warum du mit 16Bit Assembler für DOS anfängst, aber ich würde dir davon generell abraten. Das genannte masm32 SDK ist IMO sehr Anfängerfreundlich und erlaubt es sich leicht in die 32Bit Assemblerprogrammierung unter Windows ein zu arbeiten.

    hab mir das Buch Assembler von Reiner Beck gekauft und versuche mit diesem ASM zu lernen

    Assembler und IDE sind zwei verschiedene Sachen – im diesem Fall würde ich dir von beiden abraten (im Bezug auf masm).
    IMO eine der besten IDE's für Assembler (insbesondere für masm) ist RadAsm

    **
    Wie kann ich den masm in diese IDE einfügen, den ich kann irgendwie mein Programm nicht kompilieren?(nur html dateien *lol*)**

    Hier noch eine Batch (*.bat) die du zum kompilieren brauchst (Voraussetzung masm32 unter C:\ installiert):

    Irgendwie funzt die datei bei mir nicht obwohl alles unter C: installiert wurde.

    Hab amal einen Screenshot gemacht 😃 :

    http://www.bilder-space.de/show.php?file=27.01WWvJF0w9qaaO3kS.JPG

    freu mich scho auf deine Antwort
    greetz piscoster



  • piscoster schrieb:

    Wie kann ich den masm in diese IDE einfügen, den ich kann irgendwie mein Programm nicht kompilieren?(nur html dateien *lol*)[/b]

    HTML Dateien? Ich spare mir den Kommentar.

    Wie kannst du "MASM in die IDE einfügen" ... IDE steht für Integrated Development Environment. Eine IDE bietet dir den Komfort Text-Editor, Compiler und Linker in einem Programm zu nutzen.

    "By default" bietet das Visual Studio - meiner Ansicht nach - keine direkte Unterstützung für Assembler (MASM).
    Du kannst aber per Custom Build Rule (z.B.) für eine *.asm Datei definieren, dass sie Compiler X und Linker Y verwenden soll.

    Ansonsten kannst du aber auch per Kommandozeile, Batch oder Makefile kompilieren und linken. Wichtig ist nur, dass dein Compiler / Linker dein Text-File bekommt.



  • piscoster schrieb:

    **
    Wie kann ich den masm in diese IDE einfügen, den ich kann irgendwie mein Programm nicht kompilieren?(nur html dateien *lol*)**

    du hättest dir mal durchlesen sollen, was bei der Beschreibung des Downloads steht:

    Includes addins and custom controls
    You also need programming packs

    Den Download findet man direkt darunter -> RadASM programming pack
    Aus diesem Archiv brauchst du nur 2 Sachen: masm.ini und den Ordner 'Masm'. Diese kopierst du in das Verzeichnis in der die RadAsm.exe ist.

    Danach gehst du (in der IDE) auf Options->'Programming languages': hier musst du dann die masm.ini auswählen (und hinzufügen). Daraufhin gehst du unter Project->'Set Assembler'->masm.
    Jetzt ist RadAsm für Win32-Assembler konfiguriert.
    Leider ist bei dieser Konfiguration nicht möglich direkt 16Bit-Dos Programme zu erstellen – hab daher die masm.ini um den Projekttypen ‚Dos App (.exe) ‘ erweitert: hier kannst du sie runterladen. (du musst RadAsm nach dem Ersetzen neu starten)
    Danach kannst du ein Projekt vom Typen ‚Dos App‘ erstellen – das sollte dann theoretisch auch bei dir laufen 😉

    piscoster schrieb:

    Irgendwie funzt die datei bei mir nicht obwohl alles unter C: installiert wurde.

    du musst die Batch ja auch mit dem Dateinamen als Parameter starten. z.B.:'C:>Batch.bat MeinQuellcode.asm'.
    Mir ist aber grad aufgefallen, das da so oder so ein kleiner Fehler drin wahr:
    die Zeilen:

    C:\masm32\bin\ml.exe %CD%\%~n1.asm
    C:\masm32\bin\link16.exe %CD%\%n1.obj,%CD%\%n1.exe,,,

    müssen eigentlich

    C:\masm32\bin\ml.exe /c %CD%\%~n1.asm
    C:\masm32\bin\link16.exe %CD%\%n1.obj,%CD%\%n1.exe,,,,

    heißen.
    🙄



  • Toll, die zeitgemässen Batch-Dateien... 😉



  • abc.w schrieb:

    Toll, die zeitgemässen Batch-Dateien... 😉

    😃



  • hab alles so gemacht wie du masm sagtest und alle ordner bei radasm reinkopiert. kaum klick ich auf build kommt mir schon wieder eine Fehlermeldung(sooo knap vorm Ziel 😡 ) entgegen
    hab wieder einmal einen screenshot gemacht:

    http://www.bilder-space.de/thumb/02.02ICRiNmM8kiwk0Rt.JPG

    hoffentlich könnt ihr mir helfen den sonst dreh ich durch bei diesen ganzen Fehlermeldungen 😡 😡 😮 😕

    greetz pisco 😃



  • benutz die masm.ini die ich dir im vorherigen Beitrag verlinkt habe (nicht vergessen: RadAsm neu starten und Projekt neu anlegen)
    http://www.file-upload.net/download-2208578/masm.ini.html´



  • piscosterr schrieb:

    hoffentlich könnt ihr mir helfen den sonst dreh ich durch bei diesen ganzen Fehlermeldungen

    Wie gesagt, unter Linux hättest Du alle zusammengehörenden Werkzeuge...


Anmelden zum Antworten