Anfängerproblem



  • Hallo,
    ich habe vor kurzem mit assembler angefangen und mir auch schon einige tuts gezogen, aber ehrlich gesagt verstehe ich ABSOLUT NIX.
    Ich hab jetzt mal probiert, ein kleines programm("hello world", was sonst)
    (ab-)zu tippen, aber selbst da fliegen mir die fehlermeldungen nur so um die ohren. ich hab es jetzt mitlerweile geschafft diese meldungen auf einen fehler und eine warnung zu reduzieren, weiter komme ich allerdings nicht. Ich poste hier jetzt am besten mal den quellcode:

    ;++++hello world

    DATEN SEGMENT

    MELDUNG DB "Hallo Welt!","$"

    DATEN ENDS

    STAPEL SEGMENT BYTE STACK

    DW 128 DUP (?)

    STAPEL ENDS

    CODE SEGMENT

    ASSUME CS:CODE,DS:DATEN,ES:NOTHING,SS:STAPEL

    START:
    MOV AX,DATEN ;HIER KOMMT EIN FEHLER: "A2004:symbol type conflict" ???
    MOV DS,AX
    MOV DX,OFFSET MELDUNG

    MOV AH,9H
    INT 21H

    MOV AH,4CH
    INT 21H

    CODE ENDS

    END START ;HIER KOMMT EINE WARNUNG: warning A4023: with /coff switch, leading underscore required for start address : START

    Ehrlich gesagt bin ich ziemlich ratlos und weiß net so recht, wie ich damit loslegen soll.
    Wenn ihr mir hier meine Fehler erklären, bzw. verbessern und mir vielleicht sagen könntet, wie man als absoluter assemler-anfänger (c++ kann ich) am besten ein gutes verständnis dafür bekommt (Welche tuts sind besonders empfehlenswert???hab schon in die faq geschaut und mir einiges runtergeladen, aber das was ich habe is ziemlich merkwürdig).
    Ach ja, ich benutze so ein teil, das heisst masm32 und hat als "Programmierumgebung" den QEditor. ich weiß ja nicht, ob das die richtige lösung ist, damit anzufangen....
    wenn nicht, könntet ihr dann vielleicht noch einen link posten,
    wo ich den eurer meinung nach empfehlenswertesten assembler+linker runterladen kann?? wär echt nett.
    so, vielen dank schoma im voraus,
    gruß vom verzweifelten konstantin





  • ja,vielen dank, die warnung is jetzt weg, aber der fehler weiter oben is immer noch da, und ich glaub, das hat definitiv nichts mit _START zu tun.
    gruß
    konstantin



  • sorry, den anderen hab ich nicht gesehen. Kenn mich aber auch nicht genug mit dem MASM aus, um dir gut weiterzuhelfen. Aber vielleicht funktioniert mov ax, segment meldung



  • @ethereal:

    Dein Programm ist schon in Ordnung so wie es ist. Die Fehlermeldung in der Zeile 'mov ax, DATEN' kommt dann, wenn du mit der Option /coff assemblierst. Übersetze das Programm so wie Du es hier gepostet hast OHNE /coff (ml /c DeinProgramm.asm). Dann wird es ohne Fehlermeldungen übersetzt. Nun gibt es noch ein Problem. Soweit ich weiß, kann der Linker, der im masm32-Paket dabei ist, keine DOS-Exe erzeugen. Also solltest Du einen anderen Linker benutzen. Hier bietet sich z.B. Alink an, der bei NASM dabei ist. Der Linker(für Win32) ist unter folgendem Link zu beziehen:

    http://alink.sourceforge.net/download.html

    Entpacke nur den Linker in das bin-Verzeichnis des masm32-Paketes.

    Linke die OBJ-Datei nun mit alink -oEXE DeinProgramm.obj. Eigentlich sollte dann alles laufen.

    Nochmal die Kommandozeilen zum Übersetzen:

    ml /c DeinProgramm.asm
    alink -oEXE DeinProgramm.obj

    Noch ein Wort zum masm32-Paket. Der QEditor ermöglicht ja auch ein automatisches Assemblieren und Linken. Hierzu sind einige Batchdateien im bin-Verzeichnis hinterlegt. Allerdings sind die für Win32-Anwendungen(GUI und Console) geschrieben. DOS-Anwendungen musst Du "von Hand" übersetzen.

    Welcher Assembler soll man Dir nun empfehlen? Jeder hat so seinen Liebling. Es gibt einige freie Assembler, wie z.B. NASM, GoASM oder FASM. Dummerweise hat jeder Assembler auch eine unterschiedliche Syntax seiner Direktiven. So läßt sich z.B. ein Programm, das für MASM geschrieben ist, nicht einfach mit NASM übersetzen. Du hast jetzt Deine ersten Schritte mit MASM gemacht. So empfehle ich Dir erstmal dabei zu bleiben. Konzentriere Dich auf Tutorials, die mit MASM arbeiten. Wenn Du Dir jetzt erstmal alle möglichen Assembler saugst und ausprobierst, verlierst Du Dein eigentliches Ziel aus den Augen, nämlich Assembler zu lernen. Auch das Du mit DOS-Programmierung anfängst, ist sicher der bessere Weg. Auf Win32-Programmierung kannst Du umsteigen, wenn Du einige Erfahrungen gesammelt hast. Dann kannst Du Dich auch mal mit anderen Assemblern auseinandersetzen. Jetzt ist wichtig auszuprobieren und Erfahrung zu sammeln. Also ein Schritt nach dem anderen.

    Ich hoffe, dass ich Dir helfen konnte.

    Ciao...

    [ Dieser Beitrag wurde am 20.06.2003 um 09:27 Uhr von Kal El editiert. ]



  • Und noch ein Gedicht:

    Damit Du die Kommandozeilen nicht immer eintippen musst, hier eine Batch-Datei:

    @echo off
    
    if exist %1.obj del %1.obj
    if exist %1.exe del %1.exe
    
    \masm32\bin\ml /c %1.asm
    if errorlevel 1 goto asmerror
    
    \masm32\bin\alink -oEXE %1.obj
    if errorlevel 1 goto linkererror
    
    dir %1.*
    goto ende
    
    :linkererror
    echo _
    echo FEHLER: Linker
    goto ende
    
    :asmerror
    echo _
    echo FEHLER: Assembler
    goto ende
    
    :ende
    
    pause
    

    Speicher es in Deinem Quellcode-Verzeichnis ab(z.B als doexe.bat). Um ein DOS-Programm zu assemblieren gibts Du ein: doexe DeinProgramm
    ACHTUNG: Der Programmname wird OHNE Extension angegeben!!!

    Ciao...



  • @Kal El
    vielen, vielen dank für deinen super post.
    jetzt weiß ich nämlich überhaupt erst, wie ich an die ganze sache rangehen soll. irgendwie sind die tutorials, auch wenn sie noch so sehr für anfänger gedacht sind, immer unvollständig und setzen irgendwie voraus, dass man z.b. wissen muß, welcher syntax mit welchem assembler compiliert werden muß.
    von daher war mir das echt eine riesen-hilfe, also nochmals vielen dank für die mühen, sowas findet man selten.
    leider komm ich jetzt nicht dazu, mich in ruhe hinzusetzen und deinen ratschlägen zu folgen, aber gleich morgen wird geproggt =).
    also, falls ich dann noch fragen hab(was mit sicherheit der fall sein wird), meld ich mich dann nochmal.
    ansonsten erstmal einen schönen sonnigen freitag-nachmittag
    gruß
    konstantin



  • Moin, Moin...

    Ich habe noch etwas geforscht und einen anderen Linker gefunden. Microsoft bietet seinen alten 16-Bit-Linker zum download an:

    ftp://ftp.microsoft.com/softlib/mslfiles/lnk563.exe

    Es handelt sich bei obiger Datei um ein selbstentpackendes Archiv. Die Datei Link.exe umbenennen in link16.exe und ins masm32-Verzeichnis bin kopieren.

    Ciao...


Anmelden zum Antworten