问个汇编中的鼠标问题,高手来下,谢谢了
.MODELSMALL,C.DATAOldAddrDD?MSGLABELBYTEXMSGDB'X=';显示方式:X=**Y=**XASCDW?DB''YMSGDB'Y='...
.MODEL SMALL, C
.DATA
OldAddr DD ?
MSG LABEL BYTE
XMSG DB 'X=' ;显示方式:X=** Y=**
XASC DW ?
DB ' '
YMSG DB 'Y='
YASC DW ?
Count EQU $-MSG
.STACK 128
.CODE
ClsScr PROC ;清除整个屏幕
ClsScr MOV AX, 0600H
MOV BH, 30H
MOV CX, 0
MOV DX, 184FH
INT 10H
RET
ENDP
BTOAsc PROC USES AX CX DI Data:WORD, Desc:PTR BYTE
BTOAsc MOV AX, Data
MOV DI, Desc
MOV word ptr [DI], 2020H
MOV CL, 10
DIV CL
OR AL, 30H
MOV [DI], AL
INC DI
OR AH, 30H
MOV [DI], AH
RET
ENDP
DispPos PROC FAR
DispPos SHR CX, 3
SHR DX, 3
INVOKE BTOAsc, CX, ADDR XASC
INVOKE BTOAsc, DX, ADDR YASC
MOV AH, 02H
MOV BH, 0
MOV DX, 046H
INT 10H ;设置字符串的显示位置
MOV AH, 40H
MOV BX, 01H
MOV CX, COUNT
LEA DX, MSG
INT 21H ;显示鼠标位置的字符串
RET
ENDP
.STARTUP
CALL ClsScr
MOV AX, 00
INT 33H
.IF AX != 00
MOV AX, 01H
INT 33H ;显示鼠标指针
MOV AX, CS
MOV ES, AX
LEA DX, DispPos
MOV AX, 14H
MOV CX, 1 ;把子程序DispPos设置成鼠标
INT 33H ;移动事件的中断服务程序
MOV word ptr OldAddr, DX
MOV word ptr OldAddr+2, ES ;保存原移动事件处理程序的入口地址
.REPEAT
MOV AX, 03H
INT 33H
.UNTIL BX==1 ;按下鼠标左键
MOV AX, 02H
INT 33H ;隐藏鼠标指针
.ENDIF
MOV DX, word ptr OldAddr
MOV ES, word ptr OldAddr+2
MOV CX, 1
MOV AX, 0CH
INT 33H ;恢复原鼠标移动的中断服务程序
CALL ClsScr
.EXIT 0
END
那个中断21,40号子功能是写文件的意思,显示不了字符啊,
还有Count EQU $-MSG中的$这个符号怎么理解啊,高手解释下啊,谢谢了
高手在回答下啦,那INT 21,40功能怎么理解呢,不能显示字符啊,
我用DEBUG运行这个程序,鼠标不显示啊,是什么意思,还是不能用DEBUG运行吗 展开
.DATA
OldAddr DD ?
MSG LABEL BYTE
XMSG DB 'X=' ;显示方式:X=** Y=**
XASC DW ?
DB ' '
YMSG DB 'Y='
YASC DW ?
Count EQU $-MSG
.STACK 128
.CODE
ClsScr PROC ;清除整个屏幕
ClsScr MOV AX, 0600H
MOV BH, 30H
MOV CX, 0
MOV DX, 184FH
INT 10H
RET
ENDP
BTOAsc PROC USES AX CX DI Data:WORD, Desc:PTR BYTE
BTOAsc MOV AX, Data
MOV DI, Desc
MOV word ptr [DI], 2020H
MOV CL, 10
DIV CL
OR AL, 30H
MOV [DI], AL
INC DI
OR AH, 30H
MOV [DI], AH
RET
ENDP
DispPos PROC FAR
DispPos SHR CX, 3
SHR DX, 3
INVOKE BTOAsc, CX, ADDR XASC
INVOKE BTOAsc, DX, ADDR YASC
MOV AH, 02H
MOV BH, 0
MOV DX, 046H
INT 10H ;设置字符串的显示位置
MOV AH, 40H
MOV BX, 01H
MOV CX, COUNT
LEA DX, MSG
INT 21H ;显示鼠标位置的字符串
RET
ENDP
.STARTUP
CALL ClsScr
MOV AX, 00
INT 33H
.IF AX != 00
MOV AX, 01H
INT 33H ;显示鼠标指针
MOV AX, CS
MOV ES, AX
LEA DX, DispPos
MOV AX, 14H
MOV CX, 1 ;把子程序DispPos设置成鼠标
INT 33H ;移动事件的中断服务程序
MOV word ptr OldAddr, DX
MOV word ptr OldAddr+2, ES ;保存原移动事件处理程序的入口地址
.REPEAT
MOV AX, 03H
INT 33H
.UNTIL BX==1 ;按下鼠标左键
MOV AX, 02H
INT 33H ;隐藏鼠标指针
.ENDIF
MOV DX, word ptr OldAddr
MOV ES, word ptr OldAddr+2
MOV CX, 1
MOV AX, 0CH
INT 33H ;恢复原鼠标移动的中断服务程序
CALL ClsScr
.EXIT 0
END
那个中断21,40号子功能是写文件的意思,显示不了字符啊,
还有Count EQU $-MSG中的$这个符号怎么理解啊,高手解释下啊,谢谢了
高手在回答下啦,那INT 21,40功能怎么理解呢,不能显示字符啊,
我用DEBUG运行这个程序,鼠标不显示啊,是什么意思,还是不能用DEBUG运行吗 展开
若以下回答无法解决问题,邀请你更新回答
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询