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...