Hilfe: Einfacher Einstieg in MASM



  • N'Abend zusammen,
    ich probiere mir gerade Assembler anzueignen und habe mir zuerst einige Tut's und das Packet masm32v8.zip besorgt. MASM habe ich gewählt, weil es kostenlos ist und von der Syntax TASM ähnlich sein soll. Vom Verständnis her habe ich wenig Probleme mit den Begriffen aber in der Praxis hapert's. Die Beispiele aus den Tut's lassen sich mit MASM nicht kompilieren. Ich habe mal angefangen mir ein kleines Beispielprogramm zu schreiben was (noch) nichts macht. Wärt ihr vielleicht so nett mir das ein wenig zu ergänzen, damit ich wenigstens "Hello World" in die Konsole ausgeben kann. ich verwende eine emulierte Konsole (Windows XP).

    Meine ersten Schritte 😉 :

    CODE SEGMENT              ; Begin des Code Segments
    ASSUME CS:CODE            ; Zuweisung der Segmente, hier nur das Code Segement
    _START:                   ; Start-Label
    
    ; Was muss hier rein um nen db-String auszugeben?
    ; szText db "Hello World!",0
    
    CODE ENDS                 ; Ende des CODE-Segments
    END _START                ; Ende des Start-Labels
    

    thx,

    Murray
    🙂



  • also für tasm würde daS glaub ich so aussehen:

    .model small
    .stack
    .code   
    START:
    jmp Begin
    MyMessage db "Hello World!$" 
    
    BEGIN
    
    mov dx,OFFSET MyMessage
    mov ax,SEG MyMessage
    mov ds,ax
    mov ah,9
    int 21h
    
    mov ah,4ch
    int 21h
    
    end START
    

    ich hab allerdings keinen plan ob das bei masm auch so funzt!!



  • Also MASM kennt SEG nicht...

    TEST_2.asm(11) : error A2004: symbol type conflict
    

    Was soll ich nun machen?



  • @Murray:

    Die Direktive SEG kann man nur verwenden, wenn man die umständliche Methode der Definition eines Segments nutzt. Mit der vereinfachten Methode mittels .model, .code, .data lautet die Anweisung:

    mov  dx, @code
    

    Das obige Beispielprogramm ist allerdings nicht so ganz korrekt. Besser:

    .model small
    
    .stack
    
    .data
    
    MyMessage db 'Hello World!', 13, 10, '$'
    
    .code   
    
    .startup
    
             mov dx,OFFSET MyMessage
             mov ah,9
             int 21h
    
    .exit 0
    
    end
    

    Ciao...



  • Mache ich irgendwas falsch? Ich kann die Version von Kal El auch nicht kompilieren.

    C:\masm32\PROG\TEST_2.asm(11) : error A2006: undefined symbol : DGROUP



  • @Murray:

    Die Anweisung zum Übersetzen lautet: ml /c DasProgramm.asm

    Dabei gibt es bei mir keine Probleme!!

    Da es sich um ein DOS-Programm handelt, musst Du den 16-Bit-Linker von Microsoft verwenden:

    [uml]ftp://ftp.microsoft.com/softlib/mslfiles/lnk563.exe[/uml]

    Den Linker solltest Du umbenennen in z.B. link16.exe und dann ins bin-Verzeichnis kopieren.

    Dann linkst Du die OBJ-Datei mit link16 DasProgramm.obj;

    Das Semikolon am Ende der Zeile verhindert die Abfrageprozedur des Linkers.

    Nochmals die Anweisungen zum Übersetzen:

    ml /c DasProgramm.asm
    link16 DasProgramm.obj;
    

    So funktioniert es bei mir 100%-ig.

    Ciao...


Anmelden zum Antworten