经典汇编语言教程:例8.11 动态显示文本鼠标的位置

例8.11 动态显示文本鼠标的位置

在屏幕的右上角动态显示文本鼠标的位置,即:鼠标的任何移动都将马上显示其所处位置,按鼠标左键结束程序的运行。

解:
.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
ClsScrPROC;清除整个屏幕
ClsScrMOVAX, 0600H
MOVBH, 30H
MOVCX, 0
MOVDX, 184FH
INT10H
RET
ENDP
;把两位十进制数Data转换成字符串放入以首地址Desc开始的缓冲区之中
BTOAscPROC USES AX CX DI Data:WORD, Desc:PTR BYTE
BTOAscMOVAX, Data
MOVDI, Desc
MOVword ptr [DI], 2020H;赋两个空格
MOVCL, 10
DIVCL
ORAL, 30H
MOV[DI], AL
INCDI
ORAH, 30H
MOV[DI], AH
RET
ENDP
;把当前鼠标位置(CX,DX)显示在屏幕右上角,该子程序在本程序被设置为鼠标移动事
;件的中断处理程序,所以,只要鼠标一移动,该子程序马上就被执行。
DispPosPROC  FAR
DispPosSHRCX, 3
SHRDX, 3
INVOKE BTOAsc, CX, ADDR XASC
INVOKE BTOAsc, DX, ADDR YASC
MOVAH, 02H
MOVBH, 0
MOVDX, 046H
INT10H;设置字符串的显示位置
MOVAH, 40H
MOVBX, 01H
MOVCX, COUNT
LEADX, MSG
INT21H;显示鼠标位置的字符串
RET
ENDP
.STARTUP
CALLClsScr
MOVAX, 00
INT33H
.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
MOVDX, word ptr OldAddr
MOVES, word ptr OldAddr+2
MOVCX, 1
MOVAX, 0CH
INT33H;恢复原鼠标移动的中断服务程序
CALLClsScr
.EXIT0
END

经典汇编语言教程·相关目录

第1章 汇编语言的由来,数据类型第2章 CPU资源和存储器
第3章 操作数的寻址方式第4章 标识符和表达式
第5章 微机CPU的指令系统第6章 程序的基本结构
第7章 子程序和库第8章 输入输出和中断
第9章 宏第10章 应用程序设计
第11章 数值运算协处理器第12章 汇编语言和C语言
汇编语言重要附录Windows API函数大全
版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号