目录 上一页 下一页 下一章

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

-g 100 106[Enter]     注意CX寄存器光标的起始、终止线都为0
AX=0100BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=09DFES=09DFSS=09DFCS=09DFIP=0106 NV UP EI PL NZ NA PO NC
09DF:0106CD10INT 10    准备改变光标形状
  注意下面要用"P"命令跟踪INT指令的执行,不要使用"T"命令,那样DEBUG将跟踪到BIOS中去。
-p
AX=000BBX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=09DFES=09DFSS=09DFCS=09DFIP=0108 NV UP EI PL NZ NA PO NC
09DF:0108B401MOV AH,01
  执行过的这一小段程序将光标的起始线与终止线都设为0,跟踪完"INT 10"后我们可以看到光标跑到了字符的上面且变成了一条细线。(我是看到了,你呢?)看来第二个问题有了答案:若光标终止线位置不在字符区的最后一线,那么光标就会出现在字符区的不同位置。
-g=108 10e[Enter]     起始线在终止线以下
AX=010BBX=0000CX=0100DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=09DFES=09DFSS=09DFCS=09DFIP=010E NV UP EI PL NZ NA PO NC
09DF:010ECD10INT 10
  程序的后半部分设置了新的光标形状,起始线在终止线以下,不知会出现什么结果。我们来跟踪一下:
-p
AX=000BBX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=09DFES=09DFSS=09DFCS=09DFIP=0110 NV UP EI PL NZ NA PO NC
09DF:011008847453OR [SI+5374],AL
  由跟踪结果我们可以得出这样的结论,即当使用01H功能改变光标形状时光标终止线可以不设在字符行的最底线,但是应保证起始线在终止线上面,否则就无法知道光标会变成什么样子。笔者使用一块具有PCI接口的"S3 868"显示卡,执行后一半程序时光标被关闭,使用其它显示卡会出现什么结果可就不好说了。所以除非必要,最好还是按规矩办事。
  关于光标的问题我们暂且讨论到这里,下面我们要来研究一个非常关键的问题,那就是如何清屏幕。我想我们没有任何理由认为这个问题不重要,几乎所有高级语言都提供了清屏的语句或函数,即使是DOS也提供了CLS命令。这些语句、函数以及CLS命令究竟是如何起作用的呢?这就是我们将要研究的问题。
  说实在的,如果单就"清屏幕"这个问题而言解决的办法有很多,恐怕大家都能想到这个方法那就是在屏幕上显示25行空格就可清除屏幕上所有的内容。下面这个程序就是据此思路编写的:
C:\ASM\>DEBUG [Enter]
-a100[Enter]



Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章