![]() | 第6章 文字输出与键盘输入 | -157- | |||||||||||||||||||
0BFC:0110 0BFC:0113 0BFC:0116 0BFC:0118 0BFC:011B 0BFC:011D 0BFC:011F 0BFC:0121 0BFC:0123 0BFC:0126 0BFC:0129 0BFC:012B 0BFC:012C 0BFC:012D 0BFC:012F 0BFC:0130 0BFC:0131 0BFC:0133 0BFC:0134 0BFC:0135 0BFC:0137 0BFC:0138 0BFC:013A 0BFC:013D 0BFC:013F |
MOV MOV REPZ MOV MOV INT CMP JZ ADD MOV MOV OUT INC MOV OUT DEC MOV OUT INC MOV OUT JMP MOV INT INT |
AX,0242 CX,0800 STOSW BX,0000 AH,00 16 AL,1B 013A BX,+50 DX,03D4 AL,0C DX,AL DX AL,BH DX,AL DX AL,0D DX,AL DX AL,BL DX,AL 011B AX,0003 10 20 |
;AX寄存器装入"绿色"的"B" ;写入一个显示页的数据 ;BX寄存器清0 ;等待键盘输入 ;输入的是"ESC"吗? ;是"ESC",转013A结束程序 ;BX寄存器加50H(一个字符行) ;DX指向索引寄存器 ;选择CRTC12寄存器 ;输出索引号 ;DX指向数据寄存器 ;取得偏移地址的高字节 ;并将其输出至CRTC12 ;DX指向索引寄存器 ;选择CRTC13寄存器 ;输出索引号 ;DX指向数据寄存器 ;取得偏移地址的低字节 ;并将其输出至CRTC13 ;转011B继续 ;设置显示模式为03H ;结束程序 |
||||||||||||||||||
这个程序先在显示缓冲区第0页中写入一屏蓝色的"A",在第1页写入一屏绿色的"B",首先出现在屏幕上的是第0页。我们可以看到每按一次键,屏幕便向上滚动一行,同时可以看到第1页的内容也有一部分出现在屏幕上。连续按键则第0页的内容逐渐滚出屏幕,而第1页的内容出现在屏幕上。直到按下Esc后程序重置显示模式并结束运行。 用这种方法滚动屏幕比使用10H中断要快速,一般情况下我们往往将这种滚屏方法称为"硬件滚屏",而将使用10H中断滚动屏幕称为"软件滚屏"。这种滚屏方法应用不多,因为它总要将下一显示页的内容滚上屏幕。但有时使用这种滚屏技术可以很简单地产生一些特殊效果,比如使一段文字从屏幕下面"徐徐升起"。 ③ CRTC14-CRTC15寄存器称光标地址寄存器,用于控制光标位置。这两个寄存器的结构和显示起始地址寄存器(CRTC12-CRTC13)一样,只不过低14位表示的是光标所在的内存地址。 也就是说,CRT控制器看待光标位置的方式和我们不一样,我们习惯于用行与列坐标来给出光标位置,而CRTC则是把光标当做字符来看待,光标位置就是"光标字符"在显示缓存中的偏移地址,单位同显示起址一样使用"字"。例如我们需要将光标置于第一行第四列,则光标地址为"(1×160+4×2)/2=54H"。请看下面的实验: |
|||||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |