目录 上一页 下一页 下一章

第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

目录 上一页 下一页 下一章