关于在屏幕上显示字符不稳定的有关问题

关于在屏幕上显示字符不稳定的问题
assume cs:codesg

datasg segment

           db 'welcome to masm!'

datasg ends

codesg segment
        
 start:       
mov ax,0b800h
        mov es,ax
        mov ax,datasg
        mov ds,ax
        mov bx,0
        mov si,0
        mov cx,16
      s:
        mov al,[bx]
        mov es:[si],al
        mov word ptr es:[si+1],42h
        
        inc bx
        add si,2

  
        loop s
     s0:
        loop s0

        mov ax,4c00h
        int 21h
codesg ends

end  start

这是我写的代码,想实现的功能是:在窗口起始位置显示 'welcome to masm!',红底绿字
但是编译完运行的效果不理想,有时候会出现 'welcome to masm!'(如图)但是几率太小:
关于在屏幕上显示字符不稳定的有关问题
大多数时候是这样的:
关于在屏幕上显示字符不稳定的有关问题
请大家帮忙分析下为什么会出现这种情况

------解决思路----------------------
你这什么 os,win8 吗?直写视频缓冲区的,尽量到纯 dos 下吧,比如虚拟机的 dos 什么的;windows 的可能存在兼容性问题。