MASM32



  • Hallo. Ich habe mir das Buch von Reiner Backer gekauft um einen Einblick in die Assemblerprogrammierung zu ermöglichen. Ich habe vom Programmieren keine Ahnung und kann deshalb auf kein Grundwissen einer anderen Programmiersprache zurückgreifen.
    Also, folgendes Problem...
    Ich habe ein Programm aus dem Buch abgeschrieben und möchte es jetzt assemblieren.

    Das Übungsprogramm:
    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

    Folgende Fehlermeldung wird ausgegeben:

    Assembling: asm1.asm
    asm1.asm(7) : error A2004: symbol type conflict
    asm1.asm(15) : warning A4023: with /coff switch, leading underscore required for start address : Anfang
    Datentr„ger in Laufwerk C: ist Win
    Volumeseriennummer: 1818-8DE2

    Kann mir jemand sagen, welchen Fehler ich mache????
    Es wäre nett, wenn mir da jemand helfen könnte...



  • versuch mal

    Anfang:
    mov ax,DATEN

    und nicht
    Anfang: mov ax,DATEN

    hab leider grad keinen masm da zum ausprobieren sorry.



  • Moin, Moin...

    Die Zeile db "§" ändern in db '$'!!!!

    Die Anweisung zum Übersetzen des Programms lautet:

    ml /c DeinProgramm.asm

    Hast Du eventuell mit /coff übersetzt? Das ist für DOS-Proggies nicht erlaubt.
    Zum Linken benötigst Du ein 16-Bit-Linker:

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

    Das Programm ist ein selbstentpackendes Archiv. Nach der Ausführung stehen drei Dateien im Verzeichnis:

    link.exe
    cvpack.exe
    readme.txt

    Den Linker link.exe umbenennen in link16.exe und in das Verzeichnis bin kopieren.

    Die OBJ-Datei linkst Du dann mit:

    link16 DeinProgramm.obj;

    Das Semikolon am Ende der Zeile unterdrückt den Abfragemodus des Linkers.
    Der Linker gibt Dir noch eine Warnung aus:

    WARNING L4021: No Stack Segment

    Das kannst Du ignorieren. Allerdings ist es zu empfehlen, ein eigenes Stacksegment zu definieren. Das Programm nutzt sonst den DOS-Stack.

    Beispiel:

    data segment
    
    txtMsg  db 13, 10, 'Programm mit eigenem Stack...', 13, 10, '$'
    
    data ends
    
    stack segment stack
    
            dw 512 dup(0)
    
    stack ends
    
    code segment
    
    assume cs:code, ds:data, ss:stack
    
    start:  mov     ax, seg data
            mov     ds, ax
    
            mov     ah, 009h
            mov     dx, offset txtMsg
            int     021h
    
            mov     ax, 04c00h
            int     021h
    
    code ends
    
    end start
    

    Ciao...



  • Dank an Kal El..... das mit dem: "$" habe ichübersehen...
    Beim Linken bin ich zwar leider noch nicht, trotzdem danke für deine Tips dazu.
    Die Link16 ist übrigens schon beim assemblerprogramm dabei.
    Das Problem tritt aber auf beim Assemblieren.
    Es werden die Zeilen 7 und 15 als Fehler gemeldet.
    Ich versteh das nicht. Ich habe alles so abgeschrieben, wie es im buch steht...
    Also was mache ich falsch???



  • Ich habe mich geirrt, der Linker, den du meinst ist nicht mit dabei....
    Danke für den Link, ich habe Linker grad gezogen.
    txtMsg habe ich nicht übernommen, da diese Zeile angenomen wurde...
    mov ax, 04c00h -->ist auch korrekt
    anstatt mov ax,seg data habe ich mov ax,ds geschrieben...



  • So, ich habe4 jetzt den turbo assembler...von borland...
    Mit dem geht´s erste Sahne!!!!
    kurz-->masm32 ist nicht der bringer!


Anmelden zum Antworten