-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 |