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