MASM32 + TLK 16Bit + Wirre Textausgabe



  • Nabend,

    ich fange zur Zeit mit MASM unter DOS an, dazu habe ich den TLK 16 Bit.
    Wenn ich jetzt in der Dos-Eingabebeauforderung folgendes eingebe:

    ml test.asm

    Wird test.com zwar ausgeführt (Es gibt nur den Text Hallo Welt aus),
    dazu aber noch zich Zeichen aus dem Ascii-Code.

    Õ♥K☺Õ♥V☺Õ♥Õ♥☺☺☺ ☻
    

    <- sowas

    Hier der Quellcode:

    .model tiny
    .code
    Hallo db "Hallo Welt",10,13
    
    org 100h
    
    Start:
    
    lea dx, Hallo
    mov ah, 09
    int 21h
    .exit
    end Start
    

    Nebenbei gefragt, wo kommt eigentlich dieses .exit her? Ich habe das aus meinem Buch, ist das von MASM vordefiniert?



  • du hast das ""- zeichen am ende deines strings vergessen. die funktion 09h des ints 21h erwartet das, sonst weiss sie nicht wann dein string zu ende ist und gibt alle zeichen im speicher aus bis zufällig mal ein "" kommt.



  • dieses .exit scheint auch tasm zu kennen. es wird mit

    mov ah,4ch
    int 21h
    

    ersetzt.



  • Moin, Moin...

    Wie wasily schon angemerkt hatte, wird .exit durch einen bestimmten Code ersetzt. Es ist eine Art Makro. Wichtiger noch als .exit ist .startup. Du hast in Deinem Code ja die vereinfachte Segmentanweisung benutzt. Hier kannst Du das Speichermodell mit der .model-Direktive einstellen. Nun musst Du aber auch das Stacksegment entsprechend einstellen. Das erledigt .startup. Du kannst natürlich auch alle Segmente mit der umständlichen Methode(SEGMENT-Direktive) definieren. Aber immer wenn Du mit .model das Speichermodell einstellst musst Du auch .startup und am Ende .exit nutzen.

    Ciao...


Anmelden zum Antworten