📄 page157.html
字号:
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
<title>第6章 文字输出与键盘输入</title>
</head>
<body>
<style type="text/css">
body {
background-color: #c0c0c0;
}
table {
background-color: #c0c0c0;
line-height: 24px;
}
</style>
<!导航条>
<p><a href="content1.html">目录</a> <a href="page156.html">上一页</a> <a href="page158.html">下一页</a> <a href="page168.html">下一章</a></p>
<table border=0 align="center" width=800 frame="box" rules="none">
<!标尺行>
<tr>
<td width=3%></td><td width=6%></td><td width=1%></td> <!左侧空白>
<td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td>
<td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td>
<td width=1%></td><td width=6%></td><td width=3%></td> <!右侧空白>
</tr>
<!页眉行>
<tr height=60 valign="bottom">
<td></td><td></td><td></td>
<td colspan=6><img src="icons/flag.gif"></td><td colspan=4></td><td colspan=6 align="right">第6章 文字输出与键盘输入</td> <!章节名>
<td></td><td>-157-</td><td></td> <!页码>
</tr>
<!页眉线>
<tr valign="top">
<td></td><td colspan=20><hr></td><td></td>
</tr>
<!正文>
<font face="宋体" lang="ZH-CN" size=3>
<tr height=20><td colspan=22></td></tr> <!顶部空白>
<tr>
<td></td><td></td> <!左边距>
<td colspan=3>
0BFC:0110<br>
0BFC:0113<br>
0BFC:0116<br>
0BFC:0118<br>
0BFC:011B<br>
0BFC:011D<br>
0BFC:011F<br>
0BFC:0121<br>
0BFC:0123<br>
0BFC:0126<br>
0BFC:0129<br>
0BFC:012B<br>
0BFC:012C<br>
0BFC:012D<br>
0BFC:012F<br>
0BFC:0130<br>
0BFC:0131<br>
0BFC:0133<br>
0BFC:0134<br>
0BFC:0135<br>
0BFC:0137<br>
0BFC:0138<br>
0BFC:013A<br>
0BFC:013D<br>
0BFC:013F
</td>
<td colspan=2>
MOV<br>
MOV<br>
REPZ<br>
MOV<br>
MOV<br>
INT<br>
CMP<br>
JZ<br>
ADD<br>
MOV<br>
MOV<br>
OUT<br>
INC<br>
MOV<br>
OUT<br>
DEC<br>
MOV<br>
OUT<br>
INC<br>
MOV<br>
OUT<br>
JMP<br>
MOV<br>
INT<br>
INT
</td>
<td colspan=5>
AX,0242<br>
CX,0800<br>
STOSW<br>
BX,0000<br>
AH,00<br>
16<br>
AL,1B<br>
013A<br>
BX,+50<br>
DX,03D4<br>
AL,0C<br>
DX,AL<br>
DX<br>
AL,BH<br>
DX,AL<br>
DX<br>
AL,0D<br>
DX,AL<br>
DX<br>
AL,BL<br>
DX,AL<br>
011B<br>
AX,0003<br>
10<br>
20
</td>
<td colspan=8>
;AX寄存器装入"绿色"的"B"<br>
;写入一个显示页的数据<br>
<br>
;BX寄存器清0<br>
;等待键盘输入<br>
<br>
;输入的是"ESC"吗?<br>
;是"ESC",转013A结束程序<br>
;BX寄存器加50H(一个字符行)<br>
;DX指向索引寄存器<br>
;选择CRTC12寄存器<br>
;输出索引号<br>
;DX指向数据寄存器<br>
;取得偏移地址的高字节<br>
;并将其输出至CRTC12<br>
;DX指向索引寄存器<br>
;选择CRTC13寄存器<br>
;输出索引号<br>
;DX指向数据寄存器<br>
;取得偏移地址的低字节<br>
;并将其输出至CRTC13<br>
;转011B继续<br>
;设置显示模式为03H<br>
<br>
;结束程序
</td>
<td></td><td></td> <!右边距>
</tr>
<tr>
<td></td><td></td> <!左边距>
<td colspan=18>
这个程序先在显示缓冲区第0页中写入一屏蓝色的"A",在第1页写入一屏绿色的"B",首先出现在屏幕上的是第0页。我们可以看到每按一次键,屏幕便向上滚动一行,同时可以看到第1页的内容也有一部分出现在屏幕上。连续按键则第0页的内容逐渐滚出屏幕,而第1页的内容出现在屏幕上。直到按下Esc后程序重置显示模式并结束运行。<br>
用这种方法滚动屏幕比使用10H中断要快速,一般情况下我们往往将这种滚屏方法称为"硬件滚屏",而将使用10H中断滚动屏幕称为"软件滚屏"。这种滚屏方法应用不多,因为它总要将下一显示页的内容滚上屏幕。但有时使用这种滚屏技术可以很简单地产生一些特殊效果,比如使一段文字从屏幕下面"徐徐升起"。<br>
③ CRTC14-CRTC15寄存器称光标地址寄存器,用于控制光标位置。这两个寄存器的结构和显示起始地址寄存器(CRTC12-CRTC13)一样,只不过低14位表示的是光标所在的内存地址。<br>
也就是说,CRT控制器看待光标位置的方式和我们不一样,我们习惯于用行与列坐标来给出光标位置,而CRTC则是把光标当做字符来看待,光标位置就是"光标字符"在显示缓存中的偏移地址,单位同显示起址一样使用"字"。例如我们需要将光标置于第一行第四列,则光标地址为"(1×160+4×2)/2=54H"。请看下面的实验:
</td>
<td></td><td></td> <!右边距>
</tr>
</font>
<!页脚线>
<tr valign="top">
<td></td><td colspan=20><hr></td><td></td>
</tr>
<!页脚>
<tr height=60 valign="top">
<td></td><td></td>
<td colspan=9><i>Copyright © 2004-2005 <a href="mailto:webmaster@nucstorm.com">Chunk Lee</a></i></td>
<td colspan=9 align="right"><i><a href="http://www.nucstorm.com" target="_top">www.nucstorm.com</a></i></td>
<td></td><td></td>
</tr>
</table>
<!导航条>
<p align="right"><a href="content1.html">目录</a> <a href="page156.html">上一页</a> <a href="page158.html">下一页</a> <a href="page168.html">下一章</a></p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -