首页 > 解决方案 > 按下鼠标两次后退出的汇编程序

问题描述

所以现在我只能让它循环并等待点击,但是,一旦我点击,程序就会认为我仍然在按住点击或其他东西,因为一旦我点击按钮状态就永远不会改变。所以程序只是循环到无穷大。

这是我所拥有的:

.286
TITLE ''
.MODEL SMALL

.STACK

.DATA
    clickR DB 'Right click',10,13,'$'
    ; clickI DB 'Left click',10,13,'$'

.CODE



main PROC FAR
    MOV AX, @DATA
    MOV DS, AX

    MOV AX, 0h       ; Init mouse
    INT 33h

    MOV AX, 01h      ; Show pointer
    INT 33h

mouse:
    MOV AX, 05h      ; Query Button-Pressed Counter
    MOV BX, 00h      ; Left button
    INT 33h

    CMP AX, 01h      ; Check left button status
    JNE mouse        ; Not pressed? Go back
    CMP BX, 02h      ; Check if it has been pressed twice
    JB right         ; < 2? Go to label
    JAE quit         ; >= 2? quit

    JMP mouse

right:
    MOV AH, 09h       ; Print that r-click has been pressed
    LEA DX, clickR
    INT 21h
    JMP mouse         ; Go back to mouse loop

quit:
    MOV AX, 4C00h
    INT 21h
main ENDP

END main

标签: assemblymousex86-16dosbox

解决方案


使用AH=3 返回位置和按钮状态而不是AH=5.

当它返回时BX=1(左键向下),重复查询并等待BX=0(按钮向上)。

如果您需要检测双击,请再次重复这两个查询。


推荐阅读