为什么不能两次获得不同的鼠标单击坐标?部件

时间:2019-04-26 15:31:29

标签: assembly x86 mouse dos tasm

我有一个小程序,应该检查是否有单击并获取单击的坐标。第一次可以使用,但是当我第二次调用时,它甚至都不允许我再次单击...为什么?怎么了?

我尝试了所有操作,将鼠标设置放在了过程之外,没有任何区别。 另外,我尝试创建一种小的东西,单击一次,将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次不同的单击,然后从每次单击的坐标中找出框的颜色。为什么我只能在屏幕上单击一次??

0 个答案:

没有答案