⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pcmouse.asm

📁 此程序是微机与接口技术的课程设计源程序
💻 ASM
字号:
;FILENAME:PCMOUSE.ASM
;内容: 操纵鼠标,显示坐标   
STACK	SEGMENT
 	DB 64 DUP (?) 
STACK 	ENDS     
DATA 	SEGMENT
LEN_DATA EQU   34				;显示长度
XCOORD	DW   0					;二进制的X坐标
YCOORD	DW   0					;二进制的Y坐标
ASCVAL	DW    ?					;ASCII域

DISPDATA   LABEL   BYTE				;屏幕显示域:
BEGMESG   DB  'Mouse Position:    '		;	
XMSG  	DB  'X ='				; X的信息
XASCII	DW   ?					; X的ASCII值
       	DB   ' '
YMSG  	DB   'Y='				; Y的信息
YASCII	DW   ?					; Y的ASCII值
DISPEND  DB '  '
DATA ENDS
; .386     
;  ........................
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, ES:DATA,SS:STACK
A10MAIN	PROC   FAR
      	MOV   AX, DATA				; 初始化DS和ES地址
      	MOV   DS,AX
      	MOV   ES,AX				;
		
       	CALL   Q10CLEAR				; 清屏
       	CALL  B10INITZ				; 初始化鼠标
       	CMP   AX, 00				; 已安裴鼠标?
       	JE    A90 				; 否,迟出
A20:   CALL  C10POINTR				; 取鼠标指针
        CMP   BX,01				; 按下健?
        JE  A80					; 是,退出
        MOV   AX, XCOORD			; X转换为
        CALL  D10CONVRT				; ASCII
        MOV   AX, ASCVAL
        MOV   XASCII, AX
        MOV   AX, YCOORD			; Y转换为
        CALL  D10CONVRT				; ASCII
        MOV   AX, ASCVAL
       	MOV   YASCII, AX   			; 显示X和Y
       	CALL  E10DISPLY				; 
       	JMP  A20				; 重复
A80:  	MOV  AX, 02H				; 请求隐蔽指针
       	INT  33H
A90:  	CALL   Q10CLEAR				; 消屏
       	MOV   AX, 4C00H				; 处理结束
       	INT   21H
A10MAIN  ENDP
;======================
B10INITZ   PROC    NEAR				; 使用AX
      	MOV  AX, 00H				; 请求初始化鼠标
       	INT  33H						;
       	CMP  AX, 00				; 鼠标已安装
       	JE   B90				; 否,退出
       	MOV  AX, 01H				; 显示鼠标指针
       	INT   33H
B90:   RET					; 返回调用程序
B10INITZ  ENDP
;====================== 			以下为获取鼠标指针位置:
C10POINTR PROC  NEAR				; 使用AX,BX,CX,DX
C20:  	MOV  AX, 03H				; 取指针位置
       	INT  33H				;
       	CMP  BX, 00000001B			; 左键按下?
       	JE   C90				; 是,表示退出
 ;     	SHR  CX, 03		
		PUSH AX				; 像素坐标除8
                
		MOV AX,CX
      	MOV CL,3
      	SHR AX,CL
      	MOV CX,AX
	           
  ;   	SHR   DX, 03
      	PUSH CX
		MOV AX,DX
      	MOV CL,3
      	SHR AX,CL
       	MOV DX,AX
       	POP CX
		POP AX

       	CMP   CX, XCOORD			; 指针位置
      	JNE   C30				; 改变?
       	CMP   DX, YCOORD			;
      	JE    C20				;
C30:  	MOV  XCOORD, CX				; 否,重复操作
       	MOV   YCOORD, DX			; 是,保存新位置
C90: 	RET					; 返回调用程序
C10POINTR ENDP
;======================				以下为二进制的X或Y位置转换为ASCII:
;						AX已设置输入数据=二进制的X或Y
D10CONVRT PROC  NEAR				; 使用CX,SI
       	MOV  ASCVAL, 2020H			; 清除ASCII域
       	MOV   CX, 10				; 设置除数
       	LEA  SI, ASCVAL+ 1			; 装入ASCVAL地址
       	CMP  AX, CX				; 位置与10比较
       	JB  D20					; 低于10,跳转
       	DIV  CL					; 高于10,除以10
       	OR  AH, 30H				; 转换成ASCII
       	MOV  [SI], AH				; 存入最右边字节		
       	DEC   SI				; ASCVAL地址减1
D20:  	OR   AL, 30H				; 变为ASCII
       	MOV  [SI] ,AL				; 存入最左边字节
       	RET					; 返回调用程序

D10CONVRT ENDP
;================				; 显示X,Y位置
E10DISPLY   PROC        NEAR			; 使用AX,BX,BP,CX,DX
       	MOV  AX,1300H				; 请求显示
      	MOV  BX,0031H				; 页:属性
      	LEA  BP,DISPDATA			; 串地址
       	MOV   CX,LEN_DATA			; 字符数
       	MOV   DX,0018H				; 屏幕行:列
       	INT   10H				;
       	RET					; 返回调用程序
E10DISPLY  ENDP
;================				清屏,设置属性
Q10CLEAR PROC  NEAR				; 使用AX,BX,BP,CX,DX
       	MOV  AX,0600H				; 请求清屏
       	MOV  BH, 30H				; 颜色
       	MOV  CX,00				; 全屏
       	MOV  DX,184FH
       	INT  10H
       	RET					; 返回调用程序
Q10CLEAR ENDP
CODE ENDS
END   	A10MAIN

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -