Assembler-Software



  • Hallo,

    ich bin gerade dabei mich in die Assembler-Programmierung (unter DOS / Windows) einzulesen. Jetzt möchte ich gerne die ersten Beispielprogramme aus meinem Lehrbuch in die Praxis umsetzen. Doch mir fehlt bisher noch die Assembler-Software.

    Ich benutze folgendes System / Hardware:
    Betriebssystem: Windows XP
    Prozessor: Intel Core2 CPU T5500 1.66GHz

    Könnt ihr mir sagen, wo ich da eine Assembler-Entwicklungsumgebung herbekomme ?

    Ich habe gerade nach dem Microsoft Macro Assembler gesucht. Leider habe ich jedoch keine Version gefunden die auch unter Visual Studio 2008 läuft.

    Andere Assembler wie z.B. MASM32, ... machen auf mich einen eher billigen Eindruck.

    Ich hoffe ihr könnt mir weiterhelfen.

    Vielen Dank,
    mfg arenas



  • Äääm Microsoft Macro Assembler gesucht IST MASM 😃

    Letztendlich kannst du jeden Assembler unter Visual Studio um laufen bringen. Die meisten Assembler die ich kenne laufen über Kommandozeile, also kann man sie einfach als "Makefile-Projekt" in VS einbinden. Also Makefile ist etwas irreführend weil es auch ohne Makefiles geht.

    Ob debugging dann auch mit VS geht weiß ich nicht, aber du kannst dir einfach nen externen Debugger wie zb OllyDbg hernehmen, den finde ich eh um einiges besser.

    Allerdings bringt die VS dann auch nicht mehr als z.B. Notepad++.
    Natürlich könntest du auch den Inline-Assembler nehmen, der läuft perfekt unter Visual Studio 2008, würde ich aber nicht empfehlen. 😃



  • Danke für deine Antwort. Ich habe mir jetzt MASM32 heruntergeladen.

    Habe gerade folgenden Code eingetippt:

    .MODEL Small
    .STACK 100h
    .DATA
    Meldung DB "Hello$"
    .CODE
    start:
    mov ax, @data
    mov ds, ax
    mov dx, offset Meldung
    mov ah, 09h
    int 21h
    mov ah, 4Ch
    int 21h
    end start
    

    Bei der Programmerstellung bekomme ich jedoch immer folgende Fehlermeldung:

    test.asm(7) : error A2006: undefined symbol : DGROUP

    Könnt ihr mir sagen woran das liegt ?

    Vielen Dank,
    mfg arenas



  • Ich habe gerade auf http://www.codingcrew.de/masm32/masm32_faq.php#27122003 folgende FAQ gelesen:

    Wie kann ich DOS-Programme mit dem MASM aus dem MASM32-Paket erstellen?
    Das Problem ist nicht das Assemblieren sondern das Linken. Dazu benötigst du eine andere Version des Linkers LINK.EXE. Nach dem Entpacken dieses Archivs benennt man die enthaltene Datei LINK.EXE um in z.B. LINK16.EXE und kopiert diese in das Verzeichnis x:\MASM32\BIN\.

    Das habe ich jetzt auch gemacht, aber es funktioniert leider immer noch nicht.

    Klicke ich im QEditor auf Project->Console Assemble & Link, dann bekomme ich immer folgende Fehlermeldung:

    Microsoft (R) Macro Assembler Version 6.14.8444
    Copyright (C) Microsoft Corp 1981-1997. All rights reserved.

    Assembling: C:\test.asm
    C:\test.asm(7) : error A2006: undefined symbol : DGROUP
    C:\test.asm(14) : warning A4023: with /coff switch, leading underscore required for start address : start
    _
    Assembly Error
    Drücken Sie eine beliebige Taste . . .

    Was mache ich falsch ??? Ich komme einfach nicht weiter.

    Vielen Dank,
    mfg arenas



  • warning A4023: with /coff switch, leading underscore required for start address : start

    versuch mal "_start:" statt "start:"

    error A2006: undefined symbol : DGROUP

    AFAIK liegt es daran dass du nicht für 16Bit Executables linkst. Da ich aber weder MASM noch 16Bit Programme verwende kenn ich mich da nicht wirklich aus..

    Versuch mal direkt zu assemblieren "ml.exe test.asm /c" (d.h. ohne linken) und dann mit der link16.exe aus dem SDK zu linken: "link16.exe test.obj,test.exe,,,,"



  • arenas schrieb:

    Klicke ich im QEditor auf Project->Console Assemble & Link, dann bekomme ich immer folgende Fehlermeldung:

    Microsoft (R) Macro Assembler Version 6.14.8444
    Copyright (C) Microsoft Corp 1981-1997. All rights reserved.

    Assembling: C:\test.asm
    C:\test.asm(7) : error A2006: undefined symbol : DGROUP
    C:\test.asm(14) : warning A4023: with /coff switch, leading underscore required for start address : start
    _
    Assembly Error
    Drücken Sie eine beliebige Taste . . .

    Was mache ich falsch ??? Ich komme einfach nicht weiter.

    Qeditor benutzt immer noch den anderen Linker. Du könntest nun alle entsprechenden Batch-Dateien (z.B. buildc.bat und buildcall.bat) so verändern, dass 1) keine COFF-Datei hergestellt wird und 2) Link16 mit den richtigen Parametern aufgerufen wird oder:

    Du klickst in QEditor auf 'File-Cmd Prompt' und gibst dort ein:

    C:\masm32\bin\ml.exe /Bl"C:\masm32\bin\link16.exe" test.asm

    viele grüße
    ralph



  • @rkhb:
    Danke für deine Antwort, jetzt funktioniert es endlich. Du hast mir damit sehr geholfen.

    Eine Frage habe ich aber noch. Wenn ich nach der Programmerstellung die EXE-Datei starte, dann schließt sie sich gleich wieder. Kann man das irgendwie verhindern ? Durch wait oder so ?

    Vielen Dank,
    mfg arenas



  • Du kannst die Anwendung in der bereits offenen Konsole ausführen statt sie direkt zu starten.



  • Du kannst die Anwendung in der bereits offenen Konsole ausführen statt sie direkt zu starten.

    Das geht auch, jetzt sehe ich auch die Textausgabe.

    Vielen Dank nochmal für eure Hilfe.



  • arenas schrieb:

    Eine Frage habe ich aber noch. Wenn ich nach der Programmerstellung die EXE-Datei starte, dann schließt sie sich gleich wieder. Kann man das irgendwie verhindern ? Durch wait oder so ?

    Es gibt solche Tricks, aber die sollte man sich gar nicht erst angewöhnen. Die Datei bleibt dann nämlich offen und gesperrt. Wenn man vergisst, das Fenster zu schließen, geht der nächste Assemblierungslauf in die Hose und wenn man nicht höllisch aufpasst, ruft man dann die veraltete EXE auf.

    Folgender (missbilligter, s.o.) Trick funktioniert nur bei DOS-Programmen: Füge vor den Block 'mov ah,4Ch - int 21h' (Programm beenden) ein:

    mov ah, 08h
    int 21h
    

    Du kannst auch einen neuen Menü-Punkt in QEDitor einfügen:

    1. Erstelle eine Textdatei - nennen wir sie mal 'nalos.bat' - und schreibe folgende 5 Zeilen hinein:
    @ECHO OFF
    %1
    echo.
    echo.
    pause
    
    1. Diese Datei kommt in das Verzeichnis, wo sich QEditor befindet. Dann editierst Du die Datei 'menus.ini'. Füge hinter die Zeile* &Run Program,"{b}.exe" eine neue Zeile ein: Run und Pause,\MASM32\nalos.bat "{b}.exe" *

    2. QEditor beenden, neu starten et voilá.

    Am besten aber bleibst Du im "Prompt" (nennt sich auch Konsole, Eingabeaufforderung, Cmd-Shell etc.) und gibst 'test.exe' (darf auch abgekürzt werden: 'test') ein. Mit Pfeil-hoch und Pfeil-runter kannst Du die letzten Befehle zurückholen. So geht assemblieren und ausführen blitzschnell. Du hast dann eben zwei Fenster offen: Die Konsole zum Assemblieren und Ausführen und QEditor zum Editieren.

    viele grüße
    ralph


Anmelden zum Antworten