请问在dos下用汇编设置光标的问题!

时间:2022-06-17 10:28:34
看书上的介绍时说:int 10h ,ah = 1 时可以设置光标的类型--设置光标的起始行和结束行 但是 自己怎么试都出不来效果 谁能具体介绍一下这个调用 和最后的效果是什么样子的. 谢谢

6 个解决方案

#1


mov ah,1
mov ch,起始行
mov cl,结束行
int 10h

#2


主要是设置光标的高度和宽度。

#3


int 10h如果用在v8086下,總會出現問題,我用int10h清屏時如果dos不全屏顯示,就會死機,但是在別的機器同樣的系統下(2k)就不會.

#4


刚刚去找了一下资料:
;│BIOS 呼叫 INT 10H,AH=01H                                         │
;│設定游標形狀                      ┌──┐                        │
;│&#63153; (CH) <= 游標的啟始線 (0~15)    │    │<---- 啟始線            │
;│&#63154; (CL) <= 游標的終止線 (0~15)    │    │                        │
;│註:正常: CH=0DH,CL=0EH           │    │<---- 終止線            │
;│   消失: CH=0FFH,CL=0FFH 

那个“啟始線、終止線”指向的框框就是一个字符所占的位置,应该可以看懂吧:)。
但是其中ch,cl取值似乎有些问题。
我自己试了一下:ch正常取值范围是0到7,cl的正常取值范围是ch到ch+3。
(也就是说,光标所在的高度只能取8个值,厚度不超过3)
当然你也可以取一些特殊值,如果cl>ch+3,那样的话那个字符就“全亮”了。
或者cl<ch时,也会“全亮”。
或者ch和cl都大于20h时,光标就消失。

eg:

C:\>debug
-a
0B30:0100 mov ah,1
0B30:0102 mov ch,0
0B30:0104 mov cl,1
0B30:0106 int 10
0B30:0108 int 20
0B30:010A
-n cursor.com
-rcx
CX 0000
:A
-w
Writing 0000A bytes
-q
C:\>cursor.com
效果是光标跑到上面去了。
------------------------------------------
至于你说的“怎么试都出不来效果”,会不会是有其他原因?
比如console是不是窗口模式,不是全屏?
或者你的系统是XP?那样console光在全屏下也不行。你可以这样试一下:
C:\>debug cursor.com
-g
Program terminated normally


希望能对你有所帮助!

#5



┌──┐                        │
│    │<---- 啟始線            │
│    │                        │
│    │<---- 終止線            │
 ------

楼上的图形扭了。

#6



┌──┐                        
│    │<---- 啟始線            
│    │                        
│    │<---- 終止線            
 -----
我无奈了...我不相信把这个烂图改不好!

#1


mov ah,1
mov ch,起始行
mov cl,结束行
int 10h

#2


主要是设置光标的高度和宽度。

#3


int 10h如果用在v8086下,總會出現問題,我用int10h清屏時如果dos不全屏顯示,就會死機,但是在別的機器同樣的系統下(2k)就不會.

#4


刚刚去找了一下资料:
;│BIOS 呼叫 INT 10H,AH=01H                                         │
;│設定游標形狀                      ┌──┐                        │
;│&#63153; (CH) <= 游標的啟始線 (0~15)    │    │<---- 啟始線            │
;│&#63154; (CL) <= 游標的終止線 (0~15)    │    │                        │
;│註:正常: CH=0DH,CL=0EH           │    │<---- 終止線            │
;│   消失: CH=0FFH,CL=0FFH 

那个“啟始線、終止線”指向的框框就是一个字符所占的位置,应该可以看懂吧:)。
但是其中ch,cl取值似乎有些问题。
我自己试了一下:ch正常取值范围是0到7,cl的正常取值范围是ch到ch+3。
(也就是说,光标所在的高度只能取8个值,厚度不超过3)
当然你也可以取一些特殊值,如果cl>ch+3,那样的话那个字符就“全亮”了。
或者cl<ch时,也会“全亮”。
或者ch和cl都大于20h时,光标就消失。

eg:

C:\>debug
-a
0B30:0100 mov ah,1
0B30:0102 mov ch,0
0B30:0104 mov cl,1
0B30:0106 int 10
0B30:0108 int 20
0B30:010A
-n cursor.com
-rcx
CX 0000
:A
-w
Writing 0000A bytes
-q
C:\>cursor.com
效果是光标跑到上面去了。
------------------------------------------
至于你说的“怎么试都出不来效果”,会不会是有其他原因?
比如console是不是窗口模式,不是全屏?
或者你的系统是XP?那样console光在全屏下也不行。你可以这样试一下:
C:\>debug cursor.com
-g
Program terminated normally


希望能对你有所帮助!

#5



┌──┐                        │
│    │<---- 啟始線            │
│    │                        │
│    │<---- 終止線            │
 ------

楼上的图形扭了。

#6



┌──┐                        
│    │<---- 啟始線            
│    │                        
│    │<---- 終止線            
 -----
我无奈了...我不相信把这个烂图改不好!