![]() | 第6章 文字输出与键盘输入 | -127- | |||||||||||||||||||
;*等待* ;****** end_out: main code |
inc mov int ********* mov int ********* jmp mov int endp ends end |
dl ah,2 10h ************** ah,0 ;* 16h ;* ************** outloop ah,4ch 21h main |
;光标所在列加1 ;利用10H中断的02H功能 ;将光标移动到下一列 ;转至OUTLOOP输出下一个字符 ;结束进程 |
||||||||||||||||||
这里有必要说明一下返回CX中"光标类型"的含义。大家都知道文本屏幕上的光标的形状是可变的,最明显的就是当我们使用DOS中的编辑器"EDIT"时,在插入状态下光标是一粗横线,而按下"Insert"键后光标会变成一个方块。所以所谓光标类型其实就是指光标的高度。 当程序使用03H功能取得光标位置时,BIOS会把光标的高度通过CX寄存器返回,CH是光标起始扫描线,CL是光标终止扫描线。注意这里所说的扫描线是指在一个字符空间内的位置。请看下面用DEBUG跟踪的结果: |
|||||||||||||||||||||
C:\ASM\>DEBUG DISPSTR2.EXE[Enter] | |||||||||||||||||||||
-g=0 b[Enter] 光标类型 光标位置 | |||||||||||||||||||||
AX=0310 | BX=0000 | CX=0D0E | DX=1800 | SP=0000 | BP=0000 | SI=0000 | DI=0000 | ||||||||||||||
DS=0A10 | ES=0A00 | SS=0A10 | CS=0A12 | IP=000B | NV UP EI PL NZ NA PO NC | ||||||||||||||||
0A12:000B | B314 | MOV BL,14 | |||||||||||||||||||
返回的光标类型为0D0EH,说明光标起始于第13线,终止于14线。无论光标在屏幕的哪个位置,这两个数字都不会变。VGA卡全屏共有480根扫描线,每个字符占16根线,因此VGA卡的光标起始线和终止线决不会大于16。 既然光标形状是可以改变的,那么有没有方法通过程序改变光标类型呢?BIOS为我们提供了一个功能调用--01H功能,这个功能专用于改变光标类型: |
|||||||||||||||||||||
![]() |
功能号:01H 用 途:改变光标类型 参 数:CH=光标起始行(0-15) CL=光标结束行(0-15) 调 用:INT 10H 返 回:无 |
||||||||||||||||||||
下面的程序演示了这个功能调用的应用,程序中又出现了一个新的条件转移指令: | |||||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |