在屏幕上打印一句话
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
我需要使用 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