hm... also habe mal etwasw rumprobiert, also ne Zeile hat bei mir 150 Zeichen, weiß aber leider net wie das bei Dir ist, glaub das ist auflösungsabhängig, hier nochmal etwas Code
cld ;direction-flag löschen - um fehler bei schreibrichtung zu vermeiden
;denn man weiss ja nie ;) ...
mov di, 0 ;nur der hier wird verändert....
mov si, mesg
mov bx,0xb800 ; Load gs to point to video memory
mov gs,bx ;diese zeile nach oben, da gs sowieso nicht mehr verändert wird...
mov ah, 6 ;6 bedeutet braun!! - eine wichtige notitz :)
next:
mov al, [si] ; si nach al
cmp al, 13 ; ist der WErt 13 ??
jne sign
mov al, [si+1] ; undn der nächste 10 ??
cmp al, 10 ; dann zeileumbruch
jne sign
inc si ;nächstes Zeichen (13)
inc si ;näcshtes zeichen (10)
mov ax, si ; si nach bx
sub ax, mesg ; si - mesg = Anzahl der ausgegebenen Zeichen
mov dx, 150 ; Bildschirmbreiet ist 150
sub dx, ax ; 150 - bx
add di,dx ; zu di dazuaddieren
mov word [gs:di],0
sign:
mov al, [si]
cmp al,0
je ende
mov word [gs:di],ax ; display
inc di ;2x inc, da wir es ja mit words zu tun haben....
inc di
inc si
jmp next
ende:
das einzige Problem daran ist, dass aus irgendwelchen Gründen die nächste Zeile sehr seltsam angezeigt wird. Was du noch beachten solltest, ist dass du di nicht mehr zurücksetzen solltest
Grüße
Morti