在屏幕上打印一句话

printing a sentence on screen

我需要使用 ah, 09h 技术在屏幕上打印一个完整的句子。我现在不知道为什么它没有出现在屏幕上。

message db 'game over, to play again press y$'
PROC GAMEOVER
push dx
    call cleanscreen
    mov dx, offset message
    mov ah,9h
    int 21h
    mov ah,0
    int 16h
    cmp al, 'y'
    jne line
        CALL STARTGAME
    line:
    pop dx
RET 
ENDP GAMEOVER

proc cleanscreen ; cleans the screen
    push cx
    push bx
    mov cx,4000d
    mov bx,0
    clean:
        mov [byte ptr es:bx],0
        inc bx
    loop clean
    pop bx
    pop cx
    ret
endp cleanscreen

查看 cleanscreen 过程:

proc cleanscreen ; cleans the screen
 push cx
 push bx
 mov cx,4000d
 mov bx,0
clean:  mov [byte  ptr es:bx],0
 inc bx
 loop clean
 pop bx
 pop cx
 ret
endp cleanscreen

屏幕设置为 80x25 16 色文本模式。当您清除其中存储所有零的屏幕时,这意味着所有字符单元格都填充有 ASCII 代码 0(这是一个 space 字符)和属性 00h(这是 BlackOnBlack)。这里重要的是 DOS.PrintString 函数 09h 不关心屏幕上已经存在的属性,也不输出任何新的颜色信息。因此,您的文本字符可以很好地写入屏幕,但是 由于 black 前景色和 你看不到任何字符黑色 背景色.

这样写过程:

proc cleanscreen ; cleans the screen
    push ax
    push cx
    push di
    mov  ax, 0720h  ; WhiteOnBlack space character
    mov  cx, 2000   ; 80*25
    xor  di, di
    rep  stosw      ; write CX words starting at [es:di] 
    pop  di
    pop  cx
    pop  ax
    ret
endp cleanscreen