【问题标题】:Assembly 8086 mouse second input issue组装8086鼠标第二次输入问题
【发布时间】:2017-05-13 21:55:09
【问题描述】:

我正在为学校做项目。我的项目是一个计算器,其中包括一些简单的动作。我画了一个位图并将其加载到屏幕中,一旦我要求输入一切正常。第二次我要求输入什么也没发生 我附上相关程序 非常感谢

`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`

【问题讨论】:

    标签: assembly input mouse x86-16


    【解决方案1】:

    您提供的代码没有包含太多可能遇到的问题。
    以下是一些观察结果:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2015-07-30
      • 2023-04-04
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多