目录 上一页 下一页 下一章

第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=0310BX=0000CX=0D0EDX=1800SP=0000BP=0000SI=0000DI=0000
DS=0A10ES=0A00SS=0A10CS=0A12IP=000B NV UP EI PL NZ NA PO NC
0A12:000BB314MOV 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

目录 上一页 下一页 下一章