各位大大,有空的请指点一二,初学汇编解决办法

各位大大,有空的请指点一二,初学汇编
这是个向显存写入字符然后显示出来的程序,我写好用debug调试后结果只显示21行,按照程序的设计应该显示25行的为什么只有21行啊? 不懂,求解
assume cs:codesg,ds:datasg
datasg segment
   db 'hello world!',0
datasg ends
codesg segment
 start: mov ax,datasg
        mov ds,ax
        mov ax,0b800h
        mov es,ax
        mov bx,0
        mov al,00100100b
        mov cx,25
    s0: mov si,0
mov di,0
    s1: cmp byte ptr [si],0
        je ok
mov ah,[si]
        mov es:[bx+di+40],ah
        inc di
mov es:[bx+di+40],al
inc si
inc di
        jmp short s1
    ok: add bx,160
        loop s0
        mov ax,4c00h
        int 21h
codesg ends
end start


------解决方案--------------------
经编译运行,确认是25行!
------解决方案--------------------
被 debug 最后的 p 命令的输出滚屏给扔出去了呗。
最简单的就是 dos 命令行下,cls 命令清下屏,在直接运行你的这个程序;或者是清屏后 debug 载入你的程序,g 命令直接运行,保证 debug 的输出无须翻屏即可。