![]() | 第6章 文字输出与键盘输入 | -135- | |||||||||||||||||||
main code |
dec jns int endp ends end |
bl loop1 20h main |
;循环计数减1 ;循环至LOOP1继续 ;结束进程 |
||||||||||||||||||
在这个程序中“等待键盘输入”的位置做了些调整,运行这个程序时可以清楚的看到屏幕自上而下滚动4、3、2、1行的情况,以及AL寄存器清零后整屏被清除。如果要验证清窗口的功能,只需稍稍修改一下窗口的左上与右下角坐标即可。其实原来提出的在屏幕上显示空格的方法也能完成诸如清"窗口",改变新行属性等功能,只是编程不如新讨论的两个功能简便而已。 实际上刚刚讨论过的这些清屏方法都有些繁琐,下面介绍的这个方法就可以说十分简单快捷了。在前面讨论显示模式的时候曾经提到过一般的显示卡能支持多种显示模式,程序需要使用何种显示模式是可以选择的。这里需要再补充一点,那就是当程序设定一种新的显示模式后,BIOS中断服务程序会自动的清除整个屏幕,这样看来重置显示模式也是一种清屏方法。设置显示模式可以使用10H中断的0号功能: |
|||||||||||||||||||||
![]() |
功能号:00H 用 途:设置显示模式 参 数:AL = 显示模式号 调 用:INT 10H 返 回:无 |
||||||||||||||||||||
当系统启动之后,DOS默认的显示模式是模式3,也就是80列25行的字符模式。所以如果编程重新选择显示模式3,那么就会有"清屏"的效果而且DOS的显示模式没有改变。下面给出了一个试验程序: | |||||||||||||||||||||
C:\ASM\>DEBUG [Enter] -a100[Enter] 09DF:0100 mov ax,0003 09DF:0103 int 10 09DF:0105 ret 09DF:0106[Enter] |
;利用10H中断的0号功能 ;将屏幕设置为03模式 |
||||||||||||||||||||
键入"G=100"马上就会看到屏幕被清除的干干静静,短短两条指令就有立竿见影的效果。不过可不要高兴的太早,有一个很重要的问题被忽略了,这个问题并不隐蔽,那就是给出的试验程序对"当前"的显示模式作了假定。 的确,DOS确实工作在模式3下,但这并不意味着其他的程序都使用显示模式3,很明显如果我们编制一个图形程序那么使用上面这一小段程序清屏就会乱套。这提醒我们在设置显示模式之前应该查出当前的显示模式,而后将当前显示模式作为新的显示模式进行设置,这样才可以保证清屏后显示模式不变。好在10H中断提供了一个功能调用专用于查出当前显示模式: |
|||||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |