目录 上一页 下一页 下一章

-156- PC机汇编语言实战精解

制电路却是以"字"为单位。所以我们在设定CRTC寄存器时应将字节偏移量转换成字偏移量。比如第二个显示页的偏移地址是1000H(字节),我们现在需要让第二个显示页出现在显示器上,就应该设定CRTC13为00H,而设定CRTC12为08H。请看下面的实验:
C:\ASM\>DEBUG[Enter]
-a100[Enter]
0A9B:0100
0A9B:0103
0A9B:0105
0A9B:0108
0A9B:010B
0A9B:010E
0A9B:0110
0A9B:0113
0A9B:0115
0A9B:0116
0A9B:0117
0A9B:0119
0A9B:011A
0A9B:011C
0A9B:011E
0A9B:011F
0A9B:0121
0A9B:0122
0A9B:0123
0A9B:0125
0A9B:0126
MOV
MOV
MOV
MOV
MOV
REPZ
MOV
MOV
OUT
INC
MOV
OUT
MOV
INT
DEC
MOV
OUT
INC
MOV
OUT
INT
AX,B800
ES,AX
DI,1000
AX,0241
CX,0800
STOSW
DX,03D4
AL,0C
DX,AL
DX
AL,08
DX,AL
AH,00
16
DX
AL,0C
DX,AL
DX
AL,00
DX,AL
20
;初始化ES寄存器指向显示缓冲区

;DI寄存器指向第一个显示页偏移地址
;AX寄存器装入"绿色"的字符"A"
;写入一个显示页的数据

;DX指向索引寄存器
;选择CRTC12寄存器
;输出索引号
;DX指向数据寄存器
;输出第1显示页偏移地址高字节

;等待键盘输入

;DX指向索引寄存器
;选择CRTC12寄存器
;输出索引号
;DX指向数据寄存器
;输出第0显示页偏移地址的高字节

;结束程序
  键入命令"G=100 110"后屏幕上无任何反映,继续键入"G=110"后屏幕上出现了一片绿色的大写字母"A",此时按下任意键屏幕上重新出现第一个显示页的内容。
  除了切换显示页之外,这两个寄存器还有一个重要的功能--滚动屏幕。因为PC机从未要求这两个寄存器必须装入每个显示页的起始地址,所以我们可以设想如果将CRTC12设为0,而将CRTC13设为50H话,那么我们就应该看到显示器上的字符向上滚动了一行。是否会有想象中的结果,请看下面的实验:
C:\ASM\>DEBUG[Enter]
-a100[Enter]
0BFC:0100
0BFC:0103
0BFC:0105
0BFC:0108
0BFC:010B
0BFC:010E
MOV
MOV
MOV
MOV
MOV
REPZ
AX,B800
ES,AX
DI,0000
AX,0141
CX,0800
STOSW
;初始化ES寄存器指向显示缓冲区

;DI寄存器指向第0个显示页
;AX寄存器装入"蓝色"的"A"
;写入一个显示页的数据


Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章