2017-05-12 25 views
0

即时通讯工程在学校上课。我的项目是一个包含一些elemntaric行动的计算器。我画了一个BitMap并将其放入屏幕,一旦我要求输入一切正常。在第二次IM要求输入什么也没有发生 IM连接 感谢您的relevantic程序很多组装8086鼠标第二次输入问题

`proc ActiveMouse 
push ax 
xor ax,ax 
int 33h;starting mouse 
mov ax,1 
int 33h;Mouse Pointer active 
pop ax 
ret 
endp ActiveMouse 


proc getClick 
push ax 
push bx 
push dx 
push cx 
ror bx,1 
LeftClickStatus: 
rol bx,1 
mov ax,3h 
int 33h;get click status 
ror bx,1 
jnc LeftClickStatus 
mov [word ptr YCoordinate],dx;dx is max 200 
mov ax,cx 
mov cx,2 
xor dx,dx 
div cx 
mov [XCoordinate],ax 
pop cx 
pop dx 
pop bx 
pop ax 
ret 
endp getClick` 

回答

0

您提供不包含多的,你可能有问题的代码。
下面是一些意见,但:

proc ActiveMouse 
push ax 
xor ax,ax 
int 33h;starting mouse 
mov ax,1 
int 33h;Mouse Pointer active 
pop ax 
ret 
endp ActiveMouse 

ActiveMouse程序也应保持BX作为AX = 0调用它返回一个按钮计数。


mov ax,cx 
mov cx,2 
xor dx,dx 
div cx 
mov [XCoordinate],ax 

你为什么不简化这个除以2 ???

shr cx, 1 
mov [XCoordinate], cx 

ror bx,1 
LeftClickStatus: 
rol bx,1 

这些BX操作不做任何有用的东西。 BXAX = 3调用返回,但不是其输入参数之一。


确保GetClick程序可以访问DS段。如果需要,请在以下位置使用细分倍数前缀:

mov [cs:YCoordinate], dx 
mov [cs:XCoordinate], cx