在ASM中使用int 33h的鼠标不起作用

时间:2011-12-22 17:11:51

标签: assembly mouse nasm dos interrupt

我正在玩装配,在Windows 7上使用NASM编译.com文件。出于某种原因,这不起作用:

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 个答案:

答案 0 :(得分:4)

问题是鼠标按键保持按下一段时间。因此,在run1之后,您需要等到按钮再次释放,然后您可以再次开始检查第二次点击。

答案 1 :(得分:4)

我相信这样做(带评论) (代码未经测试

基本上,现在有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)