You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何我的汇编代码无法识别屏幕上第二个按钮的点击操作?

问题分析与修复方案

你的第二个按钮点击无响应的核心问题是代码逻辑顺序错误,导致第二个按钮的检查代码永远无法被执行到,具体问题和修复方法如下:

1. 核心逻辑缺陷

当前代码的执行流程存在致命问题:

  • 获取鼠标状态后,先严格校验第一个按钮的坐标范围(cx 112-452,dx 81-153)
  • 只要鼠标坐标不在这个范围内(比如第二个按钮的dx是157-198,远大于153),就会通过ja waitforpress直接跳回循环开头,根本碰不到第二个按钮的检查代码check_second_button
  • 即便鼠标在第一个区域内但未点击(bx≠1),此时dx也处于81-153区间,和第二个按钮要求的dx 157-198完全不重叠,第二个按钮的检查也不可能通过

2. 修复后的代码

调整检查顺序,让两个按钮的逻辑互不阻塞,修改后的代码如下:

proc whatPress
    pusha
    call setUpMagicNumbers
    call startscreen
    mov ax,00
    int 33h         ; 初始化鼠标
    mov ax,01
    int 33h         ; 显示鼠标光标
waitforpress:
    ;call Esc_end
    mov ax, 3
    int 33h         ; 获取鼠标状态和位置

    ; 检查第一个按钮区域
    cmp cx, 112
    jb check_second_button   ; cx过小,跳过第一个按钮检查
    cmp cx, 452
    ja check_second_button   ; cx过大,跳过第一个按钮检查
    cmp dx, 81
    jb check_second_button   ; dx过小,跳过第一个按钮检查
    cmp dx, 153
    ja check_second_button   ; dx过大,跳过第一个按钮检查
    cmp bx, 1h
    je startt                ; 触发第一个按钮逻辑

check_second_button:       ; 检查第二个按钮区域
    cmp cx, 336
    jb waitforpress         ; cx过小,回到循环
    cmp cx, 624
    ja waitforpress         ; cx过大,回到循环
    cmp dx, 157
    jb waitforpress         ; dx过小,回到循环
    cmp dx, 198
    ja waitforpress         ; dx过大,回到循环
    cmp bx, 1h
    je Rulejump             ; 触发第二个按钮逻辑

    jmp waitforpress        ; 未触发任何按钮,回到循环

startt:
    mov ax,02
    int 33h         ; 隐藏鼠标
    call clean
    call GamePlay
    popa
    ret
Rulejump:
    call RuleWaitPress
    popa
    ret
endp whatPress

3. 关键修改点

  • 当鼠标不在第一个按钮区域时,不再直接跳回循环,而是跳转至第二个按钮的检查逻辑
  • 调整跳转分支,确保两个按钮的检查逻辑都能被执行到
  • 统一处理未触发任何按钮的情况,跳回循环等待下一次输入

内容的提问来源于stack exchange,提问作者steven FM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 05:53:12