мышь с int 33h в ASM не работает - PullRequest
2 голосов
/ 22 декабря 2011

Я играл со сборкой, компилировал в файлы .com с помощью NASM в Windows 7. По какой-то причине это не работает:

org 100h
run1:
mov ax, 3
int 33h
cmp bx, 0
je run1
xor bx, bx
run2:
mov ax, 3
int 33h
cmp bx, 0
je run2
int 20h

Я думаю, что это должно повторяться run1, пока не будет щелкнуть мышью, а затем сделать то же самое с run2. Затем программа должна выйти. Но когда я запускаю программу, она ждет только одного щелчка мыши. Что мне нужно сделать, чтобы это исправить? Заранее спасибо

Ответы [ 2 ]

4 голосов
/ 22 декабря 2011

Я верю, что это будет сделано (с комментариями).
( код не проверен )

По сути, теперь есть 3 цикла.
1.) Дождитесь нажатия кнопки.
2.) Подождите, пока кнопка не будет отпущена.
3.) Дождитесь повторного нажатия кнопки.

org 100h
run1:
mov ax, 3
int 33h     #Check the mouse
cmp bx, 0   #See if button is pressed
je run1     #If Not pressed, go back and check again

xor bx, bx  #Okay, button is pressed, clear the result

run1a:
mov ax, 3
int 33h     #Check the mouse
cmp bx, 0   #See if button is released
jne run1a   #If NOT equal, then not released, go check again.

xor bx, bx  #button is released, clear the result

run2:
mov ax, 3
int 33h     #Check the mouse
cmp bx, 0   #if button is pressed (2nd time)
je run2     #If NOT pressed, go to top.

int 20h     #Button was pressed.  All done (we don't care when its released)
4 голосов
/ 22 декабря 2011

Проблема в том, что кнопка мыши остается нажатой в течение некоторого времени. Следовательно, после run1 вам нужно подождать, пока кнопка снова не отпустится, а затем вы можете начать проверку второго щелчка снова.

...