Почему я не могу получить разные координаты щелчков мышью дважды? сборка - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть небольшая процедура, которая должна проверить, был ли клик, и получить координаты клика. В первый раз это работает, но когда я звоню во второй раз, он даже не дает мне щелкнуть снова ... почему? что не так?

Я все перепробовал, поставил настройки мыши вне процедуры - никаких различий не произошло. Кроме того, я попытался создать какую-то маленькую вещь, где вы нажимаете один раз, помещаете cx в si и снова вызываете sam click check, сравнивая si и новый cx, и он отличается (si равен 0 в начале, так что мусора нет), но на реальном экране я могу щелкнуть только один раз, прежде чем он перейдет к части сравнения.

IDEAL
MODEL small
STACK 100h
DATASEG
a11 db ?
a12 db ?
b1 db ?
a21 db ?
a22 db ?
b2 db ?
CODESEG
;---------------------------------------------------------
;find color from click of mouse
;---------------------------------------------------------
proc line ;vertical line 
mov si,5d
mov bh,0h
startagain: ;;print another pixel
mov ah,0ch
int 10h
inc dx
dec si
cmp si,0
jnz startagain

ret
endp line
;---------------------------------------------------------
proc box1 ; make box 1/7-number 0
mov cx,8
mov dx,8
mov al,4
call line

mov di,10d
here:
;make a box
mov cx,8
mov dx,8
inc cx
call line
dec di
cmp di,0

jnz here

ret
endp box1
;---------------------------------------------------------
proc box2 ; make box 1/7-number 0
mov cx,20
mov dx,20
mov al,8
call line

mov di,10d
here1:
;make a box
mov cx,8
mov dx,8
inc cx
call line
dec di
cmp di,0

jnz here1

ret
endp box2
;---------------------------------------------------------

PROC LeftButtonClick
    mov  ax, 0000h  ; reset mouse
    int  33h        
    cmp  ax,0FFFFh
    jne  NoMouse
    mov  ax, 0001h  ; show mouse
    int  33h
    MouseLP: ; till cx= x of click & dx= y
    mov  ax, 0003h  ; get mouse position and buttonstatus
    int  33h       
    cmp bx, 1      ; check left mouse click
    jne   MouseLP    ; Loop until mouse click
    shr cx,1
    dec dx 

    call findcolor

NoMouse:    
    ret
ENDP LeftButtonClick 
;---------------------------------------------------------
proc findcolor
    add dl,'0'
    mov ah,02
    int 21
    ret
endp findcolor
;---------------------------------------------------------
start:
    mov ax, @data
    mov ds, ax
    ; Graphic mode
    mov ax, 13h
    int 10h

    call box1
    call box2
    call LeftButtonClick
    xor bx,bx
    call LeftButtonClick

    ; Wait for key press
    mov ah,00h 
    int 16h

; Return to text mode
    mov ah, 0
    mov al, 2
    int 10h 

exit:
    mov ax, 4c00h
    int 21h
END start

В основной программе мне нужно получить 6 различных щелчков по полям, отображаемым на экране, и по координатам каждого щелчка я нахожу цвет блока. Почему я могу щелкнуть только один раз на экране ???

...